Я изучаю 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, это освобождает значение переменной области.
Я не уверен, что я делаю неправильно.
Может кто-нибудь мне помочь? Заранее спасибо.
Используйте $ stateParams для передачи параметров между двумя состояниями. Выполните следующие шаги:
Определите свое состояние с помощью объекта params.
.state('route.route1', {
url: 'your url name',
params: {
nameOfParamObj: null
},
controller: 'your controller',
templateUrl: 'your template url',
})
Из контроллера, куда вы хотите отправить данные области применения, используйте в качестве пары
$ state.go(toState, params, options);
В контроллере toState перехватывают параметры состояния с помощью $ stateParams
$stateParams.yourParamObjectName
Убедитесь, что $ stateParams, $ государственные услуги, как зависимость в вашем отношении контроллера Посмотрите в официальный UI-маршрутизатор документации Здесь.
Мне еще предстоит работать с 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;
});
Затем вы можете использовать два контроллера на двух разных представлениях, и они совместно используют переменные из службы, которая их связывает.