在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
附加到该位置之外,这正是我想要的方式。我不想附加它。
答案 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