2

$routeProvider に追加のパラメーターを追加し、ディレクティブでこのパラメーターを取得する方法はありますか? 変数はページ固有であるため、これが必要です。

パラメータ pageName を次のように routeprovider に追加したいと思います。

$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 Web 開発者ツール内でこれを調べると、pageName パラメータは数層の深さです。

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

この変数を直接取得する方法はありますか、それとも完全に間違った方法ですか?

アップデート:

var pageName = $route.routes[$location.$$path].pageName; を使用して、ルーティングで変数を取得できます。

4

1 に答える 1

2

$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'
        }).
...

以下を呼び出して、コントローラーまたはサービスで使用できます。

uaViewProvider.redirectToView('login');

またはテンプレートで:

<a href="" ng-click="uaViewProvider.redirectToView('login')">Click to login</a>
于 2013-10-25T18:17:42.833 に答える