web-dev-qa-db-ja.com

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'
        })
}]);

ありがとう

37
anad2312

コントローラーに$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>
76
Poyraz Yilmaz