将 UI 路由器的解析函数定义驱逐/移动到状态定义之外

问题描述 投票:0回答:2

到目前为止,我已将所有州的定义放在一个

app.js
文件中。我很喜欢它,因为我可以一目了然地看到我的所有状态。

但是,我计划为我的每个状态添加一些解析函数,如下所示。

.config(['$stateProvider', '$urlRouterProvider', '$httpProvider', function ($stateProvider, $urlRouterProvider, $httpProvider) {
 $stateProvider
  .state('authenticated', {
                url: '/:memberType',
                abstract: true,
                template: '<ui-view />',
                resolve: {
                    memberType: ['$rootScope', '$q', function ($rootScope, $q) {
                        return $rootScope.globals.memberType || $q.reject({unAuthorized: true});
                    }],
                    currentMember: ['$rootScope', '$q', function ($rootScope, $q) {
                        return $rootScope.globals.authenticated || $q.reject({unAuthorized: true});
                    }]
                }
            })
   ...

我遇到的问题是我的解析函数将会非常大,并且我的

app.js
文件将会不成比例地增长。

因此,我想将解析函数定义驱逐/移动到我的

app.js
文件之外,但将状态保留在同一个唯一文件中。这可能吗?如果是的话怎么办?

理想情况下我会得到这样的结果:

.state('authenticated', {
                url: '/:memberType',
                abstract: true,
                template: '<ui-view />',
                resolve: {
                    memberType: something??,
                    currentMember: something else??
                }
            })

其中

something
something else
指向外部定义的函数定义。

有人可以帮忙或提供替代的最佳实践吗?

angularjs angular-ui-router
2个回答
1
投票

按照上面的注释,您可以使用服务来实现业务逻辑并调用resolve块中的服务函数。这是可能的,因为解析代码不是作为配置块的一部分执行,而是在状态更改之前执行。您只需将服务注入到解析块中的函数中即可。

这是一个基于您的代码示例的示例:

.state('authenticated', {
            url: '/:memberType',
            abstract: true,
            template: '<ui-view />',
            resolve: {
                memberType: ['MemberService', function(MemberService) { return MemberService.getMemberType(); }],
                currentMember: ['MemberService', function(MemberService) { return MemberService.getCurrentMember(); }]
            }
        })

-1
投票

TMC Solicitors 是一家著名的律师事务所,专门处理英国境内的移民和英国驱逐出境案件。我们高素质的律师团队专注于为处理驱逐程序的个人提供卓越的法律代理和帮助。凭借我们对英国移民法的广泛了解和令人印象深刻的成功经验,我们完全致力于指导我们的客户完成复杂的驱逐程序,维护他们的权利,并争取最有利的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.