AngularJS 如何获取额外的路由参数

标签 angularjs angularjs-directive angularjs-routing

有没有办法向 $routeProvider 添加额外的参数并在指令中检索这些参数?我需要这个,因为该变量是特定于页面的。

我想向路由提供者添加一个参数 pageName,如下所示:

$routeProvider
        .when('/home',
        {
            controller: 'homeController',
            templateUrl: '_templates/home.html',
            pageName: 'home'
        })

并在指令中使用这个额外的参数,如下所示

directives.dirPagename = ['$route', '$routeParams', function($route, $routeParams) {
    return {
        restrict: 'ECA',
        template: 'test',
        link: function (scope, elem, attrs) {
            console.log($route);
            console.log($routeParams);
        }
    }
 }]

当我记录 $route 并在 google webdeveloper 工具中检查它时,pageName 参数有几层深。

Object {routes: Object, reload: function}
    current: D
       $$route: Object
            controller: "homeController"
            **pageName: "home"**

有没有办法直接获取这个变量或者这是完全错误的方法?

更新:

您可以通过以下方式获取路由中的变量 var pageName = $route.routes[$location.$$path].pageName;

最佳答案

您可以在$route.routes[uri]中找到该信息。

我与您分享我的 viewRouter 服务作为示例:

var uaViewRouter = angular.module('ua.ViewRouter', []);

uaViewRouter.service('uaViewProvider', function($route, $location, uaContext){
    this.redirectToView = function(viewName){
        url = undefined;
        for(var route in $route.routes){
            if ($route.routes[route].view == viewName){
                url = route;
            }
        }
        if(url == undefined){
            throw("uaViewProvider: Undefined view " + viewName);
        }
        if($route.routes[url].enrichment == true){
            url = url.replace(":operatorId", uaContext.operator.get().id);
            url = url.replace(":productId", uaContext.product.get().id);
        }
        $location.path(url);
    };
});

uaViewRouter.run(function($rootScope, uaViewProvider) {
    $rootScope.uaViewProvider = {};
    $rootScope.uaViewProvider.redirectToView = function(viewName) {
        uaViewProvider.redirectToView(viewName);
    };
});

路由声明示例:

uaApp.config(['$routeProvider', function($routeProvider) {
    $routeProvider.
        when('/login', {
            templateUrl: 'app/login/login.tpl.html',
            loginRequired: false,
            view: 'login'
        }).
...

您可以通过调用以下方式在 Controller 或服务中使用它:

uaViewProvider.redirectToView('login');

或者在模板中:

<a href="" ng-click="uaViewProvider.redirectToView('login')">Click to login</a>

关于AngularJS 如何获取额外的路由参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19596715/

相关文章:

javascript - 你能在 Angular 2 中有一个独立的指令吗

javascript - Angular ,多个 Controller 和路由 $routeProvider

javascript - AngularJS $routeProvider 无法直接加载到部分

javascript - 动态滑动框宽度 css 问题

javascript - 单元测试异步 Angular 指令

javascript - 用于动态搜索结果的 AngularJS/HTML/Bootstrap 元素

angularjs - 具有特定类型的通用指令(UI 组件继承)

python - django 和 angularjs 的最佳项目结构

javascript - 观察指令中的点击事件

javascript - 浏览器历史记录返回后数据未绑定(bind)