AngularJs从动态templateurl获取模板名称

时间:2014-11-04 21:13:35

标签: angularjs angular-ui-router

我有以下路线定义:

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

下一段代码监听路径正在改变。如果用户未经过身份验证,并且他要导航的下一页/模板不是登录页面,则会将用户重定向到登录页面。

一切正常,但next.templateUrl值实际上是function (param) { return 'views/' + param.templateFile + '.html'而不是views/login.html,例如。

alert(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");
            }
        }
    });
});

在使用动态模板时,如何获得下一个模板的任何想法?

1 个答案:

答案 0 :(得分: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");
            }
        }
    });
});