Voy a proceder a quitar eso porque el siguiente ejemplo está usando este slot. Este selector está usando un selector CSS que dice que el atributo title debe coincidir con select me. Y en mi componente padre, estoy pasando una etiqueta de párrafo que tiene un atributo title con el valor select me. Así que, aunque lo estamos pasando en la parte superior, debería terminar en la parte inferior, lo cual hace.
Si no tuviera ese selector de slot y simplemente entrara aleatoriamente en el slot por defecto, entonces tendríamos select me en el club con la gente y no queremos eso. No, no. Al igual que en View, también podemos hacer proyección de contenido condicional. Pero esto usa la etiqueta ng-template. Está basado en el elemento template en su lugar. Así que, este va a ser un poco más de un viaje que vamos a emprender juntos.
Como una prop, estoy pasando la cadena para la fuente de mi imagen a donde estoy obteniendo la gente para poner en el club. Y tengo mi componente de proyección de contenido condicional. Está tomando a la gente como una prop y creando refs a estas etiquetas ng-template. Ahora mismo tengo un pequeño john-ng-template y lo estoy colocando directamente en una etiqueta ng-container. Así que, estoy usando el atributo ng-template outlet para tomar esa etiqueta template y montarla dentro de este contenedor. Así que, deberíamos ver gente en el club. Deberíamos ver a un pequeño John confundido, lo cual hacemos.
Si queremos ver gente en el club, entonces vamos a usar este contenedor ng-content que está accediendo a la referencia de la gente en el club. Esta vez estoy usando un atributo vinculado para poder pasar algo de contexto al contenedor, que es la cadena de dónde obtener la gente para poner en el club. Luego estoy pasando eso como otro atributo vinculado a mi etiqueta template, que finalmente lo pasa a mi imagen. Así que, deberíamos ver gente en el club, lo cual hacemos. He creado un componente que hace justo eso. Ahora mismo la prop showPeople está configurada en false.
Si subimos aquí, tengo mis mismas dos etiquetas ng-template y esta vez en ng-init, que es después de obtener todas mis props y todo, digo, oye, ¿es showPeople true o false? Ahora mismo es false, así que estamos tomando un contenedor de vista y creando una vista incrustada y pasando la etiqueta Lil Jon ng-template. Esto va a hacer exactamente lo mismo que tener la etiqueta ng-container y usar el atributo ng-template outlet. Deberíamos ver a Confuse Lil Jon. Si queremos ver gente en el club, entonces configuramos showPeople en true.
Ahora, view container createEmbeddedView pasará tanto la etiqueta template como la gente como contexto también. Ahí vamos. Pero espera, hay más. Angular dijo, ¿qué pasaría si te permitiéramos tener un modo de encapsulación de vista que sea literalmente la Shadow DOM API? Tengo un componente final llamado viewEncapsulationMode. Cuando defino mi componente, uso la propiedad encapsulation para seleccionar viewEncapsulationShadowDOM. Deberíamos ver la foto de graduación de Lil Jon, o Lil Lil Jon, si lo prefieres, dentro de un shadow root exactamente como lo habríamos visto en los componentes web. Aquí está su foto de graduación y ahí está dentro de un shadow root. Empieza a pensar con slots.
Aquí hay un código QR para obtener estas diapositivas. Hay formas de contactarme, todos los repositorios que he estado usando como ejemplos, y el blog con toda esta información. Espero que tengas un gran tiempo usando slots.
Comments