将 JSON 数据从一个控制器传递到另一个 angularjs
Pass JSON data from one controller to other angularjs
我有一个登录服务,它给我 JSON 对象作为包含用户详细信息的响应。现在在此响应中,有一个名为 permissions 的对象,它为我提供了有关允许用户使用的 CRUD 权限的信息。
看起来像这样:
现在我有不同的页面,每个页面都有一个 table。我想要的是检查登录用户的权限,并根据 show/hide 元素到 create/read/update/delete 来自 table.
的记录
我目前正在做的是将对象保存到数组中:
$scope.permissionArry = [];
for (var i = 0; i < data.permissions.length; i++) {
$scope.permissionArry.push({
moduleId: data.permissions[i].module_id,
createModule: data.permissions[i].create_module,
readModule: data.permissions[i].read_module,
updateModule: data.permissions[i].update_module,
deleteModule: data.permissions[i].delete_module
});
}
然后尝试将此数组传递给其他控制器。
据我们所知,我们不能在 service/factory 中传递 $scope 我不知道如何继续(我不想使用 $rootScope)。
这是一个关于学习如何通过工厂或服务在两个控制器之间传递数据的问题。您不需要传递 $scope 变量,因为您应该将数据绑定到工厂中的对象。
这是一个简单的例子:
控制器 1
myApp.controller('Ctrl1', ['$scope', 'myFactory', function($scope, myFactory){
myFactory.data = someFunctionThatChangesTheData();
}]);
控制器 2
myApp.controller('Ctrl2', ['$scope', 'myFactory', function($scope, myFactory){
$scope.data = myFactory.data;
}]);
最后是您的 工厂
myApp.factory('myFactory', function(){
return {
data: {
value: 'some data'
}
}
});
然后您可以在视图中使用来自控制器二的数据:
视图 2(已分配 Ctrl2)
<div>
<h1>View 2</h1>
<p>{{data.value}}</p>
</div>
很简单,你需要使用服务来实现:
可以找到示例link
MyApp.app.service("xxxSvc", function () {
var _xxx = {};
return {
getXxx: function () {
return _xxx;
},
setXxx: function (value) {
_xxx = value;
}
};
});
我遇到了同样的问题。我使用了不受欢迎的解决方案,或者我会说必须有更好的方法使用 angular 服务或工厂来做到这一点(我不知道那些)。
我使用的解决方案是使用 HTML5 的 sessionStorage 或 localStorage。我知道这不是 angular 做事的方式,但它会完成工作。
在控制器 1 中
sessionStorage.setItem('permissions', JSON.stringify($scope.permissionArry));
并获取控制器 2 中的项目,
$scope.permissions = JSON.parse(sessionStorage.getItem('permissions'));
我个人认为肯定有比这更好的解决方案,你应该考虑学习angular工厂或服务来解决问题。但与此同时,您可以使用此解决方案快速解决问题
我有一个登录服务,它给我 JSON 对象作为包含用户详细信息的响应。现在在此响应中,有一个名为 permissions 的对象,它为我提供了有关允许用户使用的 CRUD 权限的信息。
看起来像这样:
现在我有不同的页面,每个页面都有一个 table。我想要的是检查登录用户的权限,并根据 show/hide 元素到 create/read/update/delete 来自 table.
的记录我目前正在做的是将对象保存到数组中:
$scope.permissionArry = [];
for (var i = 0; i < data.permissions.length; i++) {
$scope.permissionArry.push({
moduleId: data.permissions[i].module_id,
createModule: data.permissions[i].create_module,
readModule: data.permissions[i].read_module,
updateModule: data.permissions[i].update_module,
deleteModule: data.permissions[i].delete_module
});
}
然后尝试将此数组传递给其他控制器。
据我们所知,我们不能在 service/factory 中传递 $scope 我不知道如何继续(我不想使用 $rootScope)。
这是一个关于学习如何通过工厂或服务在两个控制器之间传递数据的问题。您不需要传递 $scope 变量,因为您应该将数据绑定到工厂中的对象。
这是一个简单的例子:
控制器 1
myApp.controller('Ctrl1', ['$scope', 'myFactory', function($scope, myFactory){
myFactory.data = someFunctionThatChangesTheData();
}]);
控制器 2
myApp.controller('Ctrl2', ['$scope', 'myFactory', function($scope, myFactory){
$scope.data = myFactory.data;
}]);
最后是您的 工厂
myApp.factory('myFactory', function(){
return {
data: {
value: 'some data'
}
}
});
然后您可以在视图中使用来自控制器二的数据:
视图 2(已分配 Ctrl2)
<div>
<h1>View 2</h1>
<p>{{data.value}}</p>
</div>
很简单,你需要使用服务来实现:
可以找到示例link
MyApp.app.service("xxxSvc", function () {
var _xxx = {};
return {
getXxx: function () {
return _xxx;
},
setXxx: function (value) {
_xxx = value;
}
};
});
我遇到了同样的问题。我使用了不受欢迎的解决方案,或者我会说必须有更好的方法使用 angular 服务或工厂来做到这一点(我不知道那些)。
我使用的解决方案是使用 HTML5 的 sessionStorage 或 localStorage。我知道这不是 angular 做事的方式,但它会完成工作。
在控制器 1 中
sessionStorage.setItem('permissions', JSON.stringify($scope.permissionArry));
并获取控制器 2 中的项目,
$scope.permissions = JSON.parse(sessionStorage.getItem('permissions'));
我个人认为肯定有比这更好的解决方案,你应该考虑学习angular工厂或服务来解决问题。但与此同时,您可以使用此解决方案快速解决问题