当网址中包含编码字符时,为什么后退按钮无效?

时间:2017-04-23 03:56:43

标签: javascript angularjs encoding angular-ui-router

我是Angular(1.5.7)的新手,我正在尝试使用ui-router在主页和搜索结果页之间进行路由,并更改URL以反映搜索查询。我的大多数查询都包含中文字符,导致URL中包含编码字符,如下所示:

http://localhost:3000/#/search/%E4%B8%AD%E6%96%87

我的问题是: 如果网址中有中文字符或任何其他编码字符,则后退按钮似乎无法执行任何操作。

如果搜索网址中没有编码字符(例如,我搜索了helloWorldwhat'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/中文),后退按钮也能正常工作。所以编码字符肯定是问题所在。

0 个答案:

没有答案