Работа с несколькими состояниями и одним контроллером в angular.ui-router

0

Я изучаю angularJS и создаю веб-приложение, которое использует ui-router.

Я определил следующие состояния:

angular.module('test', [])
.config(function($stateProvider){
  $stateProvider.
       state('root',{
           url: '/',
           abstract:true,
           templateUrl: '/root.html',
           controller: 'MyController'
       })
       .state('root.route1',{
           url: '/route1',
           parent: 'root',
           views:{
               '':{
                   templateUrl: '/route1.html'
                  }
               'estimatedCost@':{
                   templateUrl: '/esitmatedCost.html'
                  }
            }
       })
       .state('root.route2',{
           url: '/route2',
           parent: 'root',
           views:{
               '':{
                   templateUrl: '/route2.html'
                  }
               'estimatedCost@':{
                   templateUrl: '/esitmatedCost.html'
                  }
            }
       })
    });

Во время навигации между маршрутом 1 и route2 я хочу поделиться переменными области видимости с MyController. Когда я перехожу к route2 из route1, это освобождает значение переменной области.

Я не уверен, что я делаю неправильно.

Может кто-нибудь мне помочь? Заранее спасибо.

Теги:

2 ответа

1

Используйте $ stateParams для передачи параметров между двумя состояниями. Выполните следующие шаги:

  1. Определите свое состояние с помощью объекта params.

      .state('route.route1', {
                url: 'your url name',
                params: {
                    nameOfParamObj: null
                },
                controller: 'your controller',
                templateUrl: 'your template url',
        })
    
  2. Из контроллера, куда вы хотите отправить данные области применения, используйте в качестве пары

    $ state.go(toState, params, options);

  3. В контроллере toState перехватывают параметры состояния с помощью $ stateParams

    $stateParams.yourParamObjectName

Убедитесь, что $ stateParams, $ государственные услуги, как зависимость в вашем отношении контроллера Посмотрите в официальный UI-маршрутизатор документации Здесь.

1

Мне еще предстоит работать с ui-router, но я работал с AngularJS в течение последних нескольких лет, и это то, как язык обычно работал в прошлом.

Основной целью контроллера является управление данными по одному шаблону. Эти контроллеры могут взаимодействовать друг с другом через фабрику AngularJS, часто называемую сервисом. В вашем случае вы, вероятно, захотите использовать службу, поскольку контроллеры будут уничтожены при успешном изменении маршрута.

angular.module('test', [])
  .factory('myFactory', function() {
    var info = "Hello World";

    return {
      info: info
    };
  })
  .controller('CtrlOne', function($scope, myFactory) {
    $scope.info = myFactory.info;
  })
  .controller('CtrlTwo', function($scope, myFactory) {
    $scope.info = myFacotry.info;
  });

Затем вы можете использовать два контроллера на двух разных представлениях, и они совместно используют переменные из службы, которая их связывает.

Ещё вопросы

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