2016-08-22 4 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' 
     } 
    } 
}); 

Затем можно использовать данные из контроллера два в представлении:

View 2 (Assigned Упр 2)

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

не могли бы вы показать мне пример? –

+0

Добавлен пример с двумя контроллерами. Первый контроллер изменяет значения, а второй контроллер видит новые изменения. –

+0

Я новичок в AngulrJS, поэтому извиняюсь, если я задаю глупые вопросы, но будет ли это работать, если оба контроллера 1 и 2 находятся в отдельном JS? Кроме того, что делает фабрика? –

0

У меня возникла такая же проблема. Я использовал решение, которое не понравится, или я бы сказал, что для этого нужно использовать более эффективный подход, используя угловой сервис или фабрику (я не знаю об этом).

Решение, с которым я работал, использует sessionStorage или localStorage HTML5. Я знаю, что это не угловой способ делать что-то, но он выполнит свою работу.

В контроллере 1

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

И чтобы получить деталь в контроллере 2,

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

Я лично считаю, что должно существовать более эффективные решений, чем это, и вы должны думать об обучении углового завода или службы для решения проблемы. Но между тем вы можете быстро использовать это решение.

+0

Я не предпочитаю хранить сведения о разрешении в файлах cookie или sessionstorage. –

+0

Его выбор. Я дал обходное решение, чтобы помочь –

+0

sessionStorage является поставщиком. (фабрики - это тип поставщика) –

Смежные вопросы