最佳答案
使用 ui-router
,可以将 $state
或 $stateParams
注入到控制器中,以获得对 URL 中参数的访问。但是,通过 $stateParams
访问参数只公开属于访问它的控制器管理的状态的参数及其父状态,而 $state.params
具有所有参数,包括处于任何子状态的参数。
给定以下代码,如果我们直接加载 URL http://path/1/paramA/paramB
,控制器加载时是这样的:
$stateProvider.state('a', {
url: 'path/:id/:anotherParam/',
controller: 'ACtrl',
});
$stateProvider.state('a.b', {
url: '/:yetAnotherParam',
controller: 'ABCtrl',
});
module.controller('ACtrl', function($stateParams, $state) {
$state.params; // has id, anotherParam, and yetAnotherParam
$stateParams; // has id and anotherParam
}
module.controller('ABCtrl', function($stateParams, $state) {
$state.params; // has id, anotherParam, and yetAnotherParam
$stateParams; // has id, anotherParam, and yetAnotherParam
}
问题是,为什么有区别?关于何时和为什么应该使用,或者避免使用其中任何一种,是否有最佳实践指南?