如何从URL
中的路由参数获取$routeChangeStart
哈希片段。
$scope.$on('$routeChangeStart', function (event, next, current) {
// trying to get the url hash fragment from <next> param here
// e.g. to_url_function(next) -> '/my_path/1'
});
使用URL hash
轻松接收$locationChangeStart
片段,但这不适合我。
答案 0 :(得分:6)
我在$ routeChangeStart事件处理程序中有一个带有身份验证/授权检查的应用程序。如果未经过身份验证,我会向用户提供模态登录页面。我想要一个成功的登录将它们发送到它们的原始目的地($ routeChangeStart的美丽是它将再次运行并在成功登录后检查授权)。我在注入模态登录控制器的用户会话服务中保存了从下一个构建的路径。
这是事件处理程序
function BuildPathFromRoute(routeObj)
{
var path = routeObj.$$route.originalPath;
for (var property in routeObj.pathParams)
{
if (routeObj.pathParams.hasOwnProperty(property))
{
var regEx = new RegExp(":" + property, "gi");
path = path.replace(regEx, routeObj.pathParams[property].toString());
}
}
return path;
}
这是从下一个对象构建路径的函数
{{1}}
备注:强>
答案 1 :(得分:0)
如果您不想使用hasOwnProperty
,则可以利用$$route.keys
获取pathParams
字段名称的名称:
function getPathFromRoute(routeObj)
{
var path = routeObj.$$route.originalPath;
var keys = routeObj.$$route.keys;
var value;
for (var i = 0; i < keys.length; i++) {
if(angular.isDefined(keys[i]) && angular.isDefined(keys[i].name)){
value = routeObj.pathParams[keys[i].name];
var regEx = new RegExp(":" + keys[i].name, "gi");
path = path.replace(regEx, value.toString());
}
}
return path;
};
答案 2 :(得分:0)
不要像之前给出的答案一样使用带有$$前缀的对象字段,因为它是AngularJS用于私有属性的前缀。使用此方法从路由获取URL(未测试):
var buildPathFromRoute = function (route) {
// get original route path
var path = route.originalPath;
// get params keys
var keysLength = route.keys.length;
for (var i=0; i<keysLength; i+=1) {
var param = route.keys[i];
// optional params postfix is '?'
var postfix = param.optional ? '\\?' : '';
var replaceString = ':' + param.name + postfix;
var regex = new RegExp(replaceString, 'g');
var paramValue = route.params[param.name].toString();
// replace param with value
path = path.replace(regex, paramValue);
}
path = path.replace(/\:\S+?\??/g, '');
return path;
};