Angular ui-router在更改视图时更改URL

时间:2016-03-04 13:30:01

标签: angularjs angular-ui-router

我正在查看一个具有ui-router设置的Angular应用程序

$stateProvider.state('thing-doer', {
            url: '/thing/:id',
            controller: 'ThingDoingCtrl',
            views: {
              'view': {
                templateUrl: 'some/view/thingdoer.html',
                controller: 'ThingDoingCtrl'
              },
              'onetypeofmode@thin-doer': {
                templateUrl: 'some/view/modeone.html'
              },
              'anothermode@thing-doer': {
                templateUrl: 'some/view/modetwo.html'
              },//etc

意图是一个内容基本相同但在不同模式之间切换的页面,用户可以在其中执行不同的操作

令我感到沮丧的是,如果你是新鲜的,你会回到基本模式......

在这些视图之间切换时是否可以更改URL?或者ui-router是否有更好的方式来表达切换模式的大部分不变页面的意图?

1 个答案:

答案 0 :(得分:1)

您可以使用包含带有视图占位符的模板的 root 抽象状态。让我们称这个州为“做事”':

$stateProvider.state('thing-doer', {
    url: '/thing/:id',
    abstract: true
    templateUrl: 'root/template/with-views.html'
  },

然后,您创建了儿童状态' thing-doer',每个模式对应您要支持的模式:

$stateProvider.state('thing-doer', {
    url: '/thing/:id',
    abstract: true
    templateUrl: 'root/template/with-views.html'
  })
  .state('thing-doer.onetypeofmode', {
    url: 'onetypeofmode'
    views: {
      'onetypeofmode@thin-doer': {
        templateUrl: 'some/view/modeone.html'
    }
  })
  .state('thing-doer.anothermode', {
    url: 'anothermode'
    views: {
      'anothermode@thing-doer': {
        templateUrl: 'some/view/modetwo.html'
    }
  })

通过这种方式,您可以获得要支持的任何模式的URL:

  • '的 /事情/:ID / onetypeofmode '当你在" onetypeofmode "模式
  • '的 /事情/:ID / anothermode '当你在" anothermode "模式