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返回,然後做一些事情。 –