如何使用工厂/服务在angularjs中的多个控制器之间共享信息?

时间:2013-07-04 13:51:53

标签: http angularjs controllers

我试图在应用启动时加载JSON,并在我的所有控制器之间传播数据。 我知道这不是很难做到,但我对所读的所有文章/答案感到困惑,因为他们使用的语法不同于我,有人可以指导我如何做到这一点吗?

我目前正在让控制器制作$ http.get:

myApp = angular.module("myApp", [])

myApp.controller "HomeCtrl", ($scope, $http, $routeParams) ->
 $http.get('gethome.php').success (data) ->
  $scope.home = data

但是我必须在每个我想要访问该数据的控制器中重复自己

2 个答案:

答案 0 :(得分:5)

我建议您使用Memoization模式和服务,并重用控制器中的服务

请检查以下示例代码

  var app = angular.module('plunker', []);

          app.service('cache', function ($http,$q) {
              var mycache={};
              return {
                  getdata: function (key) {
                      var deferred = $q.defer();
                      if (mycache[key]) {
                          deferred.resolve(mycache[key]);
                      }
                      else {
                          $http.get('TextFile.txt').then(function (data) {
                              mycache[key] = data.data;
                              deferred.resolve(mycache[key]);
                          });
                      }
                      return deferred.promise;
                  }
              }
          });


          app.controller('test', function ($scope, cache) {
              cache.getdata('cache').then(function (data) {
                  $scope.data = data;
              });
         });

           app.controller('test1', function ($scope, cache) {
              //since data is already cached now it will server the cached data
              cache.getdata('cache').then(function (data) {
                  $scope.data = data;
              });
         });

答案 1 :(得分:1)

您可以通过以下方式访问$scope

angular.element(document.getElementById('YourCtrl')).scope();

之后,您可以在所有控制器中初始化data