Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使两个州共享一部分决心_Javascript_Angularjs_Angular Ui Router_Nested Routes_Nested Views - Fatal编程技术网

Javascript 使两个州共享一部分决心

Javascript 使两个州共享一部分决心,javascript,angularjs,angular-ui-router,nested-routes,nested-views,Javascript,Angularjs,Angular Ui Router,Nested Routes,Nested Views,我对两个州的定义如下: app.config(['$stateProvider', function ($stateProvider) { $stateProvider .state('edit', { url: '/edit/{id}', templateUrl: '/htmls/h1.html', controller: 'SameCtrl', onEnter: ...sa

我对两个州的定义如下:

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
的公共部分(这实际上是一个解析链:
第一:函数(…){…},第二:函数(…){…},
)。有谁知道如何重写它们,这样我就不必写两次
commonResolve

我没有angularjs的经验,但我找到了一个解决方案, 可以通过parent属性指定状态的父级

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'
    })
}])

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

    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,

            }
    })
    }])

如果它们很长,那么您可以编写commonResolve以成为一个私有函数吗?@tiepnv您可以解释更多吗?我在哪里可以定义这样的私有函数?我们将解析置于“编辑”状态,并将“addinEdit”状态从“编辑”继承。抱歉,我不清楚一件事。。。实际上,
commonResolver
包含一个解析器链(这就是为什么它很长)。它看起来像
first:function(…){…},second:function(…){…},
。有没有办法将所有这些都封装在一个函数中?是的,只需为每个解析器创建函数,然后在需要的地方注入它们。因此,我们不能只为链创建一个函数?如果您只想为链创建一个函数,您可能需要以父/子的方式创建状态,以便将冲突解决程序从父级注入子级。