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; 
} 

enter image description here

怎么了我使用$watch服务错了吗?

+3

'retrieveSavedViews'不返回一个值。 – tcooc

+0

嗯,好吧,我忘了'现在我忘了'返回ApiFactory.getViews()'现在我不认为我需要'$ watch'我可以等待Promise返回!嗯...会继续在这里一点,然后我想发布我想出来的东西。随时以“$ watch”工作为例来回答。 –

回答

0

我建议你 - 几乎从不使用$ watch函数。因为那么函数将在每个摘要循环中启动。 Look this example

有简单的$scope.$watch('test()'),如果我更改另一个作用域变量并且无法控制此变量,您会看到test()启动。

你应该做的是保存对象的承诺:$scope.object = Service.get()并观看它。 很多时候你可以离开观察家创建到角,只是在HTML中:

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

如果你需要异步调用完成后做一些特定的动作 - 你更好地提供回调函数。

+0

这是答案,从不使用'$ watch'中的函数,我解决了上面的问题,只是等待Promise返回,然后做一些事情。 –