我有一个角度组件,它有一个输入< code>Person
export class Person {
public name = 'Initial Name';
}
export class PersonComponent implements OnInit, OnChanges {
@Input() public person: Person;
ngOnChanges(changes: SimpleChanges): void {
console.log('changed');
}
}
在这个组件的父组件中,如果我替换了作为子组件输入的Person
对象,ngOnChanges()
但是,如果我只从父组件中更改
Person
对象的名称,
当输入的属性更改时,是否有任何方法在子组件中获得通知?
如果使用getter,那么每次给定一个值,setter就会被执行。所以变通办法可以有两个变量
@Input() person;
@Input()
set changePerson(value)
{
console.log(this.person);
}
所以,在你的父母中,你可以写
<app-child [person]="person" [changePerson]="changePerson"></app-child>
this.person.name="new name";
this.changePerson=true;
另一个选项是在服务中使用EventEmitter,每次更改
//Our service
@Injectable({
providedIn: 'root',
})
export class ChangeService {
changed: EventEmitter<any>=new EventEmitter();
emit(value:any)
{
this.changed.emit(value);
}
}
//Our parent
constructor (private changeService:ChangeService){}
ngOnInit()
{
setTimeout(()=>{
this.changeService.emit(this.person)
})
setTimeout(()=>{
this.person.name="George";
this.changeService.emit(this.person);
},5000);
}
//Our child
person:any;
ngOnInit() {
this.changeService.changed.subscribe(res=>{
this.person=res;
console.log(res);
})
}
匿名用户
您总是可以在< code>Person上创建一个观察对象,每当属性发生变化时,它就会发出。
从“rxjs”导入{ Subject };
export class Person {
private _changes = new Subject<any>();
private _name = 'Initial Name';
// subscribe to this one
public changes = this._changes.asObservable();
set name(newName: string) {
this._name = newName;
this._changes.next({'name': newName});
}
get name() {
return this._name;
}
}
这样,您就可以订阅 person.changes
,每次更改名称
时都会发出一个值
当您编写 person.name = “Fred”
时,将调用 setter,这反过来又会从可观察量发出新值。
不可以,ngOnChanges 钩子只会在引用更改时触发。通过在更改父组件中的 name 属性时执行此操作,可以轻松实现要执行的操作:
this.person = {...this.person, name: 'new value'};
我有一个父组件,它使用ajax请求检索对象数组。 该组件有两个子组件:一个以树结构显示对象,另一个以表格格式呈现其内容。父元素通过@input属性将数组传递给它们的子元素,子元素可以正确地显示内容。一切如预期。 当您更改对象中的某些字段时,就会出现问题:子组件不会收到这些更改的通知。只有当您手动将数组重新分配给其变量时,才会触发更改。 我已经习惯了使用Knockout JS,我需要获得类似于obs
使用Angular ,我正在创建一个属性组件并向其中注入一个值。为此,我在这里跟随答案。 我想知道有没有一种方法,就像在AngularJS中一样,直接在组件中输入一个值,而不需要定义单独的< code>[form]=""。例如:<代码> 导致“。 我正在尝试将我的表单(通过变量)注入组件,但我不想进行其他绑定,例如根据这里的帖子,这应该是可能的,但我无法工作。自从更高的Angular版本以来,这种
问题内容: 我有一个使用ajax请求检索对象数组的父组件。 该组件有两个子组件:一个子组件以树结构显示对象,另一个子组件以表格格式呈现其内容。父级通过@input属性将数组传递给其子级,它们会正确显示内容。一切都如预期。 当您更改对象内的某些字段时,会发生问题:子组件不会收到有关这些更改的通知。仅当您手动将数组重新分配给它的变量时,才会触发更改。 我已经习惯了使用Knockout JS,并且需要获
我需要检测绑定角度中的值变化,并在值更改时执行函数 当更改时,我需要执行一些代码组件类。
我有两个组件(父组件和一个子组件),我正在向子组件发送一个名为project的自定义对象,它会正确地更新/显示,但是当发生这种更改时,我想在子组件中执行另一个函数。是否可以检测项目对象何时更新,然后在子组件中运行该函数? 到目前为止,我已经通过以下代码取得了一些成就,但我不确定这是否是正确的方法。 编辑:我忘记提到输入是一个具有数组和不同属性类型的复杂对象。在代码示例中,我只比较了对象的一个属性。
我有一个父组件(CategoryComponent)、一个子组件(videoListComponent)和一个APIService。 我的大部分工作都很好,即每个组件都可以访问json api,并通过Observables获取其相关数据。 当前video list组件只获取所有视频,我想将其筛选为特定类别中的视频,我通过将categoryId传递给子对象实现了这一点。 CategoryCompon