$apply没有'无法处理“后退”按钮提示的位置更改
$apply doesn't work on location changes prompted by Back button
我正在将Angular集成到遗留应用程序中。这需要从控制器之外更新路由,因为旧应用程序在Angular之外有一个LoadPage脚本,在设置浏览器的URL之前,该脚本必须执行一些函数。
为了改变Angular路线,我沿着以下路线做了一些事情:
var $injector = angular.element($("#angularApp")).injector();
var $location = $injector.get('$location');
var scope = angular.element($("#angularApp")).scope();
scope.$apply(function () {
$location.path("/newurl");
});
如果用户在应用程序中四处单击,但在使用后退按钮时无法更改模板(即使LoadPage脚本再次运行,并且我的日志表明它确实运行了上面的代码),则此操作效果良好。此外,在少数情况下,使用后退按钮后单击链接会给我带来可怕的摘要错误:
未捕获错误:已达到10$digest()迭代。正在中止!观察者在最近5次迭代中激发:[["fn:function(){vara=d.url(),b=h.$$replace;if(!l||a!=h.absUrl())l++,c.$evalAsync(function(){c.$broadcast(''"$locationChangeStart''",h.absUrl;h.$$replace=!1.回来l} ;newVal:18;oldVal:17"],["fn:函数(){vara=d.url(),b=h.$$replace;if(!l||a!=h.absUrl())l++,c.$evalAsync(function(){c.$broadcast(''"$locationChangeStart''",h.absUrl;h.$$replace=!1.回来l} ;newVal:19;oldVal:18"],["fn:函数(){vara=d.url(),b=h.$$replace;if(!l||a!=h.absUrl())l++,c.$evalAsync(function(){c.$broadcast(''"$locationChangeStart''",h.absUrl;h.$$replace=!1.回来l} ;newVal:20;oldVal:19"],["fn:函数(){vara=d.url(),b=h.$$replace;if(!l||a!=h.absUrl())l++,c.$evalAsync(function(){c.$broadcast(''"$locationChangeStart''",h.absUrl;h.$$replace=!1.回来l} ;newVal:21;oldVal:20"],["fn:函数(){vara=d.url(),b=h.$$replace;if(!l||a!=h.absUrl())l++,c.$evalAsync(function(){c.$broadcast(''"$locationChangeStart''",h.absUrl;h.$$replace=!1.回来l} ;newVal:22;oldVal:21"]]
有没有办法在Angular之外更改路线,并确保Angular正确更新ng视图?对上面的摘要错误有什么想法吗?
更新:通过关注locationChangeSuccess,我已经将问题缩小到$apply并不总是向Angular提交更改这一事实——更改它的代码肯定会运行,但Angular位置不会在范围内更新$应用程序仅在"上一步"按钮提示的位置更改时以这种方式开始失败。
基于您的更新:
范围内的角度位置未更新
我在应用程序中遇到了类似的问题,并通过从$rootScope
调用$apply
来解决。尝试:
var rootScope = $injector.get('$rootScope');
rootScope.$apply(function () {
$location.path("/newurl");
});
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- 如何在用户按下F5键或单击浏览器时显示自定义的fancybox's后退/关闭按钮
- 带有嵌套状态的Angular ui路由器和后退按钮
- 带有向下钻取的 Amchart 图表工作正常,但“后退”按钮不起作用
- 如何控制javascript中的后退按钮点击
- 更改后退按钮的指向位置
- 如何在jquery中检测浏览器的后退按钮,如果有任何对话框打开,请关闭它
- 使用Ajax的后退按钮历史记录,URL中没有散列
- 后退按钮问题
- 按下后退按钮时,谷歌音乐如何继续播放
- 如何在IE中单击后退按钮使表单值相同
- 从浏览器访问页面时执行js函数's后退按钮
- 按下后退按钮时,如何保持可滚动区域的滚动位置
- 需要在javascript或jquery中的Android或Iphone移动设备后退按钮点击事件
- 模式上的后退和前进按钮位于图像库上(可滚动浏览)
- Chrome 41:按下后退按钮时强制重新加载
- 后退按钮未出现在地铁风格应用程序中
- 移动野生动物园后退按钮
- 我们可以禁用浏览器吗;s按钮(后退/前进/刷新)