代码之家  ›  专栏  ›  技术社区  ›  SoftTimur

让两个州分享决心的一部分

  •  1
  • SoftTimur  · 技术社区  · 7 年前

    我将两个状态定义如下:

    app.config(['$stateProvider', function ($stateProvider) {
        $stateProvider
            .state('edit', {
                url: '/edit/{id}',
                templateUrl: '/htmls/h1.html',
                controller: 'SameCtrl',
                onEnter: ...sameOnEnter...
                resolve: {
                    ...commonResolve...
                }
            })
            .state('addinEdit', {
                url: '/addin/edit/{id}',
                templateUrl: '/htmls/h2.html',
                controller: 'SameCtrl',
                onEnter: ...sameOnEnter...
                resolve: {
                    special: [ ... ],
                    ...commonResolve...
                }
            })
    }])
    

    onEnter ,他们有一个 非常长 和通用部分 resolve (实际上是一个 链条 first: function (...){...}, second: function (...){...}, ... ). 有人知道如何重写它们,这样我就不用写了吗 commonResolve 两次

    2 回复  |  直到 7 年前
        1
  •  1
  •   cccross    7 年前

    只需为解析器创建一个函数:

        app.config(['$stateProvider', function ($stateProvider) {
    
            resolverFunction.$inject = ['resolverA', 'resolverB'];
            function ResolverFunction(myService1, myService2) {
                return 'something';
            }
    
            resolverAFunction.$inject = ['resolverC'];
            function resolverAFunction(resolverC) {
                return 'anything';
            }
    
            resolverBFunction.$inject = ['resolverC'];
            function resolverBFunction(resolverC) {
                return 'something else';
            }
    
            resolverCFunction.$inject = ['service'];
            function resolverCFunction(service) {
                return 'something else';
            }
    
    
            $stateProvider
                .state('edit', {
                    url: '/edit/{id}',
                    templateUrl: '/htmls/h1.html',
                    controller: 'SameCtrl',
                    onEnter: ...sameOnEnter...
                    resolve: {
                       commonResolver: resolverFunction,
                           resolverA: resolverAFunction,
                           resolverB: resolverBFunction,
                           resolverC: resolverCFunction,
    
                    }
        })
            .state('addinEdit', {
                url: '/addin/edit/{id}',
                templateUrl: '/htmls/h2.html',
                controller: 'SameCtrl',
                onEnter: ...sameOnEnter...
                resolve: {
                   special: [ ... ],
                   commonResolver: resolverFunction,
                    resolverA: resolverAFunction,
                    resolverB: resolverBFunction,
                    resolverC: resolverCFunction,
    
                }
        })
        }])
    
        2
  •  0
  •   tiepnv    7 年前

    我没有经验,但我找到了解决办法,

    app.config(['$stateProvider', function ($stateProvider) {
    $stateProvider
        .state('edit', {
            url: '/edit/{id}',
            templateUrl: '/htmls/h1.html',
            controller: 'SameCtrl',
            onEnter: ...sameOnEnter...
            resolve: {
                ...commonResolve...
            }
        })
        .state('addinEdit', {
            url: '/addin/edit/{id}',
            templateUrl: '/htmls/h2.html',
            parent : 'edit'
        })
    }])