【问题标题】:Angular Router - Using abstract state to access serviceAngular Router - 使用抽象状态访问服务
【发布时间】:2017-08-31 17:34:53
【问题描述】:

使用 mean.js:

我有一个按办公室划分的大型应用程序。每个办公室以相同的方式访问相同的应用程序,但办公室的员工只能访问与该办公室有关的信息。公司管理员可以完全访问应用程序,在办公环境之间切换。需要注意的是,办公室员工没有用户帐户(没有登录/身份验证),只有管理员帐户。

我正在探索通过以下方式进行操作:

我创建了一个访问模块,其中包含一个存储办公上下文的服务,并在进行 API 调用时将其传递给后端。这是在应用程序启动时从配置文件设置的。

这很好,但我需要允许管理员切换办公室环境。我使用链接<a ui-sref="Context({ officeID: 'x' })(在导航栏下拉菜单中,可以从每个状态访问)来访问角度路由器:

.state('Context', {
        url: '/Context/:officeID',
        controller: 'ContextController',
        controllerAs: 'vm'
      });

这会将 officeID 传递给 ContextController,这将设置 ContextService.officeID 变量。这时候,我相信我会从ContextController 调用api 来刷新当前状态的数据以反映当前上下文。不知道该怎么做。

我觉得我这里有一些选项,我不确定如何实现:

  • 我可以将Context 状态抽象化,并将其他所有状态都设为子状态,但这看起来很庞大。如果这是正确的,我如何告诉当前状态刷新它的数据?
  • 我可以进入Context 状态,设置ContextService.officeID,并立即重定向回之前的状态,进入该状态后,应该使用新的上下文进行api 调用。如果这是正确的,我该如何正确执行该重定向?

我可以完全放弃这是如何完成的,但我不知道从哪里开始。欢迎任何建议。

【问题讨论】:

  • 那么问题是如何应对路线变化?

标签: angularjs node.js angular-ui-router mean-stack meanjs


【解决方案1】:

我想出了一些感觉更优雅的东西。

我仍然使用Context 路由。我在我的所有角度模块中都包含了ContextService,并在需要设置上下文时调用它。 我尝试使用$location.path(...) 进行重定向,这让我很头疼。使用$state.go($state.previous.state.name) 是一种享受。

更好的是,如果你使用依赖于解析的路由,你可以使用$state.go($state.previous.state.name, $stateParams);进一步重定向

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多