Angular-UI解析$ urlRouterProvider.when()中的Promise对象

时间:2014-02-10 01:54:30

标签: javascript angularjs promise angular-ui-router

我正在尝试在module.config()对象中设置一些基本的应用程序数据,而且我只在用户使用附加到特定入口点的唯一键命中应用程序时才这样做,否则我的状态将解决有不同的回应。

我正在使用$urlRouterProvider.when()来捕获指定入口点的用户,然后解析promise($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';
            })

        });

我也尝试在.then()

中设置返回值
.then(function(){
    return '/home';
})

我没有收到任何错误,但是没有处理返回值。

2 个答案:

答案 0 :(得分:2)

所以,我觉得这不是最好的答案,但我现在已经被一些人问过,如果我找到了一个解决方案,我确实通过激活所需的状态而不是返回它的路线来使其工作。我不想接受这个答案,因为我觉得esalija的答案应该工作,而我正试图将测试放在一起,看看它是否真的是ui.router的错误。在那之前,这绝对有效,而且至少在一个小应用程序中,它不会让你付出太多代价。

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

您可以在devsite/#/hi/5300e0ce9dfb8

上试用

修改

我想我应该觉得这样做是脏的,这与模块本身完成的方式相同:

$urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
    if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
        $state.transitionTo(state, $match, false);
    }
}]);

答案 1 :(得分:1)

你没有回复承诺

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