2013-04-08 45 views
0

在控制器,當我從服務中獲得的資源

$scope.myVariable = MyObject.get($scope.id); 

然後myVariable沒有被定義爲MyObject的,因爲它會在以後解決。是否有方法檢查控制器(不在服務中)中的變量,例如用於調試或記錄?基本上我尋找類似

console.log("myVariable now has property "+ $scope.myVariable.myProperty); 
+1

我不知道這是否會與資源工作,但是你可能想試試把它加到你的控制器中:'$ watch('myVariable',function(value){console.log(...)})'。您可能需要添加第三個參數到$ watch - 'true' - 如果您想要「深入檢查」/ [對象相等性檢查](http://docs.angularjs.org/api/ng.$ro​​otScope.Scope #$手錶),而不僅僅是參考檢查 – 2013-04-08 16:14:39

回答

2

從AngularJS文件到$resource,你可以讀到:

重要的是要認識到,調用$資源對象方法 立即返回一個是非常重要的空引用。 一旦數據從服務器返回,現有的參考數據爲 填充了實際數據。這是一個有用的技巧,因爲通常將資源分配給 模型,然後通過 視圖呈現該模型。擁有一個空對象不會導致渲染,一旦數據從服務器到達,則該對象將填充數據,並且該視圖會自動重新呈現顯示新數據的自身。 這個 意味着在大多數情況下,人們不必爲 的動作方法編寫回調函數。

,如果你需要,一旦它被填充到打印$scope.myVariable的價值,你必須定義一個回調函數:

$scope.myVariable = MyObject.get($scope.id, function(myVar){ 
    // From now, myVar == $scope.myVariable 
    console.log("myVariable now has property "+ myVar.myProperty); 
}); 
+0

謝謝,這可能是非常有用的。但是如果我想在控制器中看到變量? '$ scope.myVariable = MyObject.get($ scope.id); $ scope.myVariable.myProperty ='修改過的值'; console.log(「myVariable現在有屬性」+ ???)' – Dani 2013-04-08 13:17:57

+0

嗯,你應該發佈你的'controller'和'service'代碼然後,因爲我不明白你的意思:) – Franquis 2013-04-08 13:25:55

+0

在這種情況下日誌記錄),您的解決方案完美運行我只是在尋找更通用的解決方案。對我來說,有一個變量而不是它的價值似乎不自然。當然,異步調用具有優勢,但是如果我的下面的代碼依賴於結果的屬性,它會變得「不方便」,或者,我必須遵循另一種方法。如果我等待說要加載五個變量,則需要爲其定義五個函數,即IMO污染代碼。 – Dani 2013-04-12 19:24:50

相關問題