1

我正在将 AngularJs 用于新应用程序。我觉得我已经解决了一个问题,但我不确定我是否以最好的方式完成了它,所以想在开枪前检查一下。

例如,假设我有两个控制器 AccountsCtrl 和 ContactsCtrl,每次调用每个控制器时,都会为所有帐户或联系人分别为每个控制器发出对 REST 服务器的请求。在控制器中时,任何数据更改都会在角度模型(和服务器后端)中保持同步,以反映这一点,从而反映 UI。每次用户在每个控制器之间切换时,他们都必须调用服务器以获取上次加载时已经拥有的数据(这是最新的)。

目前,这会导致非常小的延迟。我想让它持久化,即每次加载控制器时不加载以节省滞后和服务器请求。我尝试将数据保存到 $rootScope 中,效果很好,但我不确定这样做是否正确?

问题是如何最好地解决这个问题?$rootScope 是解决这个问题的最佳方法吗?

4

2 回答 2

2

我会将与 Web 服务器交互的数据和代码存储在一两个 Angular 服务中。每次创建控制器时(例如,当您第二次返回页面时),(适当的)服务应该决定是返回缓存数据还是向您的 REST 服务器发出 Ajax 请求。

您的服务将被注入到您的控制器中。

另请参阅https://stackoverflow.com/a/12009408/215945https://groups.google.com/d/topic/angular/eegk_lB6kVs/discussion

于 2013-01-10T16:01:17.280 回答
0

首先,您应该通过服务进行 REST 调用:

app.factory('RestService', ['$http', function($http) {
   return {
     getSomething: function(url) {
        var result = {};

        $http.jsonp(url).success(function(data) {
           result.list = data;
        });
        return result;
     }
   };
   ...
}];

你不需要$rootScope。只需定义一个父控制器,它涵盖两个控制器,例如RootController,并将数据存储在那里。这是因为子范围(例如来自 AccountsCtrl)继承了父范围中定义的内容。

<div ng-controller="RootController">
    <div ng-controller="AccountsCtrl">
    </div>
    <div ng-controller="ContactsCtrl">
    </div>
</div>

在实践中,这与 using 几乎相同$rootScope,但您不需要注入它,并且您的控制器逻辑与其他控制器相似。

于 2013-01-10T13:02:33.960 回答