이번에는 Angular Component의 실무 기술에 대해 자세히 설명하겠습니다. Angular Component 사용 시 주의사항은 무엇인가요?
Web Component
Angular Component를 소개하기에 앞서 W3C Web Components
Definition
W3C는 통일된 Component 표준 방식으로 Web Component의 표준을 제안하는 것에 대해 간단히 알아보겠습니다.
각 구성 요소에는 고유한 html, css 및 js 코드가 포함되어 있습니다.
웹 구성 요소 표준에는 다음과 같은 네 가지 중요한 개념이 포함됩니다.
1.사용자 정의 요소(사용자 정의 태그): 사용자 정의 HTML 태그 및 요소를 생성할 수 있습니다.
2.HTML 템플릿(HTML 템플릿): 일부 콘텐츠를 정의하되 페이지에 로드하지 말고 JS 코드를 사용하여 초기화하세요.
3. Shadow DOM(가상 DOM): 다른 요소와 완전히 독립적인 DOM 하위 트리를 만들 수 있습니다. (HTML Imports ): HTML 문서에 다른 HTML 문서를 도입하는 방법, .
예제
hello-comComponent 정의<template> <style> h1 { color: red; } </style> <h1 id="Hello-Web-Component">Hello Web Component!</h1> </template> <script> // 指向导入文档,即本例的index.html var indexDoc = document; // 指向被导入文档,即当前文档hello.html var helloDoc = (indexDoc._currentScript || indexDoc.currentScript).ownerDocument; // 获得上面的模板 var tmpl = helloDoc.querySelector('#hello-template'); // 创建一个新元素的原型,继承自HTMLElement var HelloProto = Object.create(HTMLElement.prototype); // 设置 Shadow DOM 并将模板的内容克隆进去 HelloProto.createdCallback = function() { var root = this.createShadowRoot(); root.appendChild(indexDoc.importNode(tmpl.content, true)); }; // 注册新元素 var hello = indexDoc.registerElement('hello-component', { prototype: HelloProto }); </script>hello-comComponent 사용
nbsp;html> <meta> <meta> <meta> <meta> <title>Web Component</title> <!--导入自定义组件--> <link> <!--自定义标签--> <hello-component></hello-component>위 코드에서 볼 수 있듯이 hello.html은 표준에 의해 정의된 컴포넌트(hello-comComponent라는 이름)입니다. 고유한 구조, 스타일 및 논리가 있으며 index.html에 구성 요소 파일을 도입하여 일반 태그처럼 사용합니다.
Angular Component
Angular Component는 지시어의 일종으로 템플릿이 있는 지시어로 이해될 수 있습니다. 다른 두 가지 유형은 속성 지시문과 구조 지시문입니다. 기본 구성@Component({ selector: 'demo-component', template: 'Demo Component' }) export class DemoComponent {}
- 컴포넌트 데코레이터: Angular 컴포넌트가 되려면 각 컴포넌트 클래스를 @comComponent로 데코레이션해야 합니다.
- 컴포넌트 메타데이터: 컴포넌트 메타데이터: 선택기, 템플릿 등 다음은 각 메타데이터의 의미에 중점을 둡니다.
- 컴포넌트 클래스: 컴포넌트는 실제로는 일반적인 클래스이며 컴포넌트의 로직은 컴포넌트 클래스에서 정의되고 구현됩니다.
- 구성 요소 템플릿: 각 구성 요소는 결국 페이지에 렌더링되는 템플릿과 연결됩니다. 페이지의 DOM 요소는 이 구성 요소 인스턴스의 호스트 요소입니다.
Type | Function | |||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
AnimationEntryMetadata[] | 구성요소의 애니메이션 설정 | |||||||||||||||||||||||||||||||||||||||||
changeTectionStrategys 설정 구성 요소의 변경 감지 전략 캡슐화 캡슐화 캡슐화 구성 요소의 뷰 포장 옵션 옵션 intrycomponents | Any [] | 구성 요소에 동적으로 삽입 될 구성 요소 목록을 설정합니다. view | ||||||||||||||||||||||||||||||||||||||||
interpolation | [string, string] | 사용자 정의 구성 요소의 보간 표시, 기본값은 이중 중괄호 | ||||||||||||||||||||||||||||||||||||||||
moduleId | string | ES/ 아래 구성 요소의 모듈 ID를 설정합니다. CommonJS 사양, 템플릿 스타일을 해결하는 데 사용되는 상대 경로 | ||||||||||||||||||||||||||||||||||||||||
styleUrls | string[] | 컴포넌트에서 참조하는 외부 스타일 파일 설정 | ||||||||||||||||||||||||||||||||||||||||
styles | string[] | 사용되는 인라인 스타일 설정 구성 요소별 | ||||||||||||||||||||||||||||||||||||||||
template | string | 구성 요소의 인라인 템플릿 설정 | ||||||||||||||||||||||||||||||||||||||||
templateUrl | string | 구성 요소 템플릿이 있는 경로 설정 | ||||||||||||||||||||||||||||||||||||||||
viewProviders | Provider[] | 구성 요소 및 모든 하위 구성 요소(ContentChildren 제외) 사용 가능한 서비스 설정 | ||||||||||||||||||||||||||||||||||||||||
Name | Type | Function |
---|---|---|
exportAs | string | 템플릿에서 컴포넌트 인스턴스의 별칭을 템플릿에서 호출할 수 있도록 설정 |
host | {[key: string]: string} | 구성요소의 이벤트, 작업 및 속성 설정 |
inputs | string[] | 구성요소의 입력 속성 설정 |
outputs | string[] | 구성 요소의 출력 속성 설정 |
providers | Provider[] | 구성 요소 및 모든 하위 구성 요소(ContentChildren 포함)에 사용할 수 있는 서비스 설정(종속성 주입) |
queries | {[key: string ]: any} | 컴포넌트에 삽입해야 하는 쿼리를 설정하세요 |
selector | string | css 선택기를 설정하세요 | (컴포넌트의 사용자 정의 태그) 템플릿에서 이 구성 요소를 식별하는 데 사용됩니다
几种元数据详解
以下几种元数据的等价写法会比元数据设置更简洁易懂,所以一般推荐的是等价写法。
inputs
@Component({ selector: 'demo-component', inputs: ['param'] }) export class DemoComponent { param: any; }
等价于:
@Component({ selector: 'demo-component' }) export class DemoComponent { @Input() param: any; }
outputs
@Component({ selector: 'demo-component', outputs: ['ready'] }) export class DemoComponent { ready = new eventEmitter<false>(); }</false>
等价于:
@Component({ selector: 'demo-component' }) export class DemoComponent { @Output() ready = new eventEmitter<false>(); }</false>
host
@Component({ selector: 'demo-component', host: { '(click)': 'onClick($event.target)', // 事件 'role': 'nav', // 属性 '[class.pressed]': 'isPressed', // 类 } }) export class DemoComponent { isPressed: boolean = true; onClick(elem: HTMLElement) { console.log(elem); } }
等价于:
@Component({ selector: 'demo-component' }) export class DemoComponent { @HostBinding('attr.role') role = 'nav'; @HostBinding('class.pressed') isPressed: boolean = true; @HostListener('click', ['$event.target']) onClick(elem: HTMLElement) { console.log(elem); } }
queries - 视图查询
@Component({ selector: 'demo-component', template: ` <input> <p>Demo Component</p> `, queries: { theInput: new ViewChild('theInput') } }) export class DemoComponent { theInput: ElementRef; }
等价于:
@Component({ selector: 'demo-component', template: ` <input> <p>Demo Component</p> ` }) export class DemoComponent { @ViewChild('theInput') theInput: ElementRef; }
queries - 内容查询
<my-list> <li>{{item}}</li> </my-list>
@Directive({ selector: 'li' }) export class ListItem {}
@Component({ selector: 'my-list', template: `
等价于:
@Component({ selector: 'my-list', template: `
styleUrls、styles
styleUrls和styles允许同时指定。
优先级:模板内联样式 > styleUrls > styles。
建议:使用styleUrls引用外部样式表文件,这样代码结构相比styles更清晰、更易于管理。同理,模板推荐使用templateUrl引用模板文件。
changeDetection
ChangeDetectionStrategy.Default:组件的每次变化监测都会检查其内部的所有数据(引用对象也会深度遍历),以此得到前后的数据变化。
ChangeDetectionStrategy.OnPush:组件的变化监测只检查输入属性(即@Input修饰的变量)的值是否发生变化,当这个值为引用类型(Object,Array等)时,则只对比该值的引用。
显然,OnPush策略相比Default降低了变化监测的复杂度,很好地提升了变化监测的性能。如果组件的更新只依赖输入属性的值,那么在该组件上使用OnPush策略是一个很好的选择。
encapsulation
ViewEncapsulation.None:无 Shadow DOM,并且也无样式包装。
ViewEncapsulation.Emulated:无 Shadow DOM,但是通过Angular提供的样式包装机制来模拟组件的独立性,使得组件的样式不受外部影响,这是Angular的默认设置。
ViewEncapsulation.Native:使用原生的 Shadow DOM 特性。
当Angular使用构造函数新建组件后,就会按下面的顺序在特定时刻调用这些生命周期钩子方法:
生命周期钩子 | 调用时机 |
---|---|
ngOnChanges | 在ngOnInit之前调用,或者当组件输入数据(通过@Input装饰器显式指定的那些变量)变化时调用。 |
ngOnInit | 第一次ngOnChanges之后调用。建议此时获取数据,不要在构造函数中获取。 |
ngDoCheck | 每次变化监测发生时被调用。 |
ngAfterContentInit | 使用 |
ngAfterContentChecked | ngAfterContentInit后被调用,或者每次变化监测发生时被调用(只适用组件)。 |
ngAfterViewInit | 创建了组件的视图及其子视图之后被调用(只适用组件)。 |
ngAfterViewChecked | ngAfterViewInit,或者每次子组件变化监测时被调用(只适用组件)。 |
ngOnDestroy | 销毁指令/组件之前触发。此时应将不会被垃圾回收器自动回收的资源(比如已订阅的观察者事件、绑定过的DOM事件、通过setTimeout或setInterval设置过的计时器等等)手动销毁掉。 |
相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!
推荐阅读:
위 내용은 Angular Component의 실무 기술에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.

예, JavaScript의 엔진 코어는 C로 작성되었습니다. 1) C 언어는 효율적인 성능과 기본 제어를 제공하며, 이는 JavaScript 엔진 개발에 적합합니다. 2) V8 엔진을 예를 들어, 핵심은 C로 작성되며 C의 효율성 및 객체 지향적 특성을 결합하여 C로 작성됩니다.

JavaScript는 웹 페이지의 상호 작용과 역학을 향상시키기 때문에 현대 웹 사이트의 핵심입니다. 1) 페이지를 새로 고치지 않고 콘텐츠를 변경할 수 있습니다. 2) Domapi를 통해 웹 페이지 조작, 3) 애니메이션 및 드래그 앤 드롭과 같은 복잡한 대화식 효과를 지원합니다. 4) 성능 및 모범 사례를 최적화하여 사용자 경험을 향상시킵니다.

C 및 JavaScript는 WebAssembly를 통한 상호 운용성을 달성합니다. 1) C 코드는 WebAssembly 모듈로 컴파일되어 컴퓨팅 전력을 향상시키기 위해 JavaScript 환경에 도입됩니다. 2) 게임 개발에서 C는 물리 엔진 및 그래픽 렌더링을 처리하며 JavaScript는 게임 로직 및 사용자 인터페이스를 담당합니다.

JavaScript는 웹 사이트, 모바일 응용 프로그램, 데스크탑 응용 프로그램 및 서버 측 프로그래밍에서 널리 사용됩니다. 1) 웹 사이트 개발에서 JavaScript는 HTML 및 CSS와 함께 DOM을 운영하여 동적 효과를 달성하고 jQuery 및 React와 같은 프레임 워크를 지원합니다. 2) 반응 및 이온 성을 통해 JavaScript는 크로스 플랫폼 모바일 애플리케이션을 개발하는 데 사용됩니다. 3) 전자 프레임 워크를 사용하면 JavaScript가 데스크탑 애플리케이션을 구축 할 수 있습니다. 4) node.js는 JavaScript가 서버 측에서 실행되도록하고 동시 요청이 높은 높은 요청을 지원합니다.


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

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

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

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

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