如何在不重复其子状态的情况下为一个状态使用多个URL?

时间:2017-11-07 15:31:44

标签: angularjs routing

在搜索此问题后,我发现了多个具有相同问题的问题。但是,他们都没有给我一个适合我想要达到的答案。

在我使用AngularJS 1.5.8的应用程序中,我有一个显示可以属于UserProject的文档的视图。无论哪种方式,视图和控制器都是相同的。我希望可以通过多个URL访问此视图的状态。我希望这是可能的,因为我构建应用程序的方式,每个具有以/projects/{idProject}/开头的URL的状态都将显示带有快捷方式的自定义导航栏。但是当用户访问他自己的文档时,他不在项目部分,因此导航栏不应显示特定按钮。

我之前遇到过与另一个页面相同的问题,但我只创建了两个状态,以便两个不同的URL可以使用不同的参数。

但是,由于以下原因,我找不到适用于此页面的此解决方案:状态具有与允许不同CRUD操作的模式相对应的子状态。这意味着我还需要复制子状态,我最终会得到dix状态而不是三个,除了URL和父状态之外都是相同的。

以下是我的代码的编辑样本,以帮助可视化:

.state('view-document', {
    parent: 'app',
    url: '/view/document/{idDocument}', // <-- This should also be accessed via /projects/{idProject}/view/document/{idDocument}
    views: {
        'content@': {
            templateUrl: 'app/core/view/document/view-document.html',
            controller: 'ViewDocumentController',
            controllerAs: 'vm'
        }
    }
})
.state('view-document.edit-field', {
    parent: 'view-document',
    url: '/edit-field',
    params: {
        field: null
    },
    onEnter: ['$stateParams', '$state', '$mdDialog', function ($stateParams, $state, $mdDialog) {
        $mdDialog.show({
            templateUrl: 'app/core/view/document/edit-field/view-document-edit-field-dialog.html',
            controller: 'ViewDocumentEditFieldController',
            controllerAs: 'vm',
            resolve: {
                ...
            }
        }).then(function () {
            $state.go('view-document', null, {reload: false});
        }, function () {
            $state.go('^');
        });
    }]
})
.state('view-document.delete-field', {
    parent: 'view-document',
    url: '/field/{idField}/delete',
    params: {
        field: null
    },
    onEnter: ['$stateParams', '$state', '$mdDialog', function ($stateParams, $state, $mdDialog) {
        $mdDialog.show({
            templateUrl: 'app/core/view/document/delete-field/view-document-delete-field-dialog.html',
            controller: 'ViewDocumentDeleteFieldController',
            controllerAs: 'vm'
            resolve: {
                ...
            }
        }).then(function () {
            $state.go('view-document', null, {reload: false});
        }, function () {
            $state.go('^');
        });
    }]
});

关于如何在不重复超过两个孩子状态的情况下实现这一目标的任何想法?这个问题也可能是:两个不同的州如何共享同一个子州?

0 个答案:

没有答案