组件中的DoCheck确实检测到服务中的更改

时间:2016-11-10 23:58:14

标签: angular service components

我最近遇到了这样的问题"如何检测服务中的变化,并使其在我的组件中可见"。

我使用DoCheck()解决了它:

DoCheck(){
    if( this.componentVar != this.myService.serviceVar){
         this.componentVar = this.myService.serviceVar;
    }
}

效果很好!但我没有看到它是一个好方法,所以这是我的问题: 你认为这个解决方案是好的吗?

1 个答案:

答案 0 :(得分:0)

$ doCheck被视为"观看"替换$ scope手表。我可以看到你的代码将你的组件绑定到服务变量。这是紧密耦合,不建议使用。它也会在每个消化周期运行,这通常会导致性能问题。更好的方法是在组件变量上使用单向绑定。因此,您的组件成为更可重用的转储组件。

var childComponent = {
  bindings: { componentVar: '<' },
  controller: function () {
    this.$onChanges = function (changes) {
           if(changes.componentVar){
                   //do something here
            }
    };
  }
};

angular
  .module('app')
  .component('childComponent', childComponent);