0

这是我的监视功能,在下面……它目前正在我的 ViewFactory 中监视一个功能。

// Watch for when tagsFilterModal is showing:
vs.$watch('ViewFactory.retrieveSavedViews()', function(newVal) {
    console.log("New Data", newVal);
});

retrieveSavedViews()函数调用 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()

function storeSavedViews(data) {
    savedViews = data;
    console.log('storeSavedViews savedViews',savedViews);
    return savedViews;
}

在此处输入图像描述

我在$watch这里如何使用错误的服务?

4

1 回答 1

0

我建议你 - 几乎永远不要在函数上使用 $watch。因为 then 函数将在每个摘要周期中启动。看这个例子

很简单,如果我更改另一个范围变量并且您无法控制它$scope.$watch('test()'),您会看到它启动。test()

你应该做的是将 promise 存储到 object:$scope.object = Service.get()并观察它。很多时候,您可以将观察者的创建留给有角度的,而只在 html 中创建:

<div ng-if="!object.$resolved">Retrieving data...
</div>
<div ng-if="object.$resolved">Got data {{object}}
</div>

如果您需要在异步调用完成后执行一些特定操作 - 您最好提供回调函数。

于 2015-10-14T18:35:35.540 回答