为什么我的 $watch 函数返回未定义?
Why is my $watch function returning undefined?
下面是我的监视函数...它当前正在监视我的 ViewFactory 中的一个函数。
// Watch for when tagsFilterModal is showing:
vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) {
console.log("New Data", newVal);
});
retrieveSavedViews()
函数调用 API 和 return 数据:
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:
}
});
}
^ 你可以在上面看到我 return 另一个函数 storeSavedViews()
:
function storeSavedViews(data) {
savedViews = data;
console.log('storeSavedViews savedViews',savedViews);
return savedViews;
}
我这里的$watch
服务怎么用错了?
我建议你 - 几乎从不在函数上使用 $watch。因为 then 函数将在每个摘要周期中启动。 Look this example.
有一个简单的 $scope.$watch('test()')
,如果我更改另一个范围变量,您会看到 test()
启动,而您无法控制它。
你应该做的是将 promise 存储到对象:$scope.object = Service.get()
并观察它。
通常你可以将 watcher 的创建留给 angular 而只是在 html:
<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>
如果您需要在异步调用完成后执行一些特定操作 - 您最好提供回调函数。
下面是我的监视函数...它当前正在监视我的 ViewFactory 中的一个函数。
// Watch for when tagsFilterModal is showing:
vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) {
console.log("New Data", newVal);
});
retrieveSavedViews()
函数调用 API 和 return 数据:
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:
}
});
}
^ 你可以在上面看到我 return 另一个函数 storeSavedViews()
:
function storeSavedViews(data) {
savedViews = data;
console.log('storeSavedViews savedViews',savedViews);
return savedViews;
}
我这里的$watch
服务怎么用错了?
我建议你 - 几乎从不在函数上使用 $watch。因为 then 函数将在每个摘要周期中启动。 Look this example.
有一个简单的 $scope.$watch('test()')
,如果我更改另一个范围变量,您会看到 test()
启动,而您无法控制它。
你应该做的是将 promise 存储到对象:$scope.object = Service.get()
并观察它。
通常你可以将 watcher 的创建留给 angular 而只是在 html:
<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>
如果您需要在异步调用完成后执行一些特定操作 - 您最好提供回调函数。