cloak - change title angular 4
¿Qué es el tubo impuro en angular? (3)
Además de la respuesta anterior, quiero agregar otra diferencia: el número de instancias.
Supongamos que una tubería se utiliza varias veces en un código HTML. Me gusta:
<p> {{''Hello'' | translate }}<p>
<p> {{''World'' | translate }}<p>
- Si la tubería es pura: solo habrá una instancia de la tubería. El método de transformación se llamará dos veces pero en la misma instancia.
- Si la tubería es impura: habrá dos instancias de la tubería.
(Puedes ver esto generando un ID aleatorio en el constructor de la tubería e imprímelo en ambos: constructor
y método de transform
)
Como las tuberías puras (o las funciones generalmente puras) no deben tener NINGÚN efecto secundario, el mismo código puro puede reutilizarse cualquier cantidad de veces sin preocupaciones. Parece que esta es la razón por la que los tubos puros son solo una vez instanciados.
OBS: esto es válido en mi entorno angular 4.0.
@Pipe({name:''myPipe'', pure: false})
No puedo entender las tuberías impuras, algunas mejor que las tuberías puras.
Por favor explícame con un ejemplo simple y básico.
En angular
, un pipe
puede ser utilizado como pure
e impure
¿Qué es el tubo puro o impuro?
En palabras simples,
impure-pipe
funciona para cada cambio en la matriz y
pure-pipe
funciona solo el component
está cargado.
¿Cómo hacer pipa pura o impura?
@Pipe({
name: ''sort'',
pure: true | false // true makes it pure and false makes it impure
})
export class myPipe implements PipeTransform {
transform(value: any, args?: any): any {
// your logic here and return the result
}
}
¿Cómo usarlo?
<div> {{ arrayOfElements | sort }}<div>
Haga clic para ver la demostración para demostrar la diferencia.
lea más en https://angular.io/guide/pipes
Un tubo puro solo se llama cuando Angular detecta un cambio en el valor o los parámetros pasados a un tubo. Se llama una tubería impura para cada ciclo de detección de cambios sin importar si el valor o los parámetros cambian.
Esto es relevante para cambios que no son detectados por Angular
- cuando se pasa una matriz u objeto que cambió el contenido (pero sigue siendo la misma instancia)
- Cuando la tubería inyecta un servicio para obtener acceso a otros valores, Angular no reconoce si han cambiado.
En estos casos, probablemente todavía quieras que la tubería se ejecute.
Debe tener en cuenta que las tuberías impuras tienden a ser ineficientes. Por ejemplo, cuando se pasa una matriz a la tubería para filtrar, ordenar, ... entonces este trabajo puede realizarse cada vez que se ejecuta la detección de cambios (lo cual es muy a menudo especialmente con la configuración predeterminada ChangeDetectionStrategy
) aunque la matriz ni siquiera haya cambiado . Su tubería debe intentar reconocer esto y, por ejemplo, devolver los resultados en caché.