【发布时间】:2015-11-03 16:34:15
【问题描述】:
我有一个状态可以解析通配符path,它代表应用程序的实际路径。例如,url: '/{path:.*}' 其中path 是abc/def/。 path 是通过编程方式构建的。
如果我对 path 进行编码,则状态控制器会按预期执行一次,但 URL 以编码路径结束(即,我看到的是 mydomain.com/abc%252Fdef%252F 而不是 mydomain.com/abc/def/)。但是,如果我不对其进行编码,控制器会运行两次。
为什么控制器运行两次?我需要做什么才能让abc/def/etc.../ 这样的路径在我的浏览器中显示未编码?
参见示例。如果path 未编码,则单击“Go”会更改状态并且控制器会记录到控制台两次。
编辑:显然它是known issue with ui-router. 建议的解决方法是像我提到的那样对路径进行编码。
var app = angular.module('routerApp', ['ui.router']);
app.config(function($stateProvider) {
$stateProvider
.state('abc', {
url: '/{path:.*}',
controller: function() {
console.log('loaded');
}
});
});
app.controller('MainCtrl', function($scope, $state) {
$scope.go = function() {
// loads once
//var path = encodeURIComponent('one/two/three/four/');
// loads twice
var path = 'one/two/three/four/';
$state.go('abc', {path: path});
};
});
<html ng-app="routerApp">
<head>
<script data-require="angular.js@1.4.x" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular.js" data-semver="1.4.7"></script>
<script data-require="ui-router@*" data-semver="0.2.15" src="//rawgit.com/angular-ui/ui-router/0.2.15/release/angular-ui-router.js"></script>
</head>
<body ng-controller="MainCtrl">
<button ng-click="go()">GO</button>
<div class="container">
<div ui-view>
</div>
</div>
</body>
</html>
【问题讨论】:
标签: angularjs angular-ui-router