Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Angular2变化检测机制_Angular - Fatal编程技术网

使用Angular2变化检测机制

使用Angular2变化检测机制,angular,Angular,我可以知道我的对象的任何子体属性是否已更改吗? 我可以订阅一些会注意到我的事件吗?如果它们是@Input()myProp,那么您可以使用@Output()实现ngOnChanges(changes)并触发事件,但您需要准备说明来执行此操作 @Component({ selector: 'child-cmp' }) { export class Child { @Input() fooInput:string; @Input() barInput:number; @Output()

我可以知道我的对象的任何子体属性是否已更改吗? 我可以订阅一些会注意到我的事件吗?

如果它们是
@Input()myProp
,那么您可以使用
@Output()
实现
ngOnChanges(changes)
并触发事件,但您需要准备说明来执行此操作

@Component({
  selector: 'child-cmp'
}) {
export class Child {
  @Input() fooInput:string;
  @Input() barInput:number;
  @Output() changes:EventEmitter = new EventEmitter();

  ngOnChanges(changes) {
    this.changes.emit(changes);
  }
}


@Output()
s发出的事件不会冒泡,因此您只会收到直接子级的通知。如果您需要更多级别的共享服务,请改用共享服务。

您的答案对组件很好,但我的问题是关于对象/模型的。如果我有一个复杂的模型,例如学校->房间->椅子,并且我的用户正在更改特定椅子的名称。我能知道我的学校模式已经改变了吗?我想我必须每次检查一次ngOnChanges()检查?那么我不知道你的问题和Angular2有什么关系。你能添加一些代码来展示你真正想要完成的事情吗?在类中,您可以添加一个
Rx.Subject
(因为
EventEmitter
不建议用于
@Outputs()之外的任何东西)
。然后将您的属性实现为getter/setter,并在
set
中触发一个事件。我想我的问题并不特定于Angular2,但我希望Angular2可能会有一个解决方案。Angular2不处理普通类及其实例。
<child-cmp (changes)="childChangesHandler($event)">