2014-11-04 101 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