AngularJS - Как изменить состояние изнутри контроллера
Я новичок в AngularJS и хотел бы знать, как я изменяю состояние изнутри контроллера.
Например, я обычно изменяю состояние нажатием кнопки:
<input type="submit" class="btn btn-lg btn-primary btn-block" value="Log In" ui-sref="main.navigation"/>
Итак, при отправке кнопки моя страница изменится на страницу навигации. Это прекрасно работает, но что, если я сначала хочу сделать некоторую логику в своем контроллере, а затем основать результаты, я бы хотел перейти на определенную страницу. Как это сделать из контроллера, в отличие от нажатия кнопки.
Вот мои modules.js на случай, если вам интересно:
angular.module('ecsMain', [
'ui.router',
'ui.bootstrap',
'ngTable'
])
.config(['$stateProvider', '$urlRouterProvider', function ($stateProvider, $urlRouterProvider) {
$urlRouterProvider.otherwise('main/login');
$stateProvider
.state('main', {
abstract: true,
url: '',
templateUrl: 'view/main.html'
})
.state('main.login', {
url: '',
controller: ECSMainController,
templateUrl: 'view/login.html'
})
.state('main.phoneCalls', {
url: '',
controller: AccordionDemoCtrl,
templateUrl: 'view/phoneCalls.html'
})
.state('main.navigation', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/navigation.html'
})
.state('main.myModalContent', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/myModalContent.html'
})
.state('main.alertMessage', {
url: '',
controller: ModalDemoCtrl,
templateUrl: 'view/alertMessage.html'
})
}]);
Спасибо
Ответы
Ответ 1
введите $state
сервис вашему контроллеру, затем в свой контроллер...
CONTROLLER
$scope.changeState = function () {
$state.go('where.ever.you.want.to.go', {stateParamKey: exampleParam});
};
и добавьте ng-click
к вашей кнопке
HTML
<button ng-click="changeState()">Change State</button>
Ответ 2
вы можете использовать часть resolve
вашего состояния.
$stateProvider
.state('main', {
templateUrl: 'view/example.html',
controller: 'Controller',
resolve: {
stuff: function(){
return doSomethingThatReturnsAPromise();
}
}
})
Таким образом вы можете динамически вводить stuff
в свой контроллер, чтобы вы могли справиться с возвращаемым значением при загрузке