Javascript $urlRouterProvider.when()中的Angular UI Resolve Promise对象
我试图在Javascript $urlRouterProvider.when()中的Angular UI Resolve Promise对象,javascript,angularjs,promise,angular-ui-router,Javascript,Angularjs,Promise,Angular Ui Router,我试图在module.config()对象中设置一些基本的应用程序数据,只有当用户使用附加到特定入口点的唯一键点击应用程序时,我才会这样做,否则我的状态将通过不同的响应解决 我正在使用$urlRouterProvider.when(),在指定的入口点捕获用户,然后解析承诺($http.get()),然后返回状态。但似乎无法让它工作。数据本身确实返回,但函数没有返回路径,我也不明白为什么 $urlRouterProvider.when('/hi/:userkey',function($match,
module.config()
对象中设置一些基本的应用程序数据,只有当用户使用附加到特定入口点的唯一键点击应用程序时,我才会这样做,否则我的状态将通过不同的响应解决
我正在使用$urlRouterProvider.when()
,在指定的入口点捕获用户,然后解析承诺($http.get()
),然后返回状态。但似乎无法让它工作。数据本身确实返回,但函数没有返回路径,我也不明白为什么
$urlRouterProvider.when('/hi/:userkey',function($match,$rootScope, $http){
$http.get('http://api.com/login/'+$match.userkey)
.success(function(result){
$rootScope.data = result;
return '/home';
})
});
我还尝试在中设置返回值。然后()
:
我没有收到任何错误,但是没有处理返回值。您没有返回承诺
$urlRouterProvider.when('/hi/:userkey', function ($match, $rootScope, $http) {
return $http.get('http://api.com/login/' + $match.userkey)
.then(function (result) {
$rootScope.data = result;
return '/home';
});
});
所以,我觉得这不是最好的答案,但是现在有一些人问我是否找到了解决方案,我确实通过激活所需的状态而不是返回它的路径使它工作。然而,我不想接受这个答案,因为我觉得esalija的答案应该有效,我正在尝试将测试放在一起,看看它是否真的是
ui.router
的一个bug。在那之前,这肯定是有效的,而且在我的脑海中,至少对于一个小应用来说,它不会花你很多钱
$urlRouterProvider.when('/hi/:userkey',function($match, $http, Api, $state){
return $http.get('http://api.site.com/index.php/login/'+ $match.userkey).success(function(result){
Api.userkey = $match.userkey;
Api.appdata = result;
}).then(function(){
$state.go('app');
});
你可以在我的电脑上试试
编辑
我想我应该觉得这样做很肮脏,这和模块本身完成的方式是一样的:
$urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
$state.transitionTo(state, $match, false);
}
}]);
这绝对行不通。当您将返回嵌套在promise中时,即使调用成功,并且执行了
中的任何事件,路由也不会加载。然后()
确认,这不起作用。你找到解决这个问题的办法了吗?@BrianVanderbusch?@jingman。。。是的,我做到了!谢谢你的提醒。虽然我不确定这是不是最可以接受的解决方案。我没有返回路线,而是用$state.go()
激活了所需的状态,你认为呢,我建议改为:$http.get();返回true;
$urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
$state.transitionTo(state, $match, false);
}
}]);