Передача родительских переменных области видимости в компонент пользовательского интерфейса

0

Я использую angular-ui/ui-router и имею директивы/компоненты с областью выделения, определенные для отображения состояния при изменении состояния.

$stateProvider
    .state('about', {
      url: '/about',
      template: '<about></about>'
    })
    .state('blog', {
      url: '/blog',
      template: '<blog></blog>'
    })

Моя главная страница - это директива, которая загружает пользователя со всеми разрешениями в своем контроллере

app.directive('main', function() {
  return {
    ...
    template: "<div><header></header><div ui-view></div></div>",
    controller: [..., function(...) {
       $scope.user = // $http load user
    }]
);

Когда вы переходите в разные состояния, я хочу, чтобы пользователь был передан всем директивам/компонентам ui-view. Однако я не могу найти хороший способ реализовать это без resolve, которое загрузило бы пользователя при каждом изменении состояния или с помощью $rootScope

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

$stateProvider
    .state('about', {
      url: '/about',
      template: '<about user="user"></about>'
    })
    .state('blog', {
      url: '/blog',
      template: '<blog user="user"></blog>'
    })

Любая идея, как это можно сделать?

  • 0
    Где клиент вводит имя пользователя? Может ли пакет разрешений $http быть реорганизован в службу?
Теги:
angular-ui-router
angularjs-components
angularjs-scope
angularjs-directive

2 ответа

1

в контроллере вы можете назначить пользователю $ rootScope, например $rootScope.user = sth, тогда вы можете ли добавить контроллер для каждого URL- $scope.user= $rootScope.user штата, чтобы получить пользователя как $scope.user= $rootScope.user или передать rootScope пользователь как параметр.

  • 0
    Я думаю, что это правильное решение (голосование одобрено). Однако я планирую перевести наше приложение Angular 1.x на Angular 2.x и постараюсь избежать использования $ rootScope.
0

вам нужно использовать $ rootcope в вашем контроллере, как это

$rootScope.user = sth;

и вы можете получить такого пользователя

$scope.user= $rootScope.user;
  • 1
    Как прокомментировал ответ @ Stephanie, я не хочу использовать $ rootScope
  • 0
    если вы не хотите использовать $ rootcope, вы можете использовать $ broadcast или $ emit для распространения данных вниз или вверх, в соответствии с вашими потребностями.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню