2014-11-04 53 views
1

得到模板名稱,我有以下路由定義:AngularJs從動態templateurl

.......... 
when('/:templateFile', 
{ 
    templateUrl: function (param) { return 'views/' + param.templateFile + '.html' } 
}) 
.......... 

下一段代碼監聽路徑正在發生變化。如果用戶未通過身份驗證,並且他想要導航到的下一個頁面/模板不是登錄頁面,那麼用戶將被重定向到登錄頁面。

一切工作正常,除了next.templateUrl值實際上是function (param) { return 'views/' + param.templateFile + '.html'而不是views/login.html,例如。

警報(next.templateUrl)將顯示function (param) { return 'views/' + param.templateFile + '.html'

app.run(function ($rootScope, $location) { 
    $rootScope.$on("$routeChangeStart", function (event, next, current) {    
     if (!$rootScope.IsAuth) { 

      alert(next.templateUrl); // problem 

      if (next.templateUrl === "views/login.html") { 
      } else { 
       $location.path("/login"); 
      } 
     } 
    }); 
}); 

任何想法如何在使用動態模板時獲得下一個templateurl?

回答

1

既然templateUrl確實是一個功能,你可以嘗試使用它作爲功能。如果你使用路由參數調用它,它應該返回一個模板URL:

app.run(function ($rootScope, $location) { 
    $rootScope.$on("$routeChangeStart", function (event, next, current) {    
     if (!$rootScope.IsAuth) { 

      var templateUrl = next.templateUrl(next.params); 

      if (templateUrl === "views/login.html") { 
       // ... 
      } 
      else { 
        $location.path("/login"); 
      } 
     } 
    }); 
}); 
+0

Works perfect!非常感謝! – 2014-11-05 05:42:41