在控制器之间共享angularjs中的服务,而不是多次访问服务

时间:2016-06-18 07:47:26

标签: angularjs

目前我正在研究涉及使用angularjs的项目。在开发模块时,我觉得需要在两个不同的控制器中重用服务提供的数据。

我有一个控制器Ctrl1,可以点击angularjs服务并获取数据。现在,使用View1.html的视图Ctrl1有一个链接,可以将用户导航到另一个视图View2.htmlView2.html使用控制器ctrl2

现在我想传递Ctrl1Ctrl2提取的数据而不再次点击该服务。我使用$rootScope完成了这项工作,但我读过它不推荐。我也看到很多文章建议使用服务,但这会打两次我不想要的数据库。

请建议。

1 个答案:

答案 0 :(得分:0)

与Durgpal提到的一样 - 您应该将数据保存在服务中。

例如,您可以在服务中使用两个方法--fetchDataFromServer,getDataFromNgService。 以及包含所需数据的服务的变量

    var dataHolder = {
      desiredData: null
    } 

    function fetchDataFromServer() {
       $http.getMyData().then(function(yourData) {
          dataHolder.desiredData = yourData 
       )}
    }

    function getDataFromNgService() {
       return dataHolder;
    }

CTRL1:

    service.fetchDataFromServer(); //fetch data from the server first
    this.data= service.getDataFromNgService();//set the dataHolder on your ctrl

ctrl2:

   this.data = service.getDataFromNgService();//dont call the server, just set he dataHolder from the ng service on your ctrl

,在完成对服务器的调用后,数据可在html中重新生成(双向数据绑定):

   {{ctrl.data.desiredData }}
希望那很有帮助。