2016-03-17 88 views
1

如何将数据共享到所有控制器?在AngularJs中共享数据

我有要共享到其他控制器

sampleApp.controller('PhoneListCtrl', 
['$scope', '$http', 
function($scope, $http) { 
    $http.get('App_Data/phonelist.json'). 
     success(function(returnDataFrmJson){ 
      $scope.phonesScope = returnDataFrmJson; 
     }); 
}]); 

控制器将访问的第一个

sampleApp.controller('AddIPhoneController', 
['$scope', '$http', 
function($scope, $http) { 
    $scope.newInput= 'sample text'; 

    $scope.sharedText= dataFromSharedControll; 
}]); 
共享数据,从服务器(file.json)拉数据的控制器

将显示数据的html文件。

{{newInput}} {{sharedText}} 

回答

2

嗯,有你的各种选项,如使用: $sessionStoragelocalStorageappConstant$localStorage等。

您甚至可以使用FactoryServices共享控制器之间的数据。我会给你一个简单的例子,使用$sessionStorage.

为了使用$sessionStorage$localStorage,你需要注入ngStorage。

首先在您的索引中。HTML,包括源:

<script src="https://rawgithub.com/gsklee/ngStorage/master/ngStorage.js"></script>  
在你的模块定义

然后,注入ngStorage:

var sampleApp = angular.module('Your App Name', ['ngStorage']); 

而且,在你controllers

sampleApp.controller('PhoneListCtrl', 
['$scope', '$http', '$sessionStorage', 
function($scope, $http,$sessionStorage) { 
    $http.get('App_Data/phonelist.json'). 
     success(function(returnDataFrmJson){ 
      $scope.phonesScope = returnDataFrmJson; 
      $sessionStorage.sharedValue = returnDataFrmJson;//keeping the value in session 
     }); 
}]);  

controller将访问共享数据的第一个

sampleApp.controller('AddIPhoneController', 
['$scope', '$http','$sessionStorage', 
function($scope, $http,$sessionStorage) { 
    $scope.newInput= 'sample text'; 

    $scope.sharedText= $sessionStorage.sharedValue; 
}]); 

然后在您的View

{{newInput}}{{sharedText}} 
+0

这一个像魔术^^,谢谢,但我怎么能得到确切的数据,因为它在JSON格式。例如[{“name”:“oneName”,“address”:123},{“name”:“twoName”,“address”:341}] –

+0

您可以在视图中以{{sharedText.name}} {{sharedText.address}}等等。 –

+0

明白了。按“。”绑定在视图^^,你有这个服务和本地存储比较哪个/哪个对那个有好处 –

0

如果我正确理解你的问题,你可以创建一个服务,并将它注入到其他控制器,像这样:

sampleApp.service('sharedProperties', function() { 
     var sharedText = ''; 
     return { 
      getSharedText: function() { 
       return sharedText; 
      }, 
      setSharedText: function(newText) { 
       sharedText = newText; 
      } 
     } 
    } 

然后在你的控制器:

sampleApp.controller('ControllerName', ['sharedProperties', function(sharedPropertied) { 
     var text = sharedProperties.getSharedText(); 
    }]); 

显然,你应该通过注入服务并将其设置在另一个控制器中来设置文本。

0

您应该通过服务共享数据。此外,控制器中的$ http呼叫应移至服务中。如果您然后在控制器中注入服务,您可以在控制器中调用该服务的方法/数据。

我建议你看看约翰爸爸的风格指南这里找到:https://github.com/angular/angular

0

你做错了,你想控制器之间共享数据服务应该存在不控制器

服务

sampleApp.service("MyService",function($http){ 
     this.phoneList = function(){ 
      return $http.get('App_Data/phonelist.json'); 
     };   
}); 

控制器1

sampleApp.controller('PhoneListCtrl1',function($scope,MyService) { 
     MyService.phoneList() 
      .then(function(list){ 
       $scope.phoneList = list; 
      }); 
    }); 

控制器2

sampleApp.controller('PhoneListCtrl2',function($scope,MyService) { 
      MyService.phoneList() 
       .then(function(list){ 
        $scope.phoneList = list; 
       }); 
    }); 
0

这取决于要求:

  1. 如果你的目的是分享控制器之间的数据,而不 通知控制器当数据被填充/更新,去 与服务/工厂方法。
  2. 如果你还想通知其他控制器,而填充/更新数据 那么你可以使用角度为 事件($ broadcast/$ emit)。
  3. 如果您想保留页面刷新或浏览器 附近的数据,可以选择会话/本地存储。