Как новичок в Angular, я наткнулся на чистые каналы, которые
- a) Выполняется только при обнаружении чистого изменения входного значения.
- b) Чистыйизменение - это либо изменение примитивного входного значения
(String, Number, Boolean), либо изменение ссылки на объект (Array, Date, Function, Object). - c) Чистый канал не выполняется, есливходные данные для канала - это объект, и изменяются только значения свойств этого объекта, но не ссылка.
Часть справочника по объекту, с которой у меня все понятно, и проблема заключается в примитивных типах.
Важный факт, касающийся оптимизации с использованием чистого канала, заключается в следующем:
Angular будет оценивать заданный вызов чистого канала только в том случае, если он получил другие аргументы по сравнению с предыдущим вызовом.
Я пытался с примером:
applypure.pipe.ts
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'applypure',
pure: true
})
export class ApplypurePipe implements PipeTransform {
count = 0;
constructor() {
// To determine an instance is created
console.log('pipe created:');
}
transform(value: number, exponent: number): number {
//this.count++;
console.log(value);
return Math.pow(value, exponent);;
}
}
app.component.ts
import { Component } from '@angular/core';
@Component({
selector: 'my-app',
template: `
{{12 | applypure : 2}}
{{12 | applypure: 2 }}
`
})
export class AppComponent {
}
}
Результат показан ниже:
Передается тот же самый вводсразу после чистого канала, но метод преобразования вызывается дважды.Не следует ли пропустить переоценку?Пожалуйста, уточните.