我有一个登录服务,它将JSON对象作为具有用户详细信息的响应。现在,在此响应中,有一个名为permissions的对象,它向我提供有关允许用户使用的CRUD权限的信息。
看起来像这样:
现在我有不同的页面,每个页面都有一个表格。我想要的是检查登录用户的权限,并根据该显示/隐藏元素来创建/读取/更新/删除表中的记录。
我目前正在做的是将对象保存到数组中:
$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
});
}
然后尝试将此数组传递给其他控制器。
我们知道我们无法在服务/工厂中传递$ scope我不知道如何继续(我不想使用$ rootScope)。
答案 0 :(得分:1)
这是一个关于学习如何通过工厂或服务在两个控制器之间传递数据的问题。您不需要传递$ 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'
}
}
});
然后,您可以在视图中使用Controller 2中的数据:
查看2 (已分配Ctrl2)
<div>
<h1>View 2</h1>
<p>{{data.value}}</p>
</div>
答案 1 :(得分:1)
您需要使用服务来实现此目的非常简单:
示例可以找到link
MyApp.app.service("xxxSvc", function () {
var _xxx = {};
return {
getXxx: function () {
return _xxx;
},
setXxx: function (value) {
_xxx = value;
}
};
});
答案 2 :(得分:0)
我遇到了同样的问题。我使用了不太讨人喜欢的解决方案,或者我会说使用角度服务或工厂必须有更好的方法(我不知道那些)。
我使用的解决方案是使用HTML5的sessionStorage或localStorage。我知道它不是有意义的做事方式,但它会完成工作。
在Controller 1中</ p>
sessionStorage.setItem('permissions', JSON.stringify($scope.permissionArry));
要获取控制器2中的项目,
$scope.permissions = JSON.parse(sessionStorage.getItem('permissions'));
我个人认为必须存在比这更好的解决方案,你应该考虑学习角度工厂或服务来解决问题。但与此同时,您可以快速使用此解决方案