为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

红颜莎娜 2019-11-28 10:02:57
有没有一种方法可以在模块配置之后以编程方式将状态添加到$ 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 
查看完整描述

3 回答

?
慕无忌1623718

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进行同步。


查看完整回答
反对 回复 2019-11-28
  • 3 回答
  • 0 关注
  • 531 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信