为什么我的 $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>

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