2015-10-08 67 views
2

我想了解以下幾段代碼。如果我理解正確,下面我有三個與REST服務器數據源交互的資源對象(這些對象分別爲CategorySrv,ArticleSrvSearchSrv)。

app.factory('CategoryService', function($resource) { 
    return $resource('categories'); 
}); 

app.factory('ArticleService', function($resource) { 
    return $resource('articles'); 
}); 

app.factory('SearchService', function($resource) { 
    return $resource('articles/search'); 
}); 

現在,我想問的問題,如果何時是控制器的代碼執行?如果我加載頁面,它可能只運行一次。下一次它會什麼時候運行?控制器的代碼不會在循環中運行,而只能在視圖中調用其方法或者加載此控制器的頁面部分(AFAIK)時運行。

發生這種情況時,上面列出的資源對象注入參數列表和控制器的功能被稱爲:

app.controller('AppCtrl', function($scope, $location, CategoryService, ArticleService, CartService) { 


CategoryService.query(function(response) { 
    $scope.categories = response; 
}); 

ArticleService.query(function(response) { 
    $scope.articles = response; 
}); 

CartService.get(function(response) { 
    $scope.cartInfo = response; 
}); 

難道我理解這是否正確?另外,getquery之間的區別是什麼?

回答

0

是的。只有當控制器被加載時,代碼纔會在循環中運行。

$資源給予您使用getquery,不同之處在於該query將立即返回取決於是否isArray設置爲true空數組或對象的選項。這有助於渲染,以便在角度期望數組或對象時不會引發錯誤,但會像異步操作那樣得到未定義的錯誤。當響應返回數據時,由於$scope已更改,摘要週期將運行,並且隨後將重新呈現您的視圖。

文檔:https://docs.angularjs.org/api/ngResource/service/ $資源

+0

時,該網站加載因此,基本上,所有的查詢,並得到-S執行,旁邊的消化週期將更新視圖(它會停止循環檢測沒有什麼改變後$範圍),就是這樣嗎?之後沒有其他行動? – user107986

+0

不是在這種情況下,沒有。只是要清楚。初始渲染將提供空陣列。這可能會影響您在模板上可能具有的任何重複次數,並顯示未填充表格或列表。一旦響應回來,那麼數組將被填充,並且由於摘要週期檢測到範圍的更改,您的視圖將重新呈現。 – tells

+0

在這種情況下,您可能會看到3個額外的重新渲染,因爲您的響應會在不同的時刻出現。 – tells