使用controller属性触发事件后查看不更新

时间:2016-06-08 18:03:10

标签: javascript angularjs

我开发了一个搜索栏,可以在完成搜索时触发事件。事件的监听器是一个控制器,它将从搜索栏传递的信息转换为以{{ controller.node.name }}

形式绑定到视图的属性
app.controller('Controller', function($rootScope){
  this.node = undefined;

  $rootScope.$on('searchEvent', function(event, info) {
    $timeout(function(){
      $rootScope.$apply(function(){
        set(info);
      });
    }, 0);
  });

  function set(c) {
    this.node = c;
  }
});

我阅读了$scope.$apply并使用了他们提供的解决方案,但是示例使用的是$scope.node而不是controller.attribute

我尝试使用$scope.node并且它有效,问题是,为什么它不能与控制器属性一起使用?

1 个答案:

答案 0 :(得分:0)

因为this的值取决于函数的调用方式。

set被调用时,this具有不同的值,因此您实际上并未编辑相同的node,而是在此新建node变量this

如果使用变量而不是this,则确保引用相同的变量

app.controller('Controller', function($rootScope){
    var self = this;
    self.node = undefined;

    function set(c) {
        self.node = c;
    }
});

有关this

的更多信息