【问题标题】:AngularJs get template name from dynamic templateurlAngularJs 从动态 templateurl 获取模板名称
【发布时间】:2014-11-04 21:13:34
【问题描述】:

我有以下路线定义:

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

任何想法在使用动态模板时如何获取下一个 templateurl?

【问题讨论】:

    标签: angularjs angular-ui-router


    【解决方案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");
                }
            }
        });
    });
    

    【讨论】:

    • 完美运行!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-14
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2015-11-12
    • 2014-05-26
    • 2014-09-19
    相关资源
    最近更新 更多