使用基于特定路由参数的特定模板
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 文档,它可以让您很好地了解参数。希望对你有帮助。
如果路由参数是 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 文档,它可以让您很好地了解参数。希望对你有帮助。