角$ stateProvider没有路由预期

问题描述:

在我的主要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'状态相关的控制器吗? –

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