3 回答
TA贡献1744条经验 获得超4个赞
请参阅-edit-以获取最新信息。
通常,状态会$stateProvider在配置阶段添加到中。如果要在运行时添加状态,则需要保留对$stateProvider周围的引用。
此代码未经测试,但应执行您想要的操作。它创建了一个名为的服务runtimeStates。您可以将其注入运行时代码,然后添加状态。
// config-time dependencies can be injected here at .provider() declaration
myapp.provider('runtimeStates', function runtimeStates($stateProvider) {
// runtime dependencies for the service can be injected here, at the provider.$get() function.
this.$get = function($q, $timeout, $state) { // for example
return {
addState: function(name, state) {
$stateProvider.state(name, state);
}
}
}
});
我已经在UI-Router Extras中实现了一些称为Future States的东西,这些东西为您处理了一些特殊情况,例如将url映射到尚不存在的状态。Future States还显示了如何延迟加载运行时状态的源代码。看一下源代码,以了解其中涉及的内容。
-edit-适用于UI-Router 1.0+
在UI-Router 1.0中,可以使用StateRegistry.register和在运行时注册和注销状态StateRegistry.deregister。
要访问StateRegistry,请将其作为$stateRegistry注入,或$uiRouter通过注入和访问UIRouter.stateRegistry。
UI-Router 1.0还提供了开箱即用的Future States,可以处理状态定义的延迟加载,甚至可以通过URL进行同步。
添加回答
举报