2016-10-02 76 views
0

在我的主要index.html文件我有以下簡單的標記......

<body ng-app="starter" ng-controller="AppCtrl"> 
    <div ui-view></div> 
</body> 

在我app.js我使用$stateProvider創建路由,以便我能顯示某些頁面...

app.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/app'); 
    $stateProvider 

    .state('app', { 
     url: '/app', 
     templateUrl: 'templates/menu.html', 
     controller: 'AppCtrl' 
    }) 
    .state('app.accounts', { 
     url: '/accounts', 
     templateUrl: 'templates/accounts.html' 
    }) 
}); 

頁面加載時,第一狀態被加載,這意味着我可以看到在我的主index.html和控制器AppCtrlmenu.html內容傳遞到這個狀態。

AppCtrl負載,我使用一個按鈕的點擊來自menu.html的API,該API提供了一個用戶登錄的UI,而一旦憑證都不錯,success叫...

app.controller('AppCtrl', function($scope, $ionicModal, $timeout, $state) { 

    $scope.create = function() { 
     var linkHandler = Plaid.create({ 
     env: 'tartan', 
     clientName: 'Example Project', 
     key: 'test_key', 
     product: 'connect', 
     onSuccess: function(token) { 
      $state.go('app.accounts'); 
     }, 
    }); 

    linkHandler.open(); 
    } 
}); 

什麼API的確是相當無關緊要的,但你可以看到,我傳遞$state.go('app.accounts');成功。但是,而不是改變狀態app.accounts,我相信otherwise語句調用,因爲我看到的是app狀態的內容。

這是爲什麼?我一直在這個問題上停留了一段時間。

+0

你能確保 「的onSuccess」回調可以訪問$ state。你可以console.log($ state);裏面有onSuccess功能。 –

+0

@RaviTeja它似乎確實有訪問權限。當我'console.log'我得到像'Object {params:Object,current:Object,$ current:extend,transition:null}' – Bolboa

+0

你有一個與'app.accounts'狀態相關的控制器嗎? –

回答

2

app.accountsapp一個孩子的狀態。這意味着在menu.html必須有爲了顯示accounts.html<ui-view>

如果你不想顯示accounts.html裏面menu.html,你不應該讓accountsapp一個子狀態:

<body ng-app="starter"> 
    <div ui-view></div> 
</body> 

app.config(function($stateProvider, $urlRouterProvider) { 
    $urlRouterProvider.otherwise('/app'); 
    $stateProvider 

    .state('app', { 
     url: '/app', 
     templateUrl: 'templates/menu.html', 
     controller: 'AppCtrl' 
    }) 
    .state('accounts', { 
     url: '/accounts', 
     templateUrl: 'templates/accounts.html' 
    }) 
});