动态路由angularJS基于JSON响应

时间:2016-07-22 08:56:37

标签: javascript angularjs json routing route-provider

使用函数ContentService.getQuestions(),我得到一个带有属性' Type'的JSON。此属性类型可以是' DevOps'或者是其他东西。 如果Type属性包含字符串' DevOps',我想加载不同的模板。如果它不是' Devops',我想加载一个不同的模板。

代码:

function configureRouting($routeProvider) {
    var tempUrl = '';

    $routeProvider
        .when('/form', {
            resolve: {
                dataService: function (ContentService) {
                    var questions = ContentService.getQuestions();
                    var resolved = Promise.resolve(questions);
                    resolved.then(function (q) {
                        console.log(q.Type);
                        if (q.Type === 'DevOps') {
                            tempUrl = 'components/devops/template.html';
                        } else {
                            tempUrl = 'components/hr/template.html';
                        }
                    });
                    return questions;
                }
            },
            controller: 'FormController',
            controllerAs: 'frmCtrl',
            templateUrl: tempUrl
        })
        .otherwise({
            redirectTo: '/form'
        });
}

在代码中,tempUrl doest发生了变化,因为templateUrl:tempUrl获取的原始变量是谁,没有被更改。 所以我需要一个解决方案,我可以根据我的JSON属性加载不同的模板。

1 个答案:

答案 0 :(得分:0)

您可以使用函数返回模板URL这样......

function configureRouting($routeProvider) {
        $routeProvider
            .when('/form', {                    
                controller: 'FormController',
                controllerAs: 'frmCtrl',
                templateUrl: function(ContentService){
                     var tempUrl = '';
                     var questions = ContentService.getQuestions();
                        var resolved = Promise.resolve(questions);
                        resolved.then(function (q) {
                            console.log(q.Type);
                            if (q.Type === 'DevOps') {
                                tempUrl = 'components/devops/template.html';
                            } else {
                                tempUrl = 'components/hr/template.html';
                            }
                        });
                        return tempUrl;
                }

            })
            .otherwise({
                redirectTo: '/form'
            });
    }