angularjs之如何在两个 Controller 之间共享ajax返回的数据
lhb25
阅读:21
2024-09-07 23:24:14
评论:0
您好,我有两个 Controller ,其中一个我定义了一些函数来获取数据,我将数据存储在 $scope.data1 中,现在我想在另一个命名的 Controller 中访问此 $scope.data1 数据,以便通过路由加载时,我可能会在其他页面上访问相同的内容。我该怎么做。
这是我的代码。
commonApp.service('CommonServices',function($http){
this.getData=function(urlreq){
return $http({
method:"GET",
url :urlreq
});
};
commonApp.controller('Controller1',function($scope,CommonServices,toaster){
CommonServices.getData('dataurl1').success(function(getResponse){
$scope.data1=getResponse.success;
};
}
commonApp.controller('Controller2',function($scope,CommonServices,toaster){
$scope.data2= ????;
//i want my $scope.data1 in $scop.data2.
}
});
请您参考如下方法:
我相信您正在寻找这样的东西,您在其中使用相同的公共(public)服务来存储一段数据,该数据可以由有权访问该服务的任何 Controller 获取:
commonApp.service('CommonServices', function ($http) {
this.shared = null; // this is where the shared data would go
this.getData = function (urlreq) {
return $http({
method: "GET",
url: urlreq
});
};
this.setSharedData = function (data) { // this sets the value of the shared data
this.shared = data;
};
this.getSharedData = function () { // this retrieves the shared data
return this.shared;
}
});
commonApp.controller('Controller1', function ($scope, CommonServices, toaster) {
CommonServices.getData('dataurl1').success(function (getResponse) {
$scope.data1 = getResponse.success;
CommonServices.setSharedData($scope.data1);
// CommonServices.shared = $scope.data1; // this would also work
});
});
commonApp.controller('Controller2', function ($scope, CommonServices, toaster) {
$scope.data2 = CommonServices.getSharedData();
// $scope.data2 = CommonServices.shared; // this would also work
});
我基于您自己的示例代码,但我可能会采用不同的结构。但它提出了基本观点,我认为您的实际需求要复杂一些。
请注意,您不需要在服务中使用 setter 和 getter,但根据添加空值检查和覆盖现有值等内容的需要,这可能是有意义的。您会在评论中看到我提供了一个示例,说明您如何在没有设置和获取功能的情况下直接操作服务的属性。
希望这对您有所帮助,并且不要忘记投票并选择一个可接受的答案。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。