在Javascript代码里,都是按照一定顺序来执行的,当轮到一个代码片段执行的时候,浏览器就只会去执行当前的片段,不会做任何其他的事情。所以有时候一些做得不是很好的网页,当点击了某个东西之后会卡住,Javascript的工作方式就是会导致这一现象原因之一!

我们先回忆下曾经的AngularJS

什么时候用$apply()?

还是那个问题,那我们到底什么时候需要去调用apply()方法呢?情况非常少,实际上几乎我们所有的代码都包在apply()方法呢?情况非常少,实际上几乎我们所有的代码都包在scope.apply()里面,像ng−click,controller的初始化,apply()里面,像ng−click,controller的初始化,http的回调函数等。在这些情况下,我们不需要自己调用,实际上我们也不能自己调用,否则在apply()方法里面再调用apply()方法里面再调用apply()方法会抛出错误。如果我们需要在一个新的执行序列中运行代码时才真正需要用到它,而且当且仅当这个新的执行序列不是被angular JS的库的方法创建的,这个时候我们需要将代码用scope.scope.apply()包起来。下面用一个例子解释:

functionCtrl($scope) {$scope.message ="Waiting 2000ms for update";    setTimeout(function () {$scope.message ="Timeout called!";// AngularJS unaware of update to $scope}, 2000); }

上面的代码执行后页面上会显示:Waiting 2000ms for update。显然数据的更新没有被angular JS觉察到。
     接下来,我们将Javascript的代码稍作修改,用scope.scope.apply()包起来。

functionCtrl($scope) {$scope.message ="Waiting 2000ms for update"; setTimeout(function () {$scope.$apply(function () {$scope.message ="Timeout called!";});}, 2000); }

这次与之前不同的是,页面上先会显示:Waiting 2000ms for update,等待2秒后内容会被更改为:Timeout called! 。显然数据的更新被angular JS觉察到了。我们不应该这样做,而是用angular JS提供的timeout方法,这样它就会被自动用timeout方法,这样它就会被自动用apply方法包起来了。


回到最新的Angular10+,我们已经取消了$apply()这个内置方法,取而代之的是ChangeDetectorRef

Angular 各种视图的基础类,提供变更检测功能。 变更检测树会收集要检查的所有视图。 使用这些方法从树中添加或移除视图、初始化变更检测并显式地把这些视图标记为脏的,意思是它们变了、需要重新渲染。

abstract class ChangeDetectorRef {abstract markForCheck(): voidabstract detach(): voidabstract detectChanges(): voidabstract checkNoChanges(): voidabstract reattach(): void
}

这里我们只需要用 detectChanges即可实现和$apply()一样的刷新数据功能,代码如下

import { Component, OnInit, ChangeDetectorRef } from '@angular/core';@Component({selector: 'app-first',templateUrl: './first.component.html',styleUrls: ['./first.component.scss']
})
export class FirstComponent implements OnInit {constructor(public changeDetectorRef: ChangeDetectorRef) { }ngOnInit() {this.changeDetectorRef.detectChanges();//强制刷新数据渲染}
}

主要是这几处


更多ChangeDetectorRef内置方法请你点击↓

https://angular.cn/api/core/ChangeDetectorRef#detectchangeshttps://angular.cn/api/core/ChangeDetectorRef#detectchanges

Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染相关推荐

  1. Angularjs调用公共方法与共享数据

    这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...

  2. angularjs $state.go页面不刷新数据

    假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian&q ...

  3. 一文搞懂Pandas Dataframe中的apply方法

    告诉你如何在Pandas数据框架中使用apply()的方法. 扫码关注<Python学研大本营>,加入读者群,分享更多精彩 热点 在这篇文章中,我们将探索如何在DataFrame中使用ap ...

  4. Angularjs $scope 里面的$apply 方法 和 $watch 方法

    Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点: 1. Angularjs $scope 里面的$apply 方法 2. Angularjs $scope ...

  5. angular $apply方法

    $apply  方法 作用: Scope 提供$apply 方法传播 Model 的变化 $apply  方法 使用情景 : AngularJS 外部的控制器(DOM 事件.外部的回调函数如 jQue ...

  6. 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply

    $scope.$watch(watchFn , watchAction , deepWatch) 其中,watchFn是带有angular表达式或函数字符串: watchAction是一个函数或者表达 ...

  7. angular 强制更新视图_angular4强制刷新视图的方法

    angular4强制刷新视图的方法 使用angular的过程中有时会出现数据已经更新了,但是对于的视图没有更新,针对这一情况,可以是用angular提供的方法强制更新视图. 这里使用NGZone来更新 ...

  8. AngularJS 国际化 支持记录语言刷新后语言不变

    AngularJS 国际化 支持记录语言刷新后语言不变 <!DOCTYPE html> <html ng-app='app'> <head><meta cha ...

  9. JS中的call()方法和apply()方法用法总结

    1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...

最新文章

  1. Oracle数据文件转移
  2. 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
  3. 短板效应C++代码实现
  4. OpenCV无缝克隆不带GUI的模块的实例(附完整代码)
  5. 硕士毕业后去国外读法学博士_法学硕士的完整形式是什么?
  6. plugin since you are using Gradle version 4.6 or above
  7. 今天,一个收到谷歌Offer的学弟用50W年薪秀了我一脸...
  8. Fastformer:简单又好用的Transformer变体!清华MSRA开源线性复杂度的Fastformer!
  9. Leetcode每日一题:376.wiggle-subsequence(摆动的序列)
  10. html 3d坐标,HTML3D
  11. 概率论符号_考研概率论知识点总结1
  12. 拓端tecdat|Python中用Prophet模型对天气时间序列进行预测与异常检测
  13. 对于IT这两个字眼,是不是只能由学习过IT的大学生才能做呢,就由我来为大家讲解一下IT的由来!
  14. Echarts直方图
  15. c语言作业做出金山打字功能,C语言实现简易金山打字通
  16. Decorate 装饰器应用
  17. css手机端长摁背景变色,css动画,如何实现点击/长按时背景色切换的动画效果(背景从中间向两边延展)...
  18. C语言打印杨辉三角的多种方法
  19. PHP最好的语言的梗的笑话
  20. CSS3实现的4种水波特效

热门文章

  1. xpath选择器简介及如何使用
  2. OpenCV学习笔记(12)——OpenCV中的轮廓
  3. ActiveMQ—安装配置及使用
  4. 信息与计算机科学专业自荐书,信息与计算科学专业的自荐信
  5. 2022-2028年中国无人经济行业深度调研及投资前景预测报告
  6. PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换
  7. Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法
  8. Oracle 10.2.0.5.4 Patch Set Update (PSU) – Patch No: p12419392
  9. pacman 查询_pacman包管理常用命令
  10. html5 settimeout,计时器setTimeout()