我正在构建一个应用程序,我想在用户进入和离开路线时切换服务中的属性。为此,我需要知道该州的名称onEnter
and onExit
钩子。这对于onExit
钩子,因为我可以注入$state
服务并读取当前状态的名称。但由于当前状态尚未设置,当onEnter
hook 被调用时无法知道我们要转换到什么状态。
我仍然需要对状态的其他部分进行精细控制,因此我宁愿没有任何 for 循环。我正在寻找一种能够通过的方法onEnter
函数到状态,同时仍然在函数本身内部检索状态的名称。
这是我写的代码:
function onEnter($state, Steps) {
var stateName = $state.current.name; // Not possible. The current state has not been set yet!
var step = Steps.getByStateName(stateName);
step.activate();
}
function onExit($state, Steps) {
var stateName = $state.current.name; // No problem. We know about the state.
var step = Steps.getByStateName(stateName);
step.deactivate();
}
$stateProvider
.state('step1', {
url: '/step1',
templateUrl: 'templates/step1.html',
controller: 'StepOneController',
onEnter: onEnter,
onExit: onExit
});
我现在使用的解决方案是使用工厂来创建上下文onEnter
函数传递给状态。这远非理想,因为我仍然需要将州名传递给它。
以下是上述解决方法的示例:
function onEnterFactory(stateName) {
return function onEnter(Steps) {
var step = Steps.getByStateName(stateName);
step.activate();
}
}
$stateProvider
.state('step1', {
url: '/step1',
templateUrl: 'templates/step1.html',
controller: 'StepOneController',
onEnter: onEnterFactory('step1')
});