찾다
웹 프론트엔드JS 튜토리얼각도 변경 감지에서 비동기 이벤트 구독에 대한 간략한 분석
각도 변경 감지에서 비동기 이벤트 구독에 대한 간략한 분석Dec 14, 2022 pm 08:08 PM
angular변화 감지비동기 이벤트 구독

각도 변경 감지에서 비동기 이벤트 구독에 대한 간략한 분석

이전 기사에서는 변경 감지가 정확히 무엇인지 소개하고, 변경 감지를 더 잘 이해하기 위해 기본 JS 예제를 사용했으며, 변경 감지가 트리거되는 시나리오를 소개했습니다. 이전 기사에서는 작업 시 일반적인 5가지 시나리오를 요약했지만 먼저 이에 대해 생각해 볼 필요가 있습니다. Angular의 변경 감지는 모든 비동기 이벤트를 지원합니까? 지원된다면 나열될 수 있나요? 일부가 지원되지 않으면 어떤 것이 지원되지 않습니까? 이러한 문제는 후속 기사에서 자세히 설명됩니다. [추천 관련 튜토리얼: "angular Tutorial"]

비동기 이벤트를 구독하는 방법

비동기 작업이 발생하는 한 Angular는 변경 감지를 수행합니다. 그렇다면 Angular는 어떻게 비동기 이벤트를 구독(인식)할까요? 즉, Angular는 비동기 이벤트가 언제 실행되는지 어떻게 알 수 있습니까? 먼저 zone.js에 대해 알아봅시다.

zone.js

zone.js는 브라우저에서 비동기 작업을 캡슐화하고 가로채기 위한 zone이라는 메커니즘을 제공하며 비동기 수명 주기 후크 및 통합된 비동기 오류 처리 메커니즘도 제공합니다.

zone.js는 setTimeoutHTMLElement.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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 掘金社区에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
聊聊Angular中的元数据(Metadata)和装饰器(Decorator)聊聊Angular中的元数据(Metadata)和装饰器(Decorator)Feb 28, 2022 am 11:10 AM

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

angular学习之详解状态管理器NgRxangular学习之详解状态管理器NgRxMay 25, 2022 am 11:01 AM

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

Angular + NG-ZORRO快速开发一个后台系统Angular + NG-ZORRO快速开发一个后台系统Apr 21, 2022 am 10:45 AM

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

项目过大怎么办?如何合理拆分Angular项目?项目过大怎么办?如何合理拆分Angular项目?Jul 26, 2022 pm 07:18 PM

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

聊聊自定义angular-datetime-picker格式的方法聊聊自定义angular-datetime-picker格式的方法Sep 08, 2022 pm 08:29 PM

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

浅析Angular中的独立组件,看看怎么使用浅析Angular中的独立组件,看看怎么使用Jun 23, 2022 pm 03:49 PM

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

聊聊Angular Route中怎么提前获取数据聊聊Angular Route中怎么提前获取数据Jul 13, 2022 pm 08:00 PM

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

Angular的:host、:host-context、::ng-deep选择器Angular的:host、:host-context、::ng-deep选择器May 31, 2022 am 11:08 AM

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

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

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

뜨거운 도구

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

맨티스BT

맨티스BT

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

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

DVWA

DVWA

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