当前位置: 首页 > 面试题库 >

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

马飞
2023-03-14
问题内容

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

为了给这个问题增加更多的上下文,我有两种情况可以使用:

  1. 尝试强制在模块配置中定义的状态上重新加载,问题是状态将 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,
})
  1. 尝试以编程方式添加我需要从服务加载的状态,以便路由可以正常工作。如果可能的话,我宁愿选择第一种方法。

问题答案:

通常,状态会$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进行同步。



 类似资料:
  • 我正在尝试在Android上添加Wifi网络,我想知道如何连接到不广播其SSID的Wifi网络(它是否有空SSID或带有\0s的清晰SSID)。 这是我目前用于广播其SSID的Wifi网络的内容:

  • 问题内容: 我将UI路由器用于主菜单的选项卡以及一种状态(用户)内的链接。用户状态有一个用户列表,当单击一个用户时,我只想重新加载子状态,但是它正在重新加载子状态和父状态(用户)。 这是我的代码: 这是单击用户时在我的父控制器(UserController)中调用的函数: 假设我处于users.userGroups状态,当我单击另一个用户时,只希望重新加载users.userGroups状态。这可

  • 问题内容: 是否可以使用需要解析数据的ui-router来建立抽象状态?我需要使用个人资料信息加载页面的上半部分,然后在页面底部添加一个用于加载其他详细信息的子导航。这个想法是,抽象状态每次都会加载配置文件信息,而不管我处于哪个子状态。它似乎不起作用。 例: 问题答案: 和它的 plnkr 因此,在我们的情况下,我们需要在父级中进行此更改 和这个孩子 因此,与其在父母和孩子中使用resolve:{

  • 有没有可能--在中也这样做? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路由是,在保存时显示,并且要将路由(23-是新项的id存储在数据库中)

  • 问题内容: 当前,我们的项目正在使用default ,而我正在使用此“ hack”来进行更改,而无需重新加载页面: 和在 我想到的替换用筑巢路线,但无法找到这。 有可能吗? 我为什么需要这个?让我用一个例子来解释: 创建新类别的路线是在SAVE 之后显示的,我想将路线更改为(23-是存储在db中的新项目的id) 问题答案: 只需使用即可代替 。内部调用,但会自动将选项设置为。您可以呼叫和设置。例如

  • 问题内容: 我正在尝试测试一些视图,这些视图用于链接到应用程序中的其他状态。在我的测试中,我触发了对此元素的点击,如下所示: 如果状态切换为,该如何测试?在我的控制器中像这样使用时,这很容易: 但是当我使用时,我不知道要监视什么对象。如何验证我的应用程序处于正确状态? 问题答案: 我自己找到的。在查看了角度ui路由器源代码后,我在指令中找到了以下行: 当元素收到点击时,会包装在回调中。因此,在测试