【问题标题】:Angular-UI Resolve Promise object inside $urlRouterProvider.when()Angular-UI 解析 $urlRouterProvider.when() 中的 Promise 对象
【发布时间】:2014-03-07 05:33:02
【问题描述】:

我正在尝试在 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';
})

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

【问题讨论】:

    标签: javascript angularjs promise angular-ui-router


    【解决方案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';
            });
    });
    

    【讨论】:

    • 这绝对行不通。当您将 return 嵌套在 promise 中时,尽管调用成功,并且在 .then() 中执行了任何事件,但路由不会加载
    • 确认,这不起作用。你找到解决这个@BrianVanderbusch 的方法了吗?
    • @jingman...是的,我做到了!感谢您的提醒。虽然我不确定这是最可接受的解决方案。我没有返回路线,而是使用$state.go() 激活了所需的状态你怎么看? on github, see it in action/#/hi/5300e0ce9dfb8
    【解决方案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);
        }
    }]);
    

    【讨论】:

    • 而不是“return $http.get”,我建议改为:$http.get();返回真;
    猜你喜欢
    • 2021-06-26
    • 2019-02-18
    • 2016-12-17
    • 2018-02-25
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 2015-09-27
    相关资源
    最近更新 更多