我有以下服务
function PathFactory() {
this.path = null;
this.setPath = function(path) {
this.path = path;
}
return this;
}
我的导航控制器:
function NavController($scope, PathFactory) {
list = document.getElementsByTagName("ul");
list = list[0];
var items = list.getElementsByTagName("li");
for(var i = 0 ; i < items.length ; i++) {
items[i].setAttribute("navIndex", i);
items[i].addEventListener("click", navClick);
}
function navClick(e) {
switch(e.path[1].hash) {
case "#home":
PathFactory.setPath("home");
break;
case "#bots":
PathFactory.setPath("bots");
break;
case "#servers":
PathFactory.setPath("servers");
break;
case "#status":
PathFactory.setPath("status");
break;
}
}
}
我的内容控制器:
function ContentController($scope, PathFactory) {
$scope.$watch(function() {
return PathFactory.path;
}, function (newValue) {
alert("changed value");
});
}
如果导航控制器改变PathFactory.path的值,$ scope。$ watch没有运行该函数,我可以通过任何方式使这个设置工作吗?
干杯。
答案 0 :(得分:2)
如果您希望AngularJS调用$watch()
方法,则必须手动调用$apply()
方法。
Angulars双向数据绑定仅适用,因为$scope
中任何更改内容的内容都会调用$apply
方法。就这样,Angular知道事情发生了变化。
尝试将此行代码$scope.$apply();
放在navClick
函数的末尾。
但是你绝对应该使用指令进行事件监听器和/或DOM-Manipulation