如何为每个子状态

时间:2017-07-26 10:24:48

标签: angularjs angular-ui-router angular-routing

这是我的配置:

     .state('index.oz', {
        abstract: true,
        url: '/oz',
        views: {
            'mainView@': {
                templateUrl: "Views/oz/oz.html",
                controller: 'ozController'
            }
        }
    })
    .state('index.iz.a', {
        url: '/a/:id',
        params: {
            id: {
                value: null,
                squash:true
            }
        },
        views: {
            'ozTypeView': {
                templateUrl: "Views/oz/a.html",
                controller: "ozaController"
            }
        }
    })
    .state('index.oz.b', {
        url: '/b/:id',
        params: {
            id: {
                value: null,
                squash:true
            }
        },
        views: {
            'ozTypeView': {
                templateUrl: "Views/oz/ozb.html",
                controller: 'ozbController'
            }
        }
    });

我想要的网址是:

/盎司/ A

/盎司/ B

/盎司/ A / 45

/盎司/ B / 12

如何在每个子状态中创建url,以便我不必在每个州写下以下代码:

       params: {
            id: {
                value: null,
                squash:true
            }
        }

更加快速,我可以以某种方式将那段代码放在父抽象状态中,或者甚至可以在父状态中定义参数id,但是如上所述保留我想要的URL?基本上,我会有几个子状态,我不希望每个州重复相同的params代码。

1 个答案:

答案 0 :(得分:0)

我猜你直接猜对了,但你可以减少这样的代码重复:

function stateWithId(name, cfg) {
  cfg.url += '/:id';
  if (!cfg.params) {
    cfg.params = {};
  }
  cfg.params.id = {
                value: null,
                squash:true
  };
  $stateProvider.state(name, cfg);
}

stateWithId('index.iz.a', {
        url: '/a',
        views: {
            'ozTypeView': {
                templateUrl: "Views/oz/a.html",
                controller: "ozaController"
            }
        }
    });
stateWithId('index.iz.b', {
        url: '/b'
});