Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么';当URL中有编码字符时,后退按钮不起作用吗?_Javascript_Angularjs_Encoding_Angular Ui Router - Fatal编程技术网

Javascript 为什么';当URL中有编码字符时,后退按钮不起作用吗?

Javascript 为什么';当URL中有编码字符时,后退按钮不起作用吗?,javascript,angularjs,encoding,angular-ui-router,Javascript,Angularjs,Encoding,Angular Ui Router,我是Angular(1.5.7)的新手,我正在尝试使用ui路由器在主页和搜索结果页面之间进行路由,并更改URL以反映搜索查询。我的大多数查询都包含中文字符,导致URL中出现编码字符,如下所示: http://localhost:3000/#/search/%E4%B8%AD%E6%96%87 我的问题是: 当URL中有汉字或任何其他编码字符时,后退按钮似乎不起任何作用 如果搜索URL中没有编码字符(例如,如果我搜索了helloWorld或what's up,浏览器的(我正在使用Chrome)“后

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

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

我的问题是: 当URL中有汉字或任何其他编码字符时,后退按钮似乎不起任何作用

如果搜索URL中没有编码字符(例如,如果我搜索了
helloWorld
what's up
,浏览器的(我正在使用Chrome)“后退”按钮工作正常,将我带回主页面。我已尝试侦听
$stateChangeStart
$stateChangeSuccessuccess
事件,并且它们不会仅在存在编码字符时触发

我有一个用于主页的控制器,用于将URL更改为搜索URL,还有一个用于搜索页面的控制器,用于从服务器获取结果。相关代码(如果需要其他内容,请告诉我):

有人能解释一下为什么后退按钮不起作用吗


编辑:Safari显示常规汉字(例如,
http://localhost:3000/#/search/中文),后退按钮工作正常。因此,编码字符显然是问题所在。

您可以制作一个硬编码的快速插入器来重新创建它吗?您在控制台中看到了什么吗?使用Chrome,在搜索框中键入普通英语。然后单击后退按钮,它将带您返回主页。然后尝试键入So我喜欢中国人中文. 它不会回来。我诚实的意见是,它一定与Angular Ui Router有关,我建议无论如何都要避免使用它(它真的没有用,如果你有一个,你会过度考虑管理全球状态IMHO)。今晚我不会有时间看这个库(坦白说,我不在乎,因为我不喜欢它)。我会说我用常规路由试过了,效果很好(确保在最新的chrome上进行分支并在url中键入字符),这很好。好的,我会研究使用ng路由。很多人似乎更喜欢ui路由器,所以我就这么做了。很多人做了很多愚蠢的事情。我更新了(所以拉)如果你真的需要ui路由器(或者你的项目已经在使用它),我会用它们打开一个bug(在确保没有bug之后)。
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');
}]);