angularjs - angular ui 路由器状态 - 具有相同模板和 Controller 的多个状态

标签 angularjs

我使用 angular ui 路由器状态提供程序在我的 angularjs 应用程序中定义了如下状态。而且,我想用相同的配置定义多个状态,即。使用相同的模板和 Controller 。

$stateProvider
        .state('parent', {
            templateUrl: 'parent.html',
            abstract: true,
            parent: 'apm'
        })
        .state('parent.list', {
            abstract: true,
            url: '/list',
            templateUrl: 'list.html',
            controller: 'ListCtrl'
        })

        .state('parent.list.closed', {
        url: '/q',
        templateUrl: 'closed.html'
        })

        .state('parent.list.details', {   // would like to have same template, controller on different state parent.details without list
            url: '/:id/:name',
            abstract: true,
            templateUrl: 'details.html',
            controller: 'DetailsCtrl',
            resolve: {
                .....
                .....
            }
        })
        .state('parent.list.details.data', { // would like to have same template, controller on different state parent.details.data without list
          url: '/details',
          views : {
            'view1' : {
              templateUrl : 'view1.html'
            },
            'view2' : {
              templateUrl : 'view2.html',
              controller : 'View2Ctrl'
            },
            'view3' : {
              templateUrl : 'view3.html'
            },
            'view4' : {
              templateUrl : 'view4.html'
            }
          }
        })

是否有可能做类似的事情
.state(['parent.list.details', 'parent.details'], {   
            url: '/:id/:name',
            abstract: true,
            templateUrl: 'details.html',
            controller: 'DetailsCtrl',
            resolve: {
                .....
                .....
            }
        })

任何帮助或建议?

最佳答案

每个状态都需要在它自己的 .state() 中定义方法。尝试按照上面列出的方式进行操作时,您会遇到多个问题。最重要的是网址。

你可以简单地这样做:

    .state('parent.list', {   
        url: '/list',
        abstract: true,
        templateUrl: 'details.html',
        controller: 'DetailsCtrl',
        resolve: {
            .....
            .....
        }
    .state('parent.list.details', {   
        url: '/:id/:name',
        abstract: true,
        templateUrl: 'details.html',
        controller: 'DetailsCtrl',
        resolve: {
            .....
            .....
        }
    })

虽然在您必须声明每个状态上使用的 Controller 和部分代码的意义上,代码并不简洁或高效,但这是必要的,因为每个状态都需要自己的 .state()方法

关于angularjs - angular ui 路由器状态 - 具有相同模板和 Controller 的多个状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29043489/

相关文章:

javascript - 如何跨 android 和 JS bridge 配置通用数据模型?

angularjs - 访问一个数组的索引以获取另一个数组

javascript - 浏览器后退按钮: I always stay on the current page

javascript - 将 Angular 注入(inject) Rails

javascript - 使用 Angularjs 选择 2 个下拉列表后调用一个函数

javascript - 如何制作 ng-bind-html angularjs 代码

javascript - 在 Link 函数中使用 add Class 与在 AngularJS 的 Compile 函数中使用 addClass

javascript - Angular 错误 : [$injector:unpr] while adding ui. Bootstrap

javascript - AngularJS:如何检测 $http 中是否没有响应

javascript - AngularJS - 始终有一个参数作为资源的默认值