如何将数据共享到所有控制器?
我有一个控制器从服务器(file.json)中提取我想要共享给其他控制器的数据
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;
}]);
将显示数据的html文件。
{{newInput}} {{sharedText}}
答案 0 :(得分:2)
嗯,您可以使用以下各种选项:
$sessionStorage
,localStorage
,appConstant
,$localStorage
等等。
您甚至可以使用Factory
和Services
在控制器之间共享数据。我将为您提供一个使用$sessionStorage.
要使用$sessionStorage
或$localStorage
,您需要注入ngStorage。
首先在index.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}}
答案 1 :(得分: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();
}]);
显然,您应该通过注入服务并将其设置在另一个控制器中来设置文本。
答案 2 :(得分:0)
您应该通过服务共享数据。此外,控制器中的$ http调用应该移动到服务。如果您随后在控制器中注入服务,则可以从控制器中的该服务调用方法/数据。
我建议你看一下John Papa在这里找到的风格指南:https://github.com/angular/angular
答案 3 :(得分: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;
});
});
答案 4 :(得分:0)
试试$rootScope.phonesScope
。
这可能有所帮助。 understand rootscope
答案 5 :(得分:0)
这取决于要求: