Ho una semplice direttiva personalizzata con un input, che sto vincolando al mio componente. Ma per qualsiasi motivo, il metodo ngOnchanges() non si attiva quando si modifica una proprietà child della proprietà di input.Modifica della proprietà figlio Angular2 non attiva aggiornamento sulla proprietà associata
my.component.ts
import {Component} from 'angular2/core';
import {MyDirective} from './my.directive';
@Component({
directives: [MyDirective],
selector: 'my-component',
templateUrl: 'Template.html'
})
export class MyComponent {
test: { one: string; } = { one: "1" }
constructor() {
this.test.one = "2";
}
clicked() {
console.log("clicked");
var test2: { one: string; } = { one :"3" };
this.test = test2; // THIS WORKS - because I'm changing the entire object
this.test.one = "4"; //THIS DOES NOT WORK - ngOnChanges is NOT fired=
}
}
my.directive.ts
import {Directive, Input} from 'angular2/core';
import {OnChanges} from 'angular2/core';
@Directive({
selector: '[my-directive]',
inputs: ['test']
})
export class MyDirective implements OnChanges {
test: { one: string; } = { one: "" }
constructor() { }
ngOnChanges(value) {
console.log(value);
}
}
template.html
<div (click)="clicked()"> Click to change </div>
<div my-directive [(test)]="test">
Qualcuno può dirmi perché?
Nessuno di questi sembra funzionare per me. Ho provato a impostare esplicitamente l'emettitore testChange su @Output() e ho provato ad essere type-specifc con il valore, ma semplicemente non attiva ngOnchanges nella direttiva. –
Dynde
Quale versione di Angular2 usi perché l'ho fatta funzionare con la versione beta0? –
Sono anche su beta.0. La dichiarazione di testChange non è valida neanche per me (devo assegnare o rinunciare alla dichiarazione del tipo e andare direttamente a: testChange = new EventEmitter();) Devo iscrivermi in qualche modo speciale nella mia direttiva per registrarlo l'eventEmitter? –
Dynde