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

Using specific template based on specific route param

如果路由参数是 1,我想使用一个特定的模板,如果是其他参数,我想使用另一个模板。

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

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

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

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

我不确定这是最好的方法,但您可以通过在 run 块中收听 $rootScope 上的 $routeChangeStart 侦听器来解决您的问题:

.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';
    }
  });
})
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 文档,它可以让您很好地了解参数。希望对你有帮助。