Javascript 为什么$watch函数返回未定义?
下面是我的手表功能。。。它目前正在我的ViewFactory中观看一个函数Javascript 为什么$watch函数返回未定义?,javascript,angularjs,angularjs-service,watch,angularjs-watch,Javascript,Angularjs,Angularjs Service,Watch,Angularjs Watch,下面是我的手表功能。。。它目前正在我的ViewFactory中观看一个函数 // Watch for when tagsFilterModal is showing: vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) { console.log("New Data", newVal); }); 函数调用API并返回数据: function retrieveSavedViews() { console.l
// Watch for when tagsFilterModal is showing:
vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) {
console.log("New Data", newVal);
});
函数调用API并返回数据:
function retrieveSavedViews() {
console.log('retrieveSavedViews called...');
ApiFactory.getViews().then(function(data) {
if (data.data.status === 'Success') {
// Store views locally:
return storeSavedViews(data.data.views);
// Populate load view dropdown:
}
});
}
^您可以在上面看到,我返回了另一个函数storeSavedViews()
:
我怎么会在这里错误地使用了
$watch
服务?我建议您-几乎从不在函数上使用$watch。因为这样函数将在每个摘要周期中启动
这里有一个简单的$scope.$watch('test()')
,您可以看到,如果我更改了另一个scope变量,而您无法控制它,test()
将启动
您应该做的是存储对对象的承诺:$scope.object=Service.get()
并观察它。
通常,您可以将watcher创建留给angular,只需在html中使用:
<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>
正在检索数据。。。
已获取数据{{object}
如果您需要在异步调用完成后执行某些特定操作,那么最好提供回调函数。
RetrieveSavedView
不返回值。啊,好吧,是的,我忘记了返回ApiFactory.getViews()
现在实际上我不需要$watch
我可以等待承诺返回!隐马尔可夫模型。。。我会在这里继续一点,然后我想发布我的想法。请随便用一个让$watch
工作的例子来回答。这就是答案,永远不要使用$watch
中的函数,我解决了上面的问题,只是等待承诺返回,然后做一些事情。
<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>