AngularJS - 如何验证 URL 动态参数
Posted
技术标签:
【中文标题】AngularJS - 如何验证 URL 动态参数【英文标题】:AngularJS - How to validate URL dynamic params 【发布时间】: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,它用于前端。谢谢 【参考方案1】:如果您已经有了 id 列表,那么您可以这样做,
.when('/id/:id',
templateUrl: 'id.html',
controller: myController,
resolve:
validateid: ["$q", "$routeParams", function($q, $routeParams)
var id = Enumerable.From(arrayofids)
.Where(function(x)
return x.id == $routeParams.id
);
if (id)
return $q.when($routeParams.id);
else
return $q.reject(
authenticated: false
);
],
resolve 是一个您可以在导航发生之前执行各种操作的地方,
我使用过 linq.js,它可以很容易地进行各种迭代,我建议你只用一次,你会喜欢的
【讨论】:
感谢 maddygoround!我让这部分工作,但是,在添加 $rootScope.$on('$routeChangeError', function()) 之后,我发现当 promise 被拒绝时,永远不会调用 $routeChangeError。我将在问题中添加这部分。谢谢!以上是关于AngularJS - 如何验证 URL 动态参数的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 angularjs 处理具有动态过滤添加的高级搜索?