我正在尝试从服务器检索值,然后将其用作重定向中的参数。
我无法理解所提供的文件:
resolveRedirectTo - {Function =} - 一个函数,它将(最终)返回值以更新$ location URL并触发路由重定向。与redirectTo相反,依赖关系可以注入resolveRedirectTo,返回值可以是字符串或将被解析为字符串的promise。
所以不知怎的,我需要用字符串加入响应,但我无法弄清楚如何。
resolveRedirectTo: ['settingsService', function (settingsService) {
var promise = settingsService.getSettings();
???
return '/settings/' + resolved.setting[0].id;
}],
任何建议都会很棒!
答案 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;
}
});