栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么要使用if(!$ scope。$$ phase)$ scope。$ apply()作为反模式?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么要使用if(!$ scope。$$ phase)$ scope。$ apply()作为反模式?

经过进一步的挖掘,我能够解决是否始终可以安全使用的问题

$scope.$apply
。简短的答案是肯定的。

长答案:

由于您的浏览器执行Javascript的方式,两个摘要调用不可能 偶然 碰撞。

我们编写的Javascript代码并非一口气运行,而是轮流执行。这些转弯中的每一个从头到尾都是不间断的,当转弯运行时,我们的浏览器中没有其他任何事情发生。(摘自http://jimhoskins.com/2012/12/17/angularjs- and-apply.html)

因此,错误“仅在已经消化的情况下”只能在一种情况下发生:当在另一个$ apply中发出$ apply时,例如:

$scope.apply(function() {  // some pre...  $scope.apply(function() { ... });});

如果* 我们在纯的非angularjs回调中使用$ scope.apply,则 不会 出现这种情况,例如。所以下面的代码是100%防弹有
没有 必要做一个

setTimeout
***
if (!$scope.$$phase) $scope.$apply()

setTimeout(function () {    $scope.$apply(function () {        $scope.message = "Timeout called!";    });}, 2000);

即使这是安全的:

$scope.$apply(function () {    setTimeout(function () {        $scope.$apply(function () { $scope.message = "Timeout called!";        });    }, 2000);});

什么是 不是 安全的(因为$超时-像所有angularjs助手-已经呼吁

$scope.$apply
你):

$timeout(function () {    $scope.$apply(function () {        $scope.message = "Timeout called!";    });}, 2000);

这也解释了为什么使用的

if (!$scope.$$phase)$scope.$apply()
是反模式。如果使用
$scope.$apply
正确的方式,则根本不需要它:例如,在纯js回调中
setTimeout

阅读http://jimhoskins.com/2012/12/17/angularjs-and-apply.html以获得更详细的说明。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636159.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号