Angular 路由器 - 使用抽象状态访问服务
Angular Router - Using abstract state to access service
使用mean.js:
我有一个大型应用程序,按办公室划分。每个办公室以相同的方式访问相同的应用程序,但办公室的员工只能访问与该办公室有关的信息。公司管理员可以完全访问该应用程序,在办公环境之间切换。需要注意的是,办公室员工没有用户帐户(没有 login/auth),只有管理员帐户。
我正在探索以下列方式进行:
我创建了一个访问模块,其中包含存储办公室上下文的服务,并在进行 API 调用时将其传递到后端。这是在应用程序从配置文件启动时设置的。
这很好,但我需要允许管理员切换办公环境。我使用 link <a ui-sref="Context({ officeID: 'x' })
(在导航栏下拉列表中,因此可以从 每个 状态访问)来访问 angular 路由器:
.state('Context', {
url: '/Context/:officeID',
controller: 'ContextController',
controllerAs: 'vm'
});
这会将 officeID 传递给 ContextController
,这将设置 ContextService.officeID
变量。此时,我相信我会从 ContextController
调用 api 来刷新当前状态的数据以反映当前上下文。不知道该怎么做。
我觉得我在这里有一些选择,我不确定如何实现:
- 我可以将
Context
状态设为抽象状态,将其他所有状态设为子状态,但这看起来很笨重。如果这是正确的,我如何告诉当前状态刷新它的数据?
- 我可以进入
Context
状态,设置 ContextService.officeID
,然后立即重定向回之前的状态,进入后,应该使用新上下文进行 api 调用.如果这是正确的,我该如何正确执行该重定向?
我可以完全放弃这是如何完成的,但我不知道从哪里开始。欢迎任何建议。
我想出了一个感觉更优雅的东西。
我仍然使用 Context
路线。我在所有 angular 模块中都包含了 ContextService
,并在需要设置上下文时调用它。
我尝试使用 $location.path(...)
重定向,这是一个令人头疼的问题。使用 $state.go($state.previous.state.name)
是一种享受。
更好的是,如果您使用依赖于解析的路由,您可以使用 $state.go($state.previous.state.name, $stateParams);
进一步重定向
使用mean.js:
我有一个大型应用程序,按办公室划分。每个办公室以相同的方式访问相同的应用程序,但办公室的员工只能访问与该办公室有关的信息。公司管理员可以完全访问该应用程序,在办公环境之间切换。需要注意的是,办公室员工没有用户帐户(没有 login/auth),只有管理员帐户。
我正在探索以下列方式进行:
我创建了一个访问模块,其中包含存储办公室上下文的服务,并在进行 API 调用时将其传递到后端。这是在应用程序从配置文件启动时设置的。
这很好,但我需要允许管理员切换办公环境。我使用 link <a ui-sref="Context({ officeID: 'x' })
(在导航栏下拉列表中,因此可以从 每个 状态访问)来访问 angular 路由器:
.state('Context', {
url: '/Context/:officeID',
controller: 'ContextController',
controllerAs: 'vm'
});
这会将 officeID 传递给 ContextController
,这将设置 ContextService.officeID
变量。此时,我相信我会从 ContextController
调用 api 来刷新当前状态的数据以反映当前上下文。不知道该怎么做。
我觉得我在这里有一些选择,我不确定如何实现:
- 我可以将
Context
状态设为抽象状态,将其他所有状态设为子状态,但这看起来很笨重。如果这是正确的,我如何告诉当前状态刷新它的数据? - 我可以进入
Context
状态,设置ContextService.officeID
,然后立即重定向回之前的状态,进入后,应该使用新上下文进行 api 调用.如果这是正确的,我该如何正确执行该重定向?
我可以完全放弃这是如何完成的,但我不知道从哪里开始。欢迎任何建议。
我想出了一个感觉更优雅的东西。
我仍然使用 Context
路线。我在所有 angular 模块中都包含了 ContextService
,并在需要设置上下文时调用它。
我尝试使用 $location.path(...)
重定向,这是一个令人头疼的问题。使用 $state.go($state.previous.state.name)
是一种享受。
更好的是,如果您使用依赖于解析的路由,您可以使用 $state.go($state.previous.state.name, $stateParams);