1

我对 Angular 很陌生,想知道处理这个问题的最佳方法是什么。我的应用程序由跟踪应用程序状态和当前加载数据的服务构成。我将它注入到我的所有控制器中,以便与它们共享应用程序状态,也可以通过使用服务在控制器之间进行更改。该服务的概述有点像这样:

app.factory('AppStateService', function() {
  return {
    selected_section: "blog",
    data_of_selected_section: {here_comes_data_from_an_api}
  }
}

如前所述,我将其注入所有控制器并将它们绑定到控制器范围,因此它们都可以更改这些属性,并且效果很好。但是,我真的希望该服务在某些属性发生更改时自动对 API 进行 $http 调用。当数据从 API 返回时,我希望将此数据分配给一个属性,以便控制器可以根据此数据进行更新。

例如,在上面的示例中,如果控制器selected_section从“blog”更改为“main”,我希望服务执行 $http 调用并将返回的数据放入data_of_selected_section以使其传播到控制器。我当然可以直接从控制器执行此操作并将结果从那里推送到服务,但是我必须在每个控制器中复制该代码。因此,我宁愿让服务自己做。

做这个的最好方式是什么?我想我必须在服务中构建一个$watch$watchCollection某个地方,但我很难弄清楚如何做到这一点。特别是因为我可以很容易地想象以错误的方式进行操作会影响性能。

顺便说一句,我想这样做的原因是因为我正在做数据可视化,因此它主要是我的界面而不是我的数据会改变。因此,我真的很想将我的数据和应用程序状态“全局”存储在服务中。我不知道这是否有意义。任何帮助将不胜感激!

4

1 回答 1

1

您可以使用.run此方法,因为此方法将在每次路由更改时实例化服务。

app.run(function ($rootScope, AppStateService) {
    $rootScope.$on('$routeChangeStart', function () {
       $rootScope.data = AppStateService.data_of_selected_section
    });
});

您可以在服务中编写您的http调用,因为只要路线发生变化,它就会自动调用

于 2013-10-28T07:13:18.103 回答