我正在定义这样的路线。
$routeProvider
.when('/Home', {
name: 'Main',
templateUrl: 'Main.html',
controller: 'MainController',
controllerAs: 'ctrl'
})
.when('/About', {
name: 'About',
templateUrl: 'About.html',
controller: 'AboutController',
controllerAs: 'ctrl'
})
当我在主控制器中时,如何在控制器中通过查询名称“关于”找到'/ About'URL?
答案 0 :(得分:7)
您可以向控制器注入$location
并使用$location.path()
或注入$route
获取网址以获取路由名称。
示例:强>
function MainCntl($scope,$location,$route) {
$scope.location = $location.path(); // '/Home'
$scope.routeName= $route.current.$$route.name; //'Main'
}
答案 1 :(得分:7)
由于没有内置任何东西,路线的扩展可以很好地解决这个问题:
$provide.decorator('$route', ($delegate) => {
$delegate.getRoute = (name) => {
var result = null;
angular.forEach($delegate.routes, (config, route) => {
if (config.name === name) {
result = route;
}
});
return result;
};
return $delegate;
});
答案 2 :(得分:0)
检查问题:
我的解决方案如下:
Patch
鉴于实例化控制器后路由对象可能为空,您应该使用Object.getPrototypeOf($route.current) === $route.routes['/Home'];
事件,如下所示:
$routeChangeSuccess
不需要声明其他属性(尽管如果角度允许它会很好)。你只需使用模式字符串。
正如我在其他两个问题中所说,这是行为没有记录($ route.current和$ route.routes都记录在案,但它们之间的原型继承不是),所以请自行使用它风险。
这也适用于IE9 +。
答案 3 :(得分:-1)
如果您的目的是切换网址路径, 你可以试试这个:
function MainCntl($scope, $location) {
// put this at where your want to find the '/About' URL
$location.path('/About');
}