告诉ui-router不要改变状态定义的位置

时间:2015-02-08 15:02:24

标签: angularjs angular-ui-router

在ui-router中,当您调用state.go时,您可以通过传递{location:false}来定义防止位置更改的选项。但是,如何使用$stateProvider.state定义状态,以便它不会更改位置?我已经为自定义网址处理定义了一条规则,但现在它正在更改位置值。

我有foo州 -

  $stateProvider
    .state('foo', {
      url: '/foo'
      templateUrl: '',
      controller: function($scope) {
        console.log('made it!');
      }
    });

我有自定义规则 -

   $urlRouterProvider.rule(function ($injector, $location) {
     // some logic
     return '/foo';
   });

除了更改位置并将#/foo附加到该位置之外,这正是我想要的方式。我不想附加它。

1 个答案:

答案 0 :(得分:2)

我创建了working example here。它是此处提供的解决方案的扩展版本:How not to change url when show 404 error page with ui-router

有一段代码,应该显示如何在不更改 url 的情况下使用“foo”状态。

首先,我们的规则将重定向到'foo'状态 - 以防/home作为url (决策示例)传递

  $urlRouterProvider.rule(function($injector, $location) {

    if ($location.path() == !"/home") {
      return false;
    }
    var $state = $injector.get("$state");
    // move to state, but do not change url
    $state.go("foo", {
      location: false
    })
    return true;
  });

以下是我们的示例状态,其中包含网址设置

  // States
  $stateProvider
    .state('home', {
      url: "/home",
      templateUrl: 'tpl.html',
    })
    .state('parent', {
      url: "/parent",
      templateUrl: 'tpl.html',
    })
    .state('parent.child', {
      url: "/child",
      templateUrl: 'tpl.html',
      controller: 'ChildCtrl',
    })

Foo没有网址

    .state('foo', {
      //url: '/foo',
      templateUrl: 'tpl.html',
    });

检查here