Как я могу делиться данными разрешения между состояниями родителя / потомка Angular ui-route в разных представлениях?

0

Вот что у меня есть. Мне нужны categories которые будут доступны в HomeController и NavbarController.

    $stateProvider
        .state('master', {
            abstract: true,
            views: {
                'navbar@': {
                    templateUrl: 'views/partials/navbar.default.html',
                    controller: 'NavbarController as nb',
                }
            },
            resolve: {
                categories: function(Category) {
                    return Category.getList({ depth: 0 });
                },
            }
        })

        .state('home', {
            parent: 'master',
            url: '/',
            views: {
                'main@': {
                    templateUrl: 'views/home/home.html',
                    controller: 'HomeController as hc',
                }
            },
            resolve: {
                deals: function(Deal) {
                    return Deal.getList();
                },
            }
        });
  • 0
    То есть у вас нет доступа к NavbarController из HomeController?
  • 0
    Будет ли работать, чтобы передать его в службу, а затем внедрить эту службу в оба контроллера? это то, что я обычно делаю, если мне нужно получить доступ к чему-то на нескольких контроллерах, хотя у меня нет опыта использования решений в $ stateprovider, как у вас
Показать ещё 1 комментарий
Теги:
angular-ui-router

1 ответ

0

Согласно документации

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

$stateProvider.state('parent', {
  resolve:{
     resA:  function(){
        return {'value': 'A'};
     }
  },
  controller: function($scope, resA){
      $scope.resA = resA.value;
  }})
 .state('parent.child', {
  resolve:{
     resB: function(resA){
        return {'value': resA.value + 'B'};
     }
  },
   controller: function($scope, resA, resB){
      $scope.resA2 = resA.value;
      $scope.resB = resB.value;
  }

В нем также говорится:

Ключевое слово разрешения ДОЛЖНО относиться к состоянию без представлений (если вы используете несколько видов). Ключи разрешения ДОЛЖНЫ быть введены в дочерние состояния, если вы хотите дождаться, пока обещания будут разрешены до создания экземпляров.

  • 0
    Похоже, проблема связана с тем, что я использую два разных представления ( navbar и main ). Из документов: «Вполне возможно, что у вас есть вложенные состояния, шаблоны которых заполняют пользовательские представления в различных не вложенных местоположениях на вашем сайте. В этом сценарии нельзя ожидать доступа к переменным области видимости родительских состояний в представлениях детей. состояния."
  • 0
    Верный. Возможно, вы могли бы вместо этого делиться пользовательскими точками данных, вместо них можно попробовать пользовательские данные (полученные из службы).
Показать ещё 1 комментарий

Ещё вопросы

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