2015-10-08 41 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