1

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

我无法理解提供的文档:

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

所以不知何故我需要用字符串加入响应,但我不知道怎么做。

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

任何建议都会很棒!

4

2 回答 2

1

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

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

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

resolveRedirectTo: ['settingsService', function (settingsService) {
    return settingsService.getSettings().then((settings)=>{
        // Use the obtained settings to calculate the URL.
        return '/settings/' + settings[0].id;
    });
}],
于 2017-04-25T15:24:08.923 回答
0

resolveRedirectTo函数中,您应该创建并返回最终将响应您的 http 服务方法而得到解决的承诺。除了你自己的服务之外,你还需要将$q 服务注入到resolveRedirectTo函数中来创建 Promise。然后调用它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;
    }
});
于 2020-12-13T22:15:13.037 回答