Angular 2로 작업을 시작했습니다.
Angular 2의 구성 요소와 지시문의 차이점이 무엇인지 궁금합니다.
답변:
기본적으로 문서에 따라 Angular2에는 세 가지 유형의 지시문이 있습니다.
또한 Angular2에서 가장 유명한 디렉티브 유형 인 템플릿, 스타일, 로직 부분이 포함 된 디렉티브 유형입니다. 이 유형의 지시문에서 @Component
다음과 같이 주석 에 사용자 정의 또는 내장 지시문을 사용할 수 있습니다 .
@Component({
selector: "my-app"
directives: [custom_directive_here]
})
보기에서이 지시문을 다음과 같이 사용하십시오.
<my-app></my-app>
구성 요소 지시문의 경우 여기 에서 최고의 자습서를 찾았 습니다.
추천 *ngFor
하고 *ngIf
, DOM 요소를 추가 및 제거하여 DOM 레이아웃을 변경하기 위해 사용된다. 여기에 설명
일부 기능 / 로직을 적용하여 기존 요소에 사용자 정의 동작 또는 스타일을 부여하는 데 사용됩니다. Like ngStyle
는 요소에 동적으로 스타일을 부여하는 속성 지시문입니다. 우리는 우리 자신의 지시문을 만들고 이것을 미리 정의 된 요소 나 사용자 정의 요소의 속성으로 사용할 수 있습니다. 다음은 간단한 지시문의 예입니다.
먼저 지시문을 가져와야합니다. @angular/core
import {Directive, ElementRef, Renderer, Input} from '@angular/core';
@Directive({
selector: '[Icheck]',
})
export class RadioCheckbox {
// custom logic here...
}
아래와 같이 뷰에서 사용할 수 있습니다.
<span Icheck>HEllo Directive</span>
구성 요소에는 고유 한보기 (HTML 및 스타일)가 있습니다. 지시문은 기존 요소 및 구성 요소에 추가 된 "동작"일뿐입니다.
Component
확장 Directive
합니다.
이 때문에 호스트 요소에는 하나의 구성 요소 만있을 수 있지만 지시문은 여러 개입니다.
구조적 지시문은 <template>
요소에 적용되는 지시문이며 콘텐츠를 추가 / 제거하는 데 사용됩니다 (템플릿 스탬프). *
같은 지시어 애플리케이션은 *ngIf
원인이 <template>
태그를 암시 적으로 생성 할 수 있습니다.
Günter가 말한 것을 완료하기 위해 두 가지 종류의 지시문을 구분할 수 있습니다.
NgFor
및 NgIf
입니다. 이러한 항목은 템플릿 개념에 연결되며 *
. 자세한 내용은이 링크의 "템플릿 및 *"섹션을 참조하십시오. http://victorsavkin.com/post/119943127151/angular-2-template-syntax도움이 되었기를 바랍니다, Thierry
컴포넌트는 연관된 뷰 (예 : 렌더링 할 HTML)가있는 지시문입니다. 모든 구성 요소는 지시문이지만 모든 지시문이 구성 요소는 아닙니다. 지시문에는 세 가지 유형이 있습니다.
*ngIf
DOM 요소 (또는 사용자 정의 DOM 요소이지만 여전히 DOM 요소 인 각도 구성 요소)를 삽입하거나 제거 할 수 있습니다.import { Component, HostListener, HostBinding, Directive, ElementRef } from '@angular/core';
@Directive({
selector: '[appHighlight]'
})
export class HighlightDirective {
constructor(el: ElementRef) {
el.nativeElement.style.backgroundColor = 'yellow';
}
}
@Component({
selector: 'app-root',
template: `
<div *ngIf='myBool' appHighlight>Hi there</div>
`,
styleUrls: ['./app.component.scss'],
})
export class AppComponent {
myBool:boolean = true;
}
위의 예에서 다음을 관찰 할 수 있습니다.
AppComponent
에는 <div>
여기에 표시 되는 요소 가있는 템플릿 이 있습니다.<div>
요소에 있습니다. 즉, <div>
요소 의 동작을 조작합니다 . 이 경우 텍스트가 강조 표시되고 노란색으로 바뀝니다.*ngIf
도 <div>
요소 에 있으며 요소를 삽입할지 여부를 결정합니다. 는 <div>
조건부 표현이 있는지 여부에 따라 표시됩니다 myBool
강제 변환 할 수 있습니다 true
.Angular 2는 아키텍처의 구성 요소 / 서비스 모델을 따릅니다.
각도 2 응용 프로그램은 구성 요소로 구성됩니다. 구성 요소는 HTML 템플릿과 화면의 일부를 제어하는 구성 요소 클래스 (타입 스크립트 클래스)의 조합입니다.
모범 사례를 위해 구성 요소 클래스는 각 뷰에 대한 데이터 바인딩에 사용됩니다. 양방향 데이터 바인딩은 각도 프레임 워크에서 제공하는 훌륭한 기능입니다.
제공된 선택기 이름을 사용하여 응용 프로그램에서 구성 요소를 재사용 할 수 있습니다.
구성 요소는 템플릿이있는 일종의 지시문이기도합니다.
다른 두 가지 지침은 다음과 같습니다.
구조적 지시문-DOM 요소를 추가 및 제거하여 DOM 레이아웃을 변경합니다. 예 : NgFor
및 NgIf
.
속성 지시문-요소, 구성 요소 또는 다른 지시문의 모양이나 동작을 변경합니다. 전의: NgStyle
실제로 구성 요소도 지시문이지만 차이점이 있습니다.
속성 지시어 :
속성 지시문은 단일 요소의 동작이나 모양을 수정할 수있는 클래스입니다. 속성 지시문을 생성하려면 @Directive
을 클래스에 적용하십시오 .
import { Directive, ElementRef } from "@angular/core";
@Directive({
selector: "[custom-attr]", })
export class CustomAttrDirective {
constructor(element: ElementRef) {
element.nativeElement.classList.add("bg-success", "text-white");
}
}
지시어 속성 template.html 파일 추가
<tr *ngFor="let item of getProducts(); let i = index" custom-attr>
<td>{{i + 1}}</td>
<td>{{item.name}}</td>
</tr>
구조적 지침 :
구조적 지시문은 요소를 마이크로 템플릿으로 추가 및 제거하여 HTML 문서의 레이아웃을 변경합니다. 구조 지시문을 사용하면과 같은 식의 결과에 따라 조건부로 콘텐츠를 추가 *ngIf
할 수 있습니다 *ngFor
.
일반적인 작업에 기본 제공 지시문을 사용할 수 있지만 사용자 지정 구조 지시문을 작성하면 응용 프로그램에 맞게 동작을 조정할 수 있습니다.
<p *ngIf="true">
Expression is true and ngIf is true.
This paragraph is in the DOM.
</p>
<p *ngIf="false">
Expression is false and ngIf is false.
This paragraph is not in the DOM.
</p>
구성 요소 :
구성 요소는 다른 곳에서 제공되는 콘텐츠에 의존하지 않고 자체 템플릿을 지정하는 지시문입니다. 구성 요소는 모든 지시문 기능에 액세스 할 수 있으며 여전히 호스트 요소가 있으며 입력 및 출력 속성 등을 정의 할 수 있지만 자체 콘텐츠도 정의합니다.
템플릿의 중요성을 과소 평가하는 것은 쉽지만 속성 및 구조적 지시문에는 한계가 있습니다. 지시문은 유용하고 강력한 작업을 수행 할 수 있지만 적용되는 요소에 대한 통찰력은별로 없습니다. 지시문은 ngModel
데이터 나 요소의 용도에 관계없이 모든 데이터 모델 속성 및 모든 양식 요소에 적용 할 수있는 지시문 과 같은 범용 도구 일 때 가장 유용 합니다.
반대로 구성 요소는 템플릿의 내용과 밀접하게 연결되어 있습니다. 구성 요소는 템플릿의 HTML 요소에 적용되는 데이터 바인딩에서 사용할 데이터와 논리를 제공하며, 데이터 바인딩 식을 평가하는 데 사용되는 컨텍스트를 제공하고 지시문과 나머지 응용 프로그램 사이의 접착제 역할을합니다. 컴포넌트는 또한 큰 Angular 프로젝트를 관리 가능한 청크로 분할 할 수있는 유용한 도구입니다.
import { Component, Input } from '@angular/core';
import { Hero } from './hero';
@Component({
selector: 'app-hero-child',
template: `
<h3>{{hero.name}} says:</h3>
<p>I, {{hero.name}}, am at your service, {{masterName}}.</p>
`
})
export class HeroChildComponent {
@Input() hero: Hero;
@Input('master') masterName: string;
}