AngularJS-UI路由器-以编程方式添加状态

有没有一种方法可以在模块配置之后以编程方式将状态添加到$ stateProvider中,例如在service中?


为了给这个问题增加更多的背景,我有两种方法可以使用:


尝试强制在模块配置中定义的状态上重新加载,问题在于该状态将reloadOnSearch设置为false,因此当我尝试$ state.go('state.name',{new:param},{reload:真正}); 什么都没发生,有什么主意吗?

州定义


.state('index.resource.view', {

  url: "/:resourceName/view?pageNumber&pageSize&orderBy&search",

  templateUrl: "/resourceAdministration/views/view.html",

  controller: "resourceViewCtrl",

  reloadOnSearch: false,

})

尝试以编程方式添加我需要从服务加载的状态,以便路由可以正常工作。如果可能的话,我宁愿选择第一种方法。

javascript angularjs 


红颜莎娜
浏览 541回答 3
3回答

慕无忌1623718

请参阅-edit-以获取最新信息。通常,状态会$stateProvider在配置阶段添加到中。如果要在运行时添加状态,则需要保留对$stateProvider周围的引用。此代码未经测试,但应执行您想要的操作。它创建了一个名为的服务runtimeStates。您可以将其注入运行时代码,然后添加状态。// config-time dependencies can be injected here at .provider() declarationmyapp.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进行同步。
打开App,查看更多内容
随时随地看视频慕课网APP