我如何使用" resolveRedirectTo"在Angular 1.6中?

时间:2017-04-25 14:51:04

标签: angularjs angular-promise angularjs-routing angularjs-1.6

我正在尝试从服务器检索值,然后将其用作重定向中的参数。

我无法理解所提供的文件:

  

resolveRedirectTo - {Function =} - 一个函数,它将(最终)返回值以更新$ location URL并触发路由重定向。与redirectTo相反,依赖关系可以注入resolveRedirectTo,返回值可以是字符串或将被解析为字符串的promise。

所以不知怎的,我需要用字符串加入响应,但我无法弄清楚如何。

resolveRedirectTo: ['settingsService', function (settingsService) {
            var promise = settingsService.getSettings();
              ???
            return '/settings/' + resolved.setting[0].id;
        }],

任何建议都会很棒!

2 个答案:

答案 0 :(得分:0)

我不确定这是否会有所帮助,我从未使用resolveRedirectTo“解析器”,但如果它看起来应该与任何resolve一样。 根据文件:

  

resolveRedirectTo - {Function =} - 一个将(最终)的函数   返回值以使用和触发路由更新$ location URL   重定向。与redirectTo相比,可以注入依赖关系   into resolveRedirectTo和返回值可以是字符串或   将被解析为字符串的承诺

因此,在您的情况下,您应该返回getSettings方法返回的承诺:

resolveRedirectTo: ['settingsService', function (settingsService) {
    return settingsService.getSettings().then((settings)=>{
        // Use the obtained settings to calculate the URL.
        return '/settings/' + settings[0].id;
    });
}],

答案 1 :(得分:0)

resolveRedirectTo函数中,您应该创建并返回应答,最终应根据您的http服务的方法来解决该应许。除了您自己的服务,您还需要向resolveRedirectTo函数中注入$q service来创建承诺。然后调用resolve函数并传递从服务返回的值以触发重定向。

它是这样工作的:

$routeProvider.when('/any', {
    resolveRedirectTo: function ($q, myservice) {
        var deferred = $q.defer();

        myservice.httpMethod()
            .then(
                function (response) {
                    deferred.resolve('/other/' + response.data.path);
                },
                function (error) {
                    deferred.reject();
                });

        return deferred.promise;
    }
});