Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $urlRouterProvider.when()中的Angular UI Resolve Promise对象_Javascript_Angularjs_Promise_Angular Ui Router - Fatal编程技术网

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