2016-08-22 175 views
0

我有一个登录服务,它为我提供JSON对象作为具有用户详细信息的响应。现在在这个响应中,有一个名为permissions的对象,它向我提供有关允许用户使用的CRUD权限的信息。将JSON数据从一个控制器传递到其他angularjs

它看起来像这样:

enter image description here

现在我不同的页面,有一个表中的每个页面。我想要的是检查登录用户的权限,并根据该显示/隐藏元素来创建/读取/更新/删除表中的记录。

什么我目前做的是保存对象到一个数组:

  $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)。

回答

1

这很简单,你需要用服务来实现这一目标:

示例可以发现link

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

var _xxx = {}; 

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

}); 
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' 
     } 
    } 
}); 

然后,您可以使用来自控制器的两个数据视图:

查看2(分配CTRL 2)

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

请问您可以向我展示一个示例吗? –

+0

添加了两个控制器的示例。第一个控制器更改值,第二个控制器看到新的更改 –

+0

我是AngulrJS的新手,如果我提出愚蠢的问题,请道歉,但是如果控制器1和2都在单独的JS中,这个工作会如何? 另外,工厂做什么? –

0

我遇到了同样的问题。我使用了不会讨人喜欢的解决方案,或者我会说使用角度服务或工厂必须有更好的方法来做到这一点(我不知道这些)。

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

在控制器1

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

并获得在控制器2项,

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

我个人认为一定存在更好的解决方案比这个,你应该想想学习的角度工厂或服务来解决问题。但与此同时,您可以使用此解决方案快速解决问题

+0

我不喜欢在cookies或sessionstorage中存储权限的详细信息。 –

+0

它是您的选择。我给了一个解决方法,只是为了帮助 –

+0

sessionStorage是一个提供者。 (工厂是一种提供者) –

相关问题