繁体   English   中英

将JSON数据从一个控制器传递到其他angularjs

[英]Pass JSON data from one controller to other angularjs

我有一个登录服务,该服务向我提供JSON对象作为具有用户详细信息的响应。 现在,在此响应中,有一个名为权限的对象,该对象向我提供了有关允许用户使用的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)。

这是有关学习如何通过工厂或服务在两个控制器之间传递数据的问题。 您不需要传递$ 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的数据:

查看2 (已分配Ctrl2)

<div>
    <h1>View 2</h1>
    <p>{{data.value}}</p>
</div>

您需要使用服务来实现此目标非常简单:

可以找到示例链接

    MyApp.app.service("xxxSvc", function () {

var _xxx = {};

return {
    getXxx: function () {
        return _xxx;
    },
    setXxx: function (value) {
        _xxx = value;
    }
};

});

我遇到了同样的问题。 我使用的解决方案不那么讨人喜欢,或者我想必须使用更好的方法使用角度服务或工厂来做到这一点(我对此一无所知)。

我使用的解决方案是使用HTML5的sessionStorage或localStorage。 我知道这不是做事的有角度的方法,但是它将完成工作。

在控制器1中

sessionStorage.setItem('permissions', JSON.stringify($scope.permissionArry));

并将其放入控制器2中

$scope.permissions = JSON.parse(sessionStorage.getItem('permissions'));

我个人认为,必须有比这更好的解决方案,并且您应该考虑学习角度工厂或服务以解决问题。 但是与此同时,您可以使用此解决方案快速解决问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM