我开发了一个搜索栏,可以在完成搜索时触发事件。事件的监听器是一个控制器,它将从搜索栏传递的信息转换为以{{ 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
并且它有效,问题是,为什么它不能与控制器属性一起使用?
答案 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
的更多信息