角$ 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
和控制器AppCtrl
的menu.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
状态的内容。
这是为什么?我一直在这个问题上停留了一段时间。
答
app.accounts
是app
一个孩子的状态。这意味着在menu.html
必须有为了显示accounts.html
<ui-view>
。
如果你不想显示accounts.html
里面menu.html
,你不应该让accounts
的app
一个子状态:
<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'
})
});
你能确保 “的onSuccess”回调可以访问$ state。你可以console.log($ state);里面有onSuccess功能。 –
@RaviTeja它似乎确实有访问权限。当我'console.log'我得到像'Object {params:Object,current:Object,$ current:extend,transition:null}' – Bolboa
你有一个与'app.accounts'状态相关的控制器吗? –