Mam dyrektywę i na niej jest @Input
, która akceptuje klasę.W angleular2, jak uzyskać zmiany w zmianach właściwości dla obiektu wysyłanego dla @Input
@Directive({selector: 'my-directive'})
@View({directives: [CORE_DIRECTIVES]})
export class MyDirective {
@Input() inputSettings : SettingsClass;
@Input() count : number;
onChanges(map) {
console.log('onChanges');
}
}
Dyrektywa służy w html:
...
<my-directive [input-settings]="settings" [count]="settings.count"></my-directive>
...
Jeśli settings.count zmienia się wówczas onChanges
będzie ogień. Jeśli jakakolwiek inna właściwość w klasie ustawień ulegnie zmianie, to nie zostanie uruchomiona.
Jak mogę wykryć, czy na jakiejś właściwości w ustawieniach?
Domyślam się to (obecnie?) nie działa ... może dlatego, że 'inputSettings' zawiera odwołanie do instancji obiektu i ponieważ samo odniesienie się nie zmienia, Angular prawdopodobnie nie próbuje porównywać właściwości obiektu, więc nie widzi ani nie zgłasza zmiana. (Mam nadzieję, że się mylę, lub mam nadzieję, że to naprawią). –
Rzeczywiście, [blog autora Victora Savkina] (http://victorsavkin.com/post/133936129316/artykuly-immutability-and-encapsulation) potwierdził moje przypuszczenia: "Jeśli obiekt adresowy jest zmienny, inny składnik może zaktualizować właściwość street bez tworzenia nowego obiektu adresu. Jeśli tak się stanie, hook onChanges nie zostanie wywołany". –
można również użyć programu pobierającego i ustawiającego dla właściwości wejściowej atrybutu – Ayyash