2016-05-24 20 views
2

ナビゲーションを定義しています。ルートがアクセスできない、または権限が存在する場合は、ボタンを表示します。私はパーミッションビットを行って、それはうまく動作しますが、今は設定に応じてページを除外し始めています。理想的には、パスを取り、存在するかどうか、そしてアクセス権があるかどうかをルータに照会するような指示文(route-dependなど)が必要です。角度ルート:ルートが存在するかどうかのテスト

は、だから私は、次があります。

<li data-route-depend="/newpage"> 
    <a href="#" data-ng-click="setActiveTab('newpage')">NEW PAGE</a> 
</li> 

app.config([ "$routeProvider", function($routeProvider) { 
    $routeProvider 
    .when("/404", { 
     templateUrl : "/pages/404.php" 
    }).when("/noauth", { 
     templateUrl : "/pages/noauth.php" 
    }).when("/home", { 
     templateUrl : "/pages/homepage.php" 
    }).when("/about", { 
     templateUrl : "/pages/about.php", 
     permission : "logged-in" 
    }).otherwise({ 
     redirectTo : "/404" 
    }); 
} ]); 

私は私のナビゲーションリンクが設定されている(ボタンと同じ)私のような何かをしたい

<li data-has-permission="logged-in" > 
    <a href="#" data-ng-click="setActiveTab('about')">ABOUT</a> 
</li> 

これは私の例ではdata-route-dependが失敗することを意味します(そして要素を私のhas-permission doe s)ルートが定義されていないので(他の方法で404ページにリダイレクトする以外)

私は$routeProviderのドキュメントを見てきましたが、それほど多くはないようです。それは$routeの例を指していますが、やはり私の後ろのもののようには見えません。

app.directive('routeDepend', [ "$route", function($route) { 
    return { 
     link : function(scope, element, attrs) { 
      if (!(typeof attrs.routeDepend == "string")) { 
       throw 'route-depend value must be a string' 
      } 
      var value = attrs.routeDepend.trim(); 

      function toggleVisibilityBasedOnRoute() { 
       logger($route.routes); // Shows as object of objects 
       for (var route in $route.routes) { 
        if ($route.routes.hasOwnProperty(route)) { 
         logger(typeof route); // shows as a string?? 
         logger(route); 
         logger("Checking '"+attrs.routeDepend+"' against '"+route.originalPath+"'"); // undefined originalPath 
         // check route.permission 
        } 
       } 
      } 

      toggleVisibilityBasedOnRoute(); 
      scope.$on('permissionsChanged', toggleVisibilityBasedOnRoute); 
     } 
    }; 
} ]); 

をしかし、あなたは、コメントから見ることができるように私は期待していて、物事が解決されていません。

私は一緒にこの石畳います。

私は何が間違っているのですか、私はそれが私が望むことをどうすればいいのですか?

答えて

0

すでに設定が完了しています。既存の設定部分を使用してリンクを表示/非表示にする

設定に基づいて、ユーザーがパスにアクセスできるかどうかを示す機能/サービスを作成します。

次に、ページロード時にのみチェックし、リンクの表示を決定する場合は、ng-initでその関数を呼び出します。

または継続的に監視したい場合は、ng-ifng-showng-hideで呼び出してください。

+0

私はこれがこの質問に対する答えだとは思わない。彼はどのように状態に基づいて表示/非表示にどのようにルートが存在するかどうかをチェックする方法を尋ねる。 – sielakos

+0

私はある時点でルートリストを反復する必要があります:) –

+0

私は知っていますが、あなたは "私は、ルートがアクセス可能であるか許可が存在すればボタンが存在します。 設定済みです。経路を照会するのではなく、既存の設定部分を使ってリンクを表示/非表示にしてください –

1

Ahhh plop。私のforループは間違っていた。それは、次のようになるはずです。

for (routeName in $route.routes) { 
    if ($route.routes.hasOwnProperty(routeName)) { 
     route = $route.routes[routeName]; 

残りはすべて期待通りに機能します。

関連する問題