2015-02-23 20 views
2

我剛剛開始使用angularJS,我有一個問題: 如何訪問在templateUrl函數中使用$ rootScope定義的變量? 這裏是我的代碼:

myApp.config(['$routeProvider', 
      function($routeProvider, $rootScope) { 
       $routeProvider. 
       when('/', { 
        templateUrl: 'partials/login.html', 
        controller: 'loginCtrl' 
       }). 
       when('/home', { 
        templateUrl: function($rootScope){ 
         console.log($rootScope.utilisateur.user.role_id); 
         if ($rootScope.utilisateur.user.role_id==2){ 
         return 'partials/home.html'; 
         } 
         else return 'partials/login.html'; 
        }, 
        controller: 'homeCtrl' 
       }). 
       otherwise({redirectTo:'/'}); 
      }]); 

它告訴我,utilisateur是不確定的。

$rootScope.utilisateur = null; 
$rootScope.rapports = null; 

然後在LoginCtrl:

我在索引控制器定義它

var user = Authentification.login(email,password); 
    user.success(function(response){ 
     $rootScope.utilisateur = response; 
     console.log($rootScope.utilisateur); 
     $location.path('/home'); 
    }); 
+0

顯示你的代碼,你已宣佈$ rootScope – mindparse 2015-02-23 22:12:08

+0

的utilisateur它看起來像$ rootScope是工作但utilisateur尚未確定。 – AlexMA 2015-02-23 22:12:10

回答

1

不能使用$ rootScope配置塊的內部,配置塊運行之前$ rootScope被創建。常量和提供者可以在配置塊內部使用。如果常量不適合您,您可能需要重定向到homeCtrl中的正確url。

[編輯]添加了可能的解決方案從下面的評論:

選項1:有2個不同的路由

  • /管理/家庭
  • /家庭

選項2:切換根據控制器/視圖內的許可模板

home.html

<div ng-switch="utilisateur.user.role_id"> 
    <div ng-switch-when="2"> 
    <!-- is admin --> 
    </div> 
    <div ng-switch-default> 
    <!-- not admin --> 
    </div> 
</div> 

不是一個理想的解決方案,但它會爲你正在嘗試做的,根據您在下面的評論工作

+0

hi;你能告訴我怎麼做:我想使用相同的URL(/ home),但根據用戶角色有不同的視圖(例如,如果他的角色是admin,我將他重定向到管理頁面,否則我重定向他主頁,但這兩頁應該有相同的路線(/家) – 2015-02-24 09:59:34

+0

我認爲理想的解決方案將是有2個不同的路線: -/admin/home -/home 我假設您知道用戶是否是管理員,只有在您的角度模塊啓動後,才能修改配置塊內的$ routeProvider。 如果有2個單獨的路線不是一個選項,你可以在你的'homeCtrl'中檢查isAdmin與否。在你看來,有2個div塊。 '

' '
' – 2015-02-24 17:56:15

+0

編輯了我上面的答案,以包括我以前評論中的可能選項。 – 2015-02-24 18:14:59

0

你的問題,好像你有兩種不同的意見,並在條件基礎你有重定向視圖。

像在你的視圖中傳遞參數(創建/編輯鏈接等)因爲我在登錄時設置了cookie並在這裏作爲參數訪問,或者你可以使用不同的方式來訪問參數。

​​

而且在$ routeProvider你的配置使用的是這樣的:

$routeProvider.when("/editTest/:ID/:flagTab", 
         {        
          templateUrl: function (params) { 
           var flag = params.flagTab;          
           if (flag == 'tabPanelView') { 
            return '/apps/templates/editTest.html'; 
           } 
           else { 
            return '/apps/templates/editTestPageView.html'; 
           }          
          }, 
          controller: 'EditTestController' 
         });. 

參考,鏈接swtiching views in routeProvider based on condition

相關問題