Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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 $apply不';无法处理“后退”按钮提示的位置更改_Javascript_Angularjs - Fatal编程技术网

Javascript $apply不';无法处理“后退”按钮提示的位置更改

Javascript $apply不';无法处理“后退”按钮提示的位置更改,javascript,angularjs,Javascript,Angularjs,我正在将Angular集成到一个遗留应用程序中。这需要从控制器外部更新路由,因为旧应用程序在Angular外部有一个LoadPage脚本,必须在设置浏览器URL之前执行一些功能 要更改角度路线,我将沿以下路线执行操作: var $injector = angular.element($("#angularApp")).injector(); var $location = $injector.get('$location'); var scope = angular.element($("#an

我正在将Angular集成到一个遗留应用程序中。这需要从控制器外部更新路由,因为旧应用程序在Angular外部有一个LoadPage脚本,必须在设置浏览器URL之前执行一些功能

要更改角度路线,我将沿以下路线执行操作:

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(){var a=d.url(),b=h.absUrl();如果(!l|a!=h.absUrl())l++,c.evalAsync(函数(){c.broadcast(\“$locationChangeStart\”,h.absUrl(),a).defaultPrevented?h.absUrl$parse(a):(d.url(h.absUrl(),b),i(a));h.$$replace=!1;返回 l} ;newVal:18;oldVal:17“],[“fn:function(){var a=d.url(),b=h.absUrl();如果(!l|a!=h.absUrl())l++,c.evalAsync(函数(){c.broadcast(\“$locationChangeStart\”,h.absUrl(),a).defaultPrevented?h.absUrl$parse(a):(d.url(h.absUrl(),b),i(a));h.$$replace=!1;返回 l} ;newVal:19;oldVal:18“],[“fn:function(){var a=d.url(),b=h.absUrl();如果(!l|a!=h.absUrl())l++,c.evalAsync(函数(){c.broadcast(\“$locationChangeStart\”,h.absUrl(),a).defaultPrevented?h.absUrl$parse(a):(d.url(h.absUrl(),b),i(a));h.$$replace=!1;返回 l} ;newVal:20;oldVal:19“],[“fn:function(){var a=d.url(),b=h.absUrl();如果(!l|a!=h.absUrl())l++,c.evalAsync(函数(){c.broadcast(\“$locationChangeStart\”,h.absUrl(),a).defaultPrevented?h.absUrl$parse(a):(d.url(h.absUrl(),b),i(a));h.$$replace=!1;返回 l} ;newVal:21;oldVal:20“],[“fn:function(){var a=d.url(),b=h.absUrl();如果(!l|a!=h.absUrl())l++,c.evalAsync(函数(){c.broadcast(\“$locationChangeStart\”,h.absUrl(),a).defaultPrevented?h.absUrl$parse(a):(d.url(h.absUrl(),b),i(a));h.$$replace=!1;返回 l} ;新值:22;旧值:21”]]

是否有办法在Angular之外更改路线,并确保Angular正确更新ng视图?对上面的摘要错误有什么想法吗

更新:通过观察locationChangeSuccess,我将问题缩小到$apply并不总是将更改提交给Angular——更改它的代码肯定会运行,但Angular位置在作用域中不会更新$仅当“后退”按钮提示位置更改时,应用才会以这种方式开始失败。

根据您的更新:

。。。范围中的角度位置未更新

我在应用程序中遇到了类似的问题,通过从
$rootScope
调用
$apply
解决了这个问题。尝试:

var rootScope = $injector.get('$rootScope');
rootScope.$apply(function () {
    $location.path("/newurl");
});

也许使用Angular.js的非精简版本可以帮助您调试…我试过了,但没有说更多。只是一系列的[“fn:$locationWatch;newVal:25;oldVal:24”],[“fn:$locationWatch;newVal:26;oldVal:25”]等等。Angular似乎无法建立稳定性,但我不确定为什么只有在使用了“后退”按钮(并且只有在用户导航到刚刚退出的页面时)后才会发生这种情况。我希望有人知道前面有一些“陷阱”。同样的问题——除了后面的按钮外,角度路径完全改变了。我要去弄清楚Angular到底是如何处理这个事件的,因为我们的遗留代码也会处理它(使用onhashchange),我认为两者之间有一些奇怪的事情发生。@JenniferGilbert看看你是否可以创建一个plunker来复制这个问题,我可以尝试进一步帮助你。