Angular的ChangeDetectorRef.detectChanges()实现angularJS的$apply()方法,强制刷新数据渲染
在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()方法,强制刷新数据渲染相关推荐
- Angularjs调用公共方法与共享数据
这个问题场景是在使用ionic开发页面的过程中发现,多个页面对应的多个controller如何去调用公共方法,比如给ionic引入了toast插件,如何将这个插件的调用变成公共方法或者设置成工具类,因 ...
- angularjs $state.go页面不刷新数据
假如进入market/beian/add添加数据,保存提交后回退market/beian列表页,没有自动更新数据,必须得手动下拉刷新才会出来 $state.go("marketBeian&q ...
- 一文搞懂Pandas Dataframe中的apply方法
告诉你如何在Pandas数据框架中使用apply()的方法. 扫码关注<Python学研大本营>,加入读者群,分享更多精彩 热点 在这篇文章中,我们将探索如何在DataFrame中使用ap ...
- Angularjs $scope 里面的$apply 方法 和 $watch 方法
Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点: 1. Angularjs $scope 里面的$apply 方法 2. Angularjs $scope ...
- angular $apply方法
$apply 方法 作用: Scope 提供$apply 方法传播 Model 的变化 $apply 方法 使用情景 : AngularJS 外部的控制器(DOM 事件.外部的回调函数如 jQue ...
- 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
$scope.$watch(watchFn , watchAction , deepWatch) 其中,watchFn是带有angular表达式或函数字符串: watchAction是一个函数或者表达 ...
- angular 强制更新视图_angular4强制刷新视图的方法
angular4强制刷新视图的方法 使用angular的过程中有时会出现数据已经更新了,但是对于的视图没有更新,针对这一情况,可以是用angular提供的方法强制更新视图. 这里使用NGZone来更新 ...
- AngularJS 国际化 支持记录语言刷新后语言不变
AngularJS 国际化 支持记录语言刷新后语言不变 <!DOCTYPE html> <html ng-app='app'> <head><meta cha ...
- JS中的call()方法和apply()方法用法总结
1. 每个函数都包含两个非继承而来的方法:call()方法和apply()方法. 2. 相同点:这两个方法的作用是一样的. 都是在特定的作用域中调用函数,等于设置函数体内this对象的值,以扩充函数赖 ...
最新文章
- Oracle数据文件转移
- 【Netty】Netty 核心组件 ( ChannelOption | EventLoopGroup )
- 短板效应C++代码实现
- OpenCV无缝克隆不带GUI的模块的实例(附完整代码)
- 硕士毕业后去国外读法学博士_法学硕士的完整形式是什么?
- plugin since you are using Gradle version 4.6 or above
- 今天,一个收到谷歌Offer的学弟用50W年薪秀了我一脸...
- Fastformer:简单又好用的Transformer变体!清华MSRA开源线性复杂度的Fastformer!
- Leetcode每日一题:376.wiggle-subsequence(摆动的序列)
- html 3d坐标,HTML3D
- 概率论符号_考研概率论知识点总结1
- 拓端tecdat|Python中用Prophet模型对天气时间序列进行预测与异常检测
- 对于IT这两个字眼,是不是只能由学习过IT的大学生才能做呢,就由我来为大家讲解一下IT的由来!
- Echarts直方图
- c语言作业做出金山打字功能,C语言实现简易金山打字通
- Decorate 装饰器应用
- css手机端长摁背景变色,css动画,如何实现点击/长按时背景色切换的动画效果(背景从中间向两边延展)...
- C语言打印杨辉三角的多种方法
- PHP最好的语言的梗的笑话
- CSS3实现的4种水波特效
热门文章
- xpath选择器简介及如何使用
- OpenCV学习笔记(12)——OpenCV中的轮廓
- ActiveMQ—安装配置及使用
- 信息与计算机科学专业自荐书,信息与计算科学专业的自荐信
- 2022-2028年中国无人经济行业深度调研及投资前景预测报告
- PyTorch 安装和基本运算— Tensor 的数据类型(浮点型、整型、随机浮点型等)、基本运算(绝对值、求和、裁剪、求商、求积、求幂等)、Tensor 与 Numpy 转换
- Jetty Cross Origin Filter解决jQuery Ajax跨域访问的方法
- Oracle 10.2.0.5.4 Patch Set Update (PSU) – Patch No: p12419392
- pacman 查询_pacman包管理常用命令
- html5 settimeout,计时器setTimeout()