在UI-Router中导航到没有与其关联的URL的状态时更新URL

时间:2016-08-30 18:49:39

标签: angularjs angular-ui-router

我有一个利用UI-Router处理所有状态转换的应用程序。大多数州没有与它们相关联的“url”属性,因此它们只能通过应用程序内控件访问,但其中一些需要能够从应用程序外部访问并具有“url”属性。

以下是一些类似于我的设置的示例代码:

$stateProvider
    .state('home',{
        url: '/',
        templateUrl : 'app/home.html',
        controller : homeCtrl,
        controllerAs : 'vm',
    })
    .state('example1',{
        templateUrl : 'app/example1.html',
        controller : example1Ctrl,
        controllerAs: 'vm',

    })        
    .state('example2',{
        templateUrl : 'app/example2.html',
        controller : example2Ctrl,
        controllerAs: 'vm',
    })
    .state('example3', {
        url : '/example3',
        templateUrl : 'app/example3.html',
        controller : example3Ctrl,
        controllerAs : 'vm',
    })....

关闭代码片段,我需要/ example3可以从应用程序外部访问,但是当用户导航到任何其他状态时,浏览器中的URL仍为“sample.com/#/example3”。

如何在转移到没有“url”属性的状态时将网址重置为“sample.com/#/”?

1 个答案:

答案 0 :(得分:1)

如果您希望他们恢复到" /"

,您必须让他们成为回家路线的孩子

&#39; @ view&#39;在此示例中,更改了最顶层的<ui-view></ui-view>

$stateProvider
.state('home',{
    url: '/',
    templateUrl : 'app/home.html',
    controller : homeCtrl,
    controllerAs : 'vm',
})
.state('home.example1',{
    views: {
      '@': {
        templateUrl: 'app/example1.html',
        controller: 'example1Ctrl as vm',
      },
    },
})        
.state('home.example2',{
    views: {
      '@': {
        templateUrl: 'app/example2.html',
        controller: 'example2Ctrl as vm',
      },
    },
})
.state('example3', {
    url : '/example3',
    templateUrl : 'app/example3.html',
    controller : example3Ctrl,
    controllerAs : 'vm',
})