我是Angular(1.5.7)的新手,我正在尝试使用ui-router在主页和搜索结果页之间进行路由,并更改URL以反映搜索查询。我的大多数查询都包含中文字符,导致URL中包含编码字符,如下所示:
http://localhost:3000/#/search/%E4%B8%AD%E6%96%87
我的问题是: 如果网址中有中文字符或任何其他编码字符,则后退按钮似乎无法执行任何操作。
如果搜索网址中没有编码字符(例如,我搜索了helloWorld
或what's_up
,则浏览器(我使用Chrome)后退按钮工作正常,并将我带回主页面。我已尝试收听$stateChangeStart
和$stateChangeSuccess
事件,并且只有在编码字符时才会触发。
我有一个主页面控制器,它将URL更改为搜索URL,搜索页面有一个控制器,用于从服务器获取结果。相关代码(如果需要其他任何内容,请告诉我):
app.controller('MainController', ['$scope', '$window', function($scope, $window) {
$scope.search = function(searchTerm) {
if (!$scope.searchTerm || $scope.searchTerm === '') {
return;
}
$window.location.href = '#/search/' + $scope.searchTerm;
$scope.searchTerm = '';
}
}]);
app.controller('SearchController', ['$scope', '$http', '$stateParams', function($scope, $rootScope, $http, $stateParams) {
$http.get("http://localhost:3000/api/search/" + $stateParams.term)
.success(function(result) {
$scope.entries = result;
});
}]);
app.config([
'$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('home', {
url:'/home',
templateUrl:'/templates/home.html',
controller: 'MainController'
})
.state('search', {
url: '/search/{term}',
templateUrl: 'templates/search.html',
controller: 'SearchController'
});
$urlRouterProvider.otherwise('/home');
}]);
有谁可以解释为什么后退按钮不起作用?
编辑:Safari会显示常规中文字符(例如http://localhost:3000/#/search/中文
),后退按钮也能正常工作。所以编码字符肯定是问题所在。