使用基于特定路由参数的特定模板

时间:2015-08-27 12:29:57

标签: javascript angularjs angular-routing

如果路由参数为1,我想使用特定模板;如果是其他任何内容,我想使用另一个模板。

但是,如果我对1进行硬编码,我将失去绑定:

when("/edit/person/1", {

    },
    templateUrl: 'partials/proband.html',
    controller: "PersonCtrl"
}).
when("/edit/person/:person_id", {
    },
    templateUrl: 'partials/person-form.html',
    controller: "PersonCtrl"
}).

处理此问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

when("/edit/person/:person_id", {
},
templateUrl: 'partials/person-form.html',
controller: "PersonCtrl"

})。

仅使用此路线并指定" if"控制器中的声明。例如,你可以这样做:

if ($stateParams.person_id === 1) {
    //Do something
}

基本上就是这样,或者你可以在状态上指定一个匿名控制器。另外,在https://github.com/angular-ui/ui-router文档中获取一个战利品,它可以很好地了解params。希望它有所帮助。

答案 1 :(得分:0)

我不确定这是最好的方法,但您可以通过$rootScope run.run(function($rootScope) { $rootScope.$on('$routeChangeStart', function (event, next) { // If person_id is 1 var person_id_1 = (next.originalPath === "/edit/person/:person_id") && next.params.person_id === '1'; if (person_id_1) { // Set templateUrl next.templateUrl = 'partials/proband.html'; } }); }) 内的$routeChangeStart听众来解决您的问题:

var dd_value = document.getElementById("dd_value");
var mm_value = document.getElementById("mm_value");
var yy_value = document.getElementById("yy_value");
(dd_value+mm_value+yy_value).onchange = function(){
    var textbox = document.getElementById("bdaysummary");
    textbox.value = dd_value;
};