【发布时间】:2015-12-13 18:32:18
【问题描述】:
部分路线是这样的
.when('/id/:id',
{
templateUrl: 'id.html',
controller: myController,
})
我想验证 ':id' 是否来自一组 id,它来自服务功能调用。如果不是,则应阻止页面呈现。
我通过在路由中添加解析使这部分工作。代码是这样的
.when('/id/:id',
{
templateUrl: 'id.html',
controller: myController,
resolve: {
validate: function($q, $route, myService) {
myService.getProjects().then(function(data) {
var defer = $q.defer(),
project = $route.current.params.project;
if (myContains(data.projects, project)) {
defer.resolve();
} else {
defer.reject({authenticated: false});
}
return defer.promise;
});
}
}
})
但是当 promise 被拒绝时,它不会触发 $routeChangeError,我是这样写的
myApp.app.module.config(['$routeProvider', myApp.app.config])
.run(
['$rootScope', '$location', function($rootScope, $location) {
$rootScope.$on('$routeChangeError',
function(event, current, previous, rejection) {
var rejection = {};
if (!rejection.authenticated) {
$location.path('/').replace();
}
});
}]);
====更新=== 我让它工作了。我之前犯的错误是在 then 块内有 'return defer.promise'。
【问题讨论】:
-
在你的控制器中检查它并在出错时重定向到另一个路由
-
这就像一个管理员后端?如果是这样,只需使用布尔值,true 表示管理员,false 表示不。这比遍历列表要好。如果是这样的话,只是一个建议。
-
@Phill,我试过了,但在重定向到主页之前,网址仍然显示错误的 id 参数半秒。谢谢
-
@Joe,它用于前端。谢谢
标签: angularjs routes url-parameters dynamic-url