이전 기사에서는 변경 감지가 정확히 무엇인지 소개하고, 변경 감지를 더 잘 이해하기 위해 기본 JS 예제를 사용했으며, 변경 감지가 트리거되는 시나리오를 소개했습니다. 이전 기사에서는 작업 시 일반적인 5가지 시나리오를 요약했지만 먼저 이에 대해 생각해 볼 필요가 있습니다. Angular의 변경 감지는 모든 비동기 이벤트를 지원합니까? 지원된다면 나열될 수 있나요? 일부가 지원되지 않으면 어떤 것이 지원되지 않습니까? 이러한 문제는 후속 기사에서 자세히 설명됩니다. [추천 관련 튜토리얼: "angular Tutorial"]
비동기 이벤트를 구독하는 방법
비동기 작업이 발생하는 한 Angular는 변경 감지를 수행합니다. 그렇다면 Angular는 어떻게 비동기 이벤트를 구독(인식)할까요? 즉, Angular는 비동기 이벤트가 언제 실행되는지 어떻게 알 수 있습니까? 먼저 zone.js에 대해 알아봅시다.
zone.js
zone.js는 브라우저에서 비동기 작업을 캡슐화하고 가로채기 위한 zone이라는 메커니즘을 제공하며 비동기 수명 주기 후크 및 통합된 비동기 오류 처리 메커니즘도 제공합니다.
zone.js는 setTimeout 및 HTMLElement.prototype.onclick과 같은 브라우저의 일반적인 메서드와 요소를 가로채기 위해 패치되었습니다. Angular가 시작되면 zone.js를 사용하여 여러 브라우저 API를 패치하여 비동기 이벤트를 캡처하고 이벤트 캡처 후 변경 감지를 호출합니다.
package.json다음 예:
{ "dependencies": { ... "zone.js": "~0.10.2" } }
zone.js를 간략하게 살펴볼 수 있습니다.
예를 들어 Vue2의 데이터 응답성에서는 Object.defineProperty를 사용하여 데이터 변경을 가로채는 것을 모두 알고 있지만 객체의 속성 변경만 모니터링할 수 있다는 문제가 많이 있습니다. 어레이 변경에 대해 사용자가 할 수 있는 작업은 없습니다. 배열 프로토타입에는 배열을 변경할 수 있는 7가지 메서드가 있습니다. Vue는 이러한 메서드를 어떻게 구현해야 합니까? 푸시 메서드를 예로 들면, 원래 푸시 메서드를 덮어쓰고 새 푸시 메서드를 구현해야 합니다. 새 푸시 메서드는 원래 푸시 메서드의 기능을 유지하고 종속성에 업데이트를 알려야 합니다.
zone.js의 구현은 이 아이디어와 동일합니다. setTimeout의 패치 프로세스를 시뮬레이션하기 위해 단순화된 코드를 살펴보겠습니다.
function setTimeoutPatch() { // 存储原始的setTimeout var originSetTimeout = window['setTimeout']; // 对浏览器原生方法的包裹封装 window.setTimeout = function () { return global['zone']['setTimeout'].apply(global.zone, arguments); }; // 创建包裹方法,提供给上面重写后的setTimeout使用 Zone.prototype['setTimeout'] = function (fn, delay) { // 先调用原始方法 originSetTimeout.apply(window, arguments); // 执行完原始方法后就可以做其他拦截后需要进行的操作了 ... }; }
zone.js의 기본 원리를 이해하고 있습니까?
더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 교육을 방문하세요! !
위 내용은 각도 변경 감지에서 비동기 이벤트 구독에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

本篇文章继续Angular的学习,带大家了解一下Angular中的元数据和装饰器,简单了解一下他们的用法,希望对大家有所帮助!

本篇文章带大家深入了解一下angular的状态管理器NgRx,介绍一下NgRx的使用方法,希望对大家有所帮助!

本篇文章给大家分享一个Angular实战,了解一下angualr 结合 ng-zorro 如何快速开发一个后台系统,希望对大家有所帮助!

Angular项目过大,怎么合理拆分它?下面本篇文章给大家介绍一下合理拆分Angular项目的方法,希望对大家有所帮助!

怎么自定义angular-datetime-picker格式?下面本篇文章聊聊自定义格式的方法,希望对大家有所帮助!

本篇文章带大家了解一下Angular中的独立组件,看看怎么在Angular中创建一个独立组件,怎么在独立组件中导入已有的模块,希望对大家有所帮助!

Angular Route中怎么提前获取数据?下面本篇文章给大家介绍一下从 Angular Route 中提前获取数据的方法,希望对大家有所帮助!

本篇文章带大家深入了解一下angular中的几个特殊选择器:host、:host-context、::ng-deep,希望对大家有所帮助!


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

드림위버 CS6
시각적 웹 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

뜨거운 주제



