gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

Angular中什么是變更檢測(cè)?什么情況下會(huì)引起變更檢測(cè)?

Angular中什么是變更檢測(cè)?下面本篇文章帶大家了解一下變更檢測(cè),并介紹一下什么情況下會(huì)引起變更檢測(cè),希望對(duì)大家有所幫助!

Angular中什么是變更檢測(cè)?什么情況下會(huì)引起變更檢測(cè)?

前端(vue)入門到精通課程,老師在線輔導(dǎo):聯(lián)系老師
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用

什么是變更檢測(cè)?

簡(jiǎn)單來說,變更檢測(cè)就是Angular用來檢測(cè)視圖與模型之間綁定的值是否發(fā)生了改變,當(dāng)檢測(cè)到模型中的值發(fā)生改變時(shí),則同步到視圖上,反之,當(dāng)檢測(cè)到視圖上的值發(fā)生改變時(shí),則回調(diào)對(duì)應(yīng)的綁定函數(shù)。【相關(guān)教程推薦:《angular教程》】

也就是,把模型的變化和視圖保持一致的機(jī)制,這種機(jī)制,我們稱為變更檢測(cè)。

Angular中什么是變更檢測(cè)?什么情況下會(huì)引起變更檢測(cè)?

在Angular里,開發(fā)者無需把精力放到具體的DOM更新上,關(guān)注與業(yè)務(wù)就可以了,因?yàn)檫@部分工作Angular幫我們做了。

如果不用Angular的話,用原生的JS開發(fā),我們必須手動(dòng)的去更新DOM,先來看一個(gè)例子。

<html>   <div id="dataDiv"></div>   <button id="btn">updateData</button>   <canvas id="canvas"></canvas>   <script>     let value = 'initialValue';     // initial rendering     detectChange();      function renderHTML() {       document.getElementById('dataDiv').innerText = value;     }      function detectChange() {       const currentValue = document.getElementById('dataDiv').innerText;       if (currentValue !== value) {         renderHTML();       }     }      // Example 1: update data inside button click event handler     document.getElementById('btn').addEventListener('click', () => {       // update value       value = 'button update value';       // call detectChange manually       detectChange();     });      // Example 2: HTTP Request     const xhr = new XMLHttpRequest();     xhr.addEventListener('load', function() {       // get response from server       value = this.responseText;       // call detectChange manually       detectChange();     });     xhr.open('GET', serverUrl);     xhr.send();      // Example 3: setTimeout     setTimeout(() => {       // update value inside setTimeout callback       value = 'timeout update value';       // call detectChange manually       detectChange();     }, 100);      // Example 4: Promise.then     Promise.resolve('promise resolved a value').then(v => {       // update value inside Promise thenCallback       value = v;       // call detectChange manually       detectChange();     }, 100);      // Example 5: some other asynchronous APIs     document.getElementById('canvas').toBlob(blob => {       // update value when blob data is created from the canvas       value = `value updated by canvas, size is ${blob.size}`;       // call detectChange manually       detectChange();     });   </script> </html>
登錄后復(fù)制

在上面的例子中,我們更新數(shù)據(jù)后,需要調(diào)用detectChange() 來檢查數(shù)據(jù)是否已更改。如果數(shù)據(jù)已經(jīng)更改,則渲染HTML以反應(yīng)更新的數(shù)據(jù)。當(dāng)然,在Angular中,開發(fā)者無需關(guān)心這些步驟,只需要更新你的數(shù)據(jù)就可以了,DOM會(huì)自動(dòng)更新。這就是變更檢測(cè)。

什么情況下會(huì)引起變更檢測(cè)

變更檢測(cè)的關(guān)鍵在于如何最小粒度地檢測(cè)到綁定的值是否發(fā)生了改變,那么在什么情況下會(huì)導(dǎo)致這些綁定的值發(fā)生變化呢?

結(jié)合日常開發(fā),來看幾種場(chǎng)景。

場(chǎng)景一

組件初始化

當(dāng)啟動(dòng) Angular 應(yīng)用程序時(shí),Angular 會(huì)加載引導(dǎo)組件并觸發(fā) ApplicationRef.tick() 來調(diào)用變更檢測(cè)和視圖渲染。

場(chǎng)景二

DOM和BOM事件

DOM 事件BOM事件偵聽器可以更新 Angular 組件中的數(shù)據(jù),還可以觸發(fā)變更檢測(cè),如下例所示。

@Component({   selector: "counter",   template: `     Count:{{ count }}     <br />     <button (click)="add()">Add</button>   `, }) export class CounterComponent {   count = 0;    constructor() {}    add() {     this.count = this.count + 1;   } }
登錄后復(fù)制

我們?cè)谝晥D上通過插值表達(dá)式綁定了counter中的count屬性,當(dāng)點(diǎn)擊按鈕時(shí),改變了count屬性的值,這時(shí)就導(dǎo)致了綁定的值發(fā)生了變化。

場(chǎng)景三

HTTP數(shù)據(jù)請(qǐng)求

@Component({     selector: "todos",     template: ` <li *ngFor="let item of todos">{{ item.titme }}</li> `,   })   export class TodosComponent implements OnInit {     public todos: TodoItem[] = [];      constructor(private http: HttpClient) {}      ngOnInit() {       this.http.get<TodoItem[]>("/api/todos").subscribe((todos: TodoItem[]) => {         this.todos = todos;       });     }   }
登錄后復(fù)制

我們?cè)趖odos這個(gè)組件里向服務(wù)端發(fā)送了一個(gè)Ajax請(qǐng)求,當(dāng)請(qǐng)求返回結(jié)果時(shí),會(huì)改變視圖中綁定的todos的值。

場(chǎng)景四

其他宏任務(wù)和微任務(wù)

比如 setTimeout() 或 setInterval()。你還可以在 setTimeout() macroTask 的回調(diào)函數(shù)中更新數(shù)據(jù)。

@Component({   selector: 'app-root',   template: '<div>{{data}}</div>'; }) export class AppComponent implements OnInit {   data = 'initial value';    ngOnInit() {     setTimeout(() => {       // user does not need to trigger change detection manually       this.data = 'value updated';     });   } }
登錄后復(fù)制

實(shí)際開發(fā)中可能會(huì)在某一個(gè)函數(shù)里調(diào)用定時(shí)器去改變一個(gè)綁定的值。

再比如 Promise.then() 。其他異步 API(比如 fetch)會(huì)返回 Promise 對(duì)象,因此 then() 回調(diào)函數(shù)也可以更新數(shù)據(jù)。

@Component({   selector: 'app-root',   template: '<div>{{data}}</div>'; }) export class AppComponent implements OnInit {   data = 'initial value';    ngOnInit() {     Promise.resolve(1).then(v => {       // user does not need to trigger change detection manually       this.data = v;     });   } }
登錄后復(fù)制

場(chǎng)景五

其他異步操作

除了 addEventListener(),setTimeout() 和 Promise.then() ,還有其他一些操作可以異步更新數(shù)據(jù)。比如 WebSocket.onmessage()Canvas.toBlob()

不難發(fā)現(xiàn),上述幾種情況都有一個(gè)共同點(diǎn),就是導(dǎo)致綁定值發(fā)生改變的事件都是 異步事件只要發(fā)生了異步操作,Angular就會(huì)認(rèn)為有狀態(tài)可能發(fā)生了變化,然后進(jìn)行變更檢測(cè)

思考:還有哪些是異步事件啊?

這些包含了應(yīng)用程序可能會(huì)在其中更改數(shù)據(jù)的最常見的場(chǎng)景。只要Angular檢測(cè)到數(shù)據(jù)可能已更改,就會(huì)進(jìn)行變更檢測(cè),變更檢測(cè)的結(jié)果是根據(jù)這些新數(shù)據(jù)DOM被更新。Angular 會(huì)以不同的方式檢測(cè)變化。對(duì)于組件初始化,Angular 調(diào)用顯式變更檢測(cè)。對(duì)于異步操作,Angular 會(huì)使用 Zone 在數(shù)據(jù)可能被修改的地方檢測(cè)變化,并自動(dòng)運(yùn)行變更檢測(cè)。

那如何訂閱這些異步事件呢?請(qǐng)期待下一篇哦。

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
999这里有精品| 国内精品视频一区二区三区| 黄色网zhan| 欧美激情精品久久久久久小说| 视色,视色影院,视色影库,视色网| 欧美成人一区二区在线观看| 色黄视频免费看| 爱情岛论坛成人| 欧洲精品一区二区三区久久| 久久综合在线观看| 欧美亚洲日本在线观看| 国产一区二区四区| 2021狠狠干| 超碰91在线播放| 韩国视频一区二区三区| 妺妺窝人体色www在线小说| av一区二区三区免费观看| 99九九99九九九99九他书对| 午夜精品在线免费观看| 成人黄色片视频| 九色在线视频观看| 日韩av在线第一页| 夫妻免费无码v看片| 成人免费毛片在线观看| 精品人妻人人做人人爽| 91国在线高清视频| 欧美中文字幕在线观看视频 | 日韩小视频网站| 日韩精品福利片午夜免费观看| 亚洲综合123| 中文字幕一区二区三区四区五区人| 亚洲美女爱爱视频| 午夜av中文字幕| 中文字幕在线视频一区二区| 99re99热| 4444亚洲人成无码网在线观看 | 桥本有菜av在线| 2021国产视频| av免费观看网| 小泽玛利亚视频在线观看| 在线能看的av网站| japanese在线视频| 国产日本在线播放| 欧美激情成人网| 一级片免费在线观看视频| 好吊色视频988gao在线观看| 欧美图片激情小说| 日韩一级片播放| 中国老女人av| 无码人妻h动漫| 肉色超薄丝袜脚交| 男人的天堂狠狠干| 日本在线一二三区| 免费看欧美黑人毛片| 丰满少妇在线观看| 国产资源第一页| 亚欧在线免费观看| 色呦呦网站入口| 久久久久人妻精品一区三寸| 97超碰人人看| 成人在线观看黄| 四虎精品欧美一区二区免费| 亚洲熟妇国产熟妇肥婆| 国产一伦一伦一伦| 黑人糟蹋人妻hd中文字幕| 在线看免费毛片| 国产乱子夫妻xx黑人xyx真爽| 国产亚洲视频一区| 亚洲 中文字幕 日韩 无码| 国产精品无码乱伦| a在线观看免费视频| 欧美视频在线观看视频| www.com污| 午夜两性免费视频| 337p粉嫩大胆噜噜噜鲁| 米仓穗香在线观看| 日韩欧美中文在线视频| 亚洲视频在线观看一区二区三区| 日韩 欧美 视频| 欧美在线观看黄| 日本精品一区在线| 在线观看亚洲色图| 蜜臀av免费观看| 久久久久久久中文| 好吊妞无缓冲视频观看| 99久久久精品视频| 在线观看视频黄色| 日本精品一区在线| 欧美在线a视频| 亚洲精品综合在线观看| 波多野结衣xxxx| 国产成年人视频网站| 手机在线成人免费视频| 欧美三级理论片| 99re精彩视频| av噜噜在线观看| 一级日本黄色片| 糖心vlog在线免费观看| 国产精品中文久久久久久| 精产国品一二三区| 999热精品视频| www.-级毛片线天内射视视| 在线无限看免费粉色视频| 强开小嫩苞一区二区三区网站| 91插插插影院| av影院在线播放| 青青在线免费观看| 欧美 日韩 激情| 污污网站免费观看| 国产欧美自拍视频| 黄色一级片播放| 亚洲欧美自偷自拍另类| 亚洲欧美一二三| 欧美极品欧美精品欧美| 蜜桃免费在线视频| 国产高清av片| 国产真人做爰毛片视频直播| 日韩欧美一区二| 日韩av一卡二卡三卡| 青草视频在线观看视频| 欧美aⅴ在线观看| 国产精品嫩草影院8vv8| 97超碰在线人人| 国产精品人人爽人人爽| 一道本在线观看视频| 无罩大乳的熟妇正在播放| 五月婷婷丁香综合网| 欧美少妇在线观看| 91淫黄看大片| 800av在线免费观看| caoporn超碰97| 久久精品xxx| 国产精品视频中文字幕| 成人av在线不卡| 亚洲娇小娇小娇小| 国产成人在线免费看| 成人高清dvd| 欧美特级aaa| 啊啊啊一区二区| 国产乱子伦精品视频| 日韩一级理论片| 欧美 日韩 亚洲 一区| 亚洲精品性视频| 18禁男女爽爽爽午夜网站免费| 香蕉视频在线网址| 亚洲视频一二三四| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 异国色恋浪漫潭| 日韩精品你懂的| 99热在线这里只有精品| 隔壁人妻偷人bd中字| japanese在线视频| xxww在线观看| 欧美午夜aaaaaa免费视频| 国产第一页视频| 欧美日韩在线一| 免费网站在线观看视频| 91国在线高清视频| 国内精品国产三级国产99| 午夜免费视频网站| 久久婷婷中文字幕| 免费看涩涩视频| 一级黄色特级片| 97超碰成人在线| wwww.国产| 999在线观看| 激情综合网俺也去| 婷婷激情四射五月天| 九色91popny| 三级在线视频观看| 五月婷婷之婷婷| 中国 免费 av| 免费观看亚洲视频| 日本黄大片在线观看| 美女扒开大腿让男人桶| 黄色片网址在线观看| 日韩av一二三四区| 天堂av在线网站| 日韩va在线观看| 特大黑人娇小亚洲女mp4| av无码久久久久久不卡网站| 美女日批免费视频| xxxx一级片| 日韩欧美色视频| 亚洲人成无码网站久久99热国产 | 日本www在线播放| 久草在在线视频| av免费网站观看| 亚洲综合123| 黄色国产一级视频| 特级丰满少妇一级| 97超碰人人爱| 女人扒开屁股爽桶30分钟| 超碰超碰在线观看| 女人被男人躁得好爽免费视频| 国产高清精品在线观看| 色www免费视频| 欧美日韩精品在线一区二区| 久久99爱视频| 久久综合久久网|