Javascript $locationChangeSuccess未在IE10和IE11中启动浏览器返回操作

Javascript $locationChangeSuccess未在IE10和IE11中启动浏览器返回操作,javascript,angularjs,coffeescript,internet-explorer-10,internet-explorer-11,Javascript,Angularjs,Coffeescript,Internet Explorer 10,Internet Explorer 11,在我正在处理的项目中,视图中的许多复选框用于从搜索结果集中应用和删除一组过滤器。这些复选框的值将写入查询字符串,以便于通过导航预加载筛选器状态。为了简化,我将假装只有一个复选框,忽略应该有一些过滤的事实 为确保查询字符串中的状态正确,选中复选框时,将调用一个函数,将复选框的值写入查询字符串。复选框的值绑定到名为“checkBoxValue”的范围属性 除此之外,当查询字符串更新时,我调用一个函数,该函数从查询字符串获取当前值,并将其写入$scope.checkBoxValue。它确保我的控制

在我正在处理的项目中,视图中的许多复选框用于从搜索结果集中应用和删除一组过滤器。这些复选框的值将写入查询字符串,以便于通过导航预加载筛选器状态。为了简化,我将假装只有一个复选框,忽略应该有一些过滤的事实

为确保查询字符串中的状态正确,选中复选框时,将调用一个函数,将复选框的值写入查询字符串。复选框的值绑定到名为“checkBoxValue”的范围属性


除此之外,当查询字符串更新时,我调用一个函数,该函数从查询字符串获取当前值,并将其写入$scope.checkBoxValue。它确保我的控制器中的值和查询字符串中的值彼此同步,而不管值的更改来自何处。这一切的简化版本如下所示:

app=angular.module'myApp',[]
app.controller'MyCtrl',['$scope','$location',($scope,$location)->
$scope.GetValueFromQueryString=()->
queryStringValue=$location.search()['checkbox']或false
#确保我写的是真/假,而不是“真”/“假”
$scope.checkBoxValue=queryStringValue为true或queryStringValue为'true'
$scope.WriteValueToQueryString=()->
$location.search'checkbox',$scope.checkBoxValue.toString()
“$locationChangeSuccess”上的$scope.$,()->
$scope.GetValueFromQueryString()
]
当我选中复选框时,它会更改checkBoxValue,更新查询字符串中的值,一切都很好。如果我在浏览器中按“后退”按钮,它会注意到位置已更改,并更新其值以匹配查询字符串(有效地撤消了我的上一个),一切都很好

…除非我使用的是Internet Explorer 10或11

在IE10和IE11中,浏览器的“后退”操作不会显示为执行任何操作。实际上,它正在执行浏览器的“后退”操作(当我看到它时,查询字符串在浏览器的“后退”操作后应该是这样读的)。问题似乎是$locationChangeSuccess从未启动。因此,该值永远不会从查询字符串中检索,这意味着我的复选框的实际值永远不会从查询字符串中更新。最后,如果你按下“后退”键的次数足够多,它只会引导你进入我自己的页面之前的任何实际页面,复选框仍处于你开始按下“后退”键之前的状态

有趣的是?IE8和IE9对此没有问题

链接到代码笔(在IE10或IE11中尝试)

谢谢你这么长时间阅读我的闲话。如果您能在这个问题上给予任何帮助,我们将不胜感激

我尝试过的事情:

其行为似乎与上面列出的相同。没有骰子。

可能重复
$scope.$watch ( () -> $location.search() ), () ->
    $scope.GetValueFromQueryString()