我使用的是三个Angular控制器:
**Controller1**
var fetchStudentDetails = function(){
var sDetails = myService.getList(//url-1 here);
sDetails.then(function (data) {
$scope.studentData = data.list;
var studentId = $scope.studentData[0].id;
});
}
fetchStudentDetails();
$scope.loadSecondLevel = function(){
$state.go('secondLevel');
}
**Controller2**
var fetchClassDetails = function(){
var sDetails = myService.getList(//url-2 here);
sDetails.then(function (data) {
$scope.classData = data.list;
var className = $scope.classData[0].name;
});
}
fetchClassDetails();
$scope.loadThirdLevel = function(){
$state.go('thirdLevel');
}
**Controller3**
$scope.putStudentDetails = function(){
// Here I need studentId,className for updateResource
var sDetails = myService.updateResource(//url-3 here);
sDetails.then(function (data) {
});
}
我必须将studentId(在Controller1中),className(在Controller2中)传递给Controller3中的函数。我尝试使用$ rootScope,它正在工作,但刷新页面时$ rootScope值变为空。有谁知道怎么做?
答案 0 :(得分:1)
您的问题可以分为两个方面:
<强> 1。如何在控制器之间共享数据
在Angular 1.x中共享数据的最佳实践是使用factory
,将共享数据存储在工厂服务中,并向控制器公开访问方法:
factory('DetailData', function(myService, $q){
var _details;
function __getDetailData(){
return details
}
function __setDetailData(){
return myService.getList().then(function(data){
_details = data;
})
}
return {
getDetailData: __getDetailData,
setDetailData: __setDetailData
}
})
controller('myContrller', function(DetailData, $scope){
$scope.data = DetailData.getDetailData();
})
<强> 2。如何在页面刷新时保留数据
您可以使用localStorage
在页面重新加载期间保持数据持久性,许多工具和库可以实现这一点,例如ngStorage,或者每次角度应用程序启动时都可以从服务器重置数据:
//this would register work which would be performed
//when app finish loading and ready to start.
angular.module('app').run(function(DetailData){
DetailData.setDetailData();
})
答案 1 :(得分:0)
取决于您正在解决的问题。 有三种选择:
$rootScope
$scope.$emit
&amp; $scope.$on
功能。 如果您需要保存数据,那么在完整页面重新加载后可以使用它 - localStorage。
答案 2 :(得分:0)
嘿,这个问题在Passing data between controllers in Angular JS?
中得到回应但简单的回应是在服务中。