Tôi mới bắt đầu làm việc với Angular 2.
Tôi đã tự hỏi sự khác biệt giữa các thành phần và chỉ thị trong Angular 2 là gì?
Tôi mới bắt đầu làm việc với Angular 2.
Tôi đã tự hỏi sự khác biệt giữa các thành phần và chỉ thị trong Angular 2 là gì?
Câu trả lời:
Về cơ bản, có ba loại chỉ thị trong Angular2 theo tài liệu.
Nó cũng là một loại chỉ thị với khuôn mẫu, kiểu và phần logic, là loại chỉ thị nổi tiếng nhất trong số tất cả trong Angular2. Trong loại chỉ thị này, bạn có thể sử dụng các chỉ thị khác cho dù nó là tùy chỉnh hay nội trang trong @Component
chú thích như sau:
@Component({
selector: "my-app"
directives: [custom_directive_here]
})
Sử dụng chỉ thị này theo quan điểm của bạn như:
<my-app></my-app>
Đối với chỉ thị thành phần, tôi đã tìm thấy hướng dẫn tốt nhất ở đây.
Thích *ngFor
và *ngIf
, được sử dụng để thay đổi bố cục DOM bằng cách thêm và xóa các phần tử DOM. giải thích ở đây
Chúng được sử dụng để cung cấp hành vi hoặc phong cách tùy chỉnh cho các phần tử hiện có bằng cách áp dụng một số hàm / logic. Like ngStyle
là một chỉ thị thuộc tính để cung cấp phong cách động cho các phần tử. Chúng tôi có thể tạo chỉ thị của riêng mình và sử dụng chỉ thị này làm thuộc tính của một số phần tử tùy chỉnh hoặc xác định trước, đây là ví dụ về một chỉ thị đơn giản:
Đầu tiên, chúng ta phải nhập chỉ thị từ @angular/core
import {Directive, ElementRef, Renderer, Input} from '@angular/core';
@Directive({
selector: '[Icheck]',
})
export class RadioCheckbox {
// custom logic here...
}
Chúng ta có thể sử dụng điều này trong giao diện như hình dưới đây:
<span Icheck>HEllo Directive</span>
Để biết thêm thông tin, bạn có thể đọc hướng dẫn chính thức ở đây và ở đây
Các thành phần có chế độ xem riêng (HTML và các kiểu). Chỉ thị chỉ là "hành vi" được thêm vào các phần tử và thành phần hiện có.
Component
mở rộng Directive
.
Do đó, chỉ có thể có một thành phần trên một phần tử máy chủ, nhưng có nhiều chỉ thị.
Các chỉ thị cấu trúc là các chỉ thị được áp dụng cho <template>
các phần tử và được sử dụng để thêm / bớt nội dung (đóng dấu mẫu). Các *
ứng dụng trong chỉ thị như *ngIf
khiến một <template>
thẻ được tạo ngầm định.
Để hoàn thành những gì Günter đã nói, chúng ta có thể phân biệt hai loại chỉ thị:
NgFor
và NgIf
. Những cái này được liên kết với khái niệm mẫu và phải có tiền tố là một *
. Xem phần "Mẫu và *" trong liên kết này để biết thêm chi tiết: http://victorsavkin.com/post/119943127151/angular-2-template-syntaxHy vọng nó sẽ giúp bạn, Thierry
Đây là định nghĩa thực tế.
Mọi định nghĩa khác đều sai.
Một thành phần là một chỉ thị với một khung nhìn được liên kết (tức là HTML sẽ được hiển thị). Tất cả các thành phần đều là chỉ thị, nhưng không phải tất cả các chỉ thị đều là thành phần. Có ba loại chỉ thị:
*ngIf
có thể chèn hoặc xóa phần tử DOM (hoặc thành phần góc là phần tử DOM tùy chỉnh, nhưng vẫn là phần tử 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;
}
Trong ví dụ trên, chúng ta có thể quan sát những điều sau:
AppComponent
có một mẫu với một <div>
phần tử sẽ hiển thị, chào bạn.<div>
phần tử. Điều này có nghĩa là nó sẽ thao túng hành vi của <div>
phần tử. Trong trường hợp này, nó sẽ đánh dấu văn bản và sẽ chuyển sang màu vàng.*ngIf
cũng nằm trên <div>
phần tử và sẽ xác định xem phần tử có được chèn hay không. Ý <div>
muốn được hiển thị có điều kiện tùy thuộc vào việc liệu biểu thức myBool
có thể bị ép buộc hay không true
.Angular 2 tuân theo mô hình kiến trúc thành phần / dịch vụ.
Một ứng dụng 2 góc được làm bằng các thành phần. Thành phần là sự kết hợp của một mẫu HTML và một lớp thành phần (Lớp chỉ định kiểu) kiểm soát một phần của màn hình.
Để thực hành tốt, lớp thành phần được sử dụng để liên kết dữ liệu với dạng xem tương ứng. Liên kết dữ liệu hai chiều là một tính năng tuyệt vời được cung cấp bởi khung góc.
Các thành phần có thể được sử dụng lại trên ứng dụng của bạn bằng cách sử dụng tên bộ chọn được cung cấp.
Thành phần cũng là một loại chỉ thị với một khuôn mẫu.
Hai chỉ thị khác là
Chỉ thị cấu trúc — thay đổi bố cục DOM bằng cách thêm và xóa các phần tử DOM. Ví dụ: NgFor
và NgIf
.
Các chỉ thị thuộc tính — thay đổi giao diện hoặc hành vi của một phần tử, thành phần hoặc một chỉ thị khác. Ví dụ: NgStyle
Trên thực tế, các thành phần cũng là chỉ thị, nhưng có sự khác biệt giữa chúng.
Chỉ thị thuộc tính :
Các chỉ thị thuộc tính là các lớp có thể sửa đổi hành vi hoặc giao diện của một phần tử duy nhất. Để tạo một chỉ thị thuộc tính, hãy áp dụng @Directive
cho một lớp.
import { Directive, ElementRef } from "@angular/core";
@Directive({
selector: "[custom-attr]", })
export class CustomAttrDirective {
constructor(element: ElementRef) {
element.nativeElement.classList.add("bg-success", "text-white");
}
}
Thêm thuộc tính chỉ thị template.html Tệp
<tr *ngFor="let item of getProducts(); let i = index" custom-attr>
<td>{{i + 1}}</td>
<td>{{item.name}}</td>
</tr>
Chỉ thị về cấu trúc :
Các chỉ thị cấu trúc thay đổi bố cục của tài liệu HTML bằng cách thêm và xóa các phần tử, dưới dạng vi mẫu. Các chỉ thị cấu trúc cho phép nội dung được thêm vào có điều kiện dựa trên kết quả của một biểu thức chẳng hạn như *ngIf
hoặc cho cùng một nội dung được lặp lại cho từng đối tượng trong nguồn dữ liệu chẳng hạn *ngFor
.
Bạn có thể sử dụng các chỉ thị tích hợp sẵn cho các tác vụ thông thường, nhưng việc viết các chỉ thị cấu trúc tùy chỉnh cung cấp khả năng điều chỉnh hành vi cho ứng dụng của bạn.
<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>
Thành phần :
Các thành phần là các chỉ thị mà các mẫu của riêng chúng, thay vì dựa vào nội dung được cung cấp từ nơi khác. Các thành phần có quyền truy cập vào tất cả các tính năng chỉ thị, vẫn có một phần tử chủ, vẫn có thể xác định các thuộc tính đầu vào và đầu ra, v.v. Nhưng chúng cũng xác định nội dung của riêng mình.
Có thể dễ dàng đánh giá thấp tầm quan trọng của mẫu, nhưng các chỉ thị thuộc tính và cấu trúc có những hạn chế. Các chỉ thị có thể thực hiện công việc hữu ích và mạnh mẽ, nhưng chúng không có nhiều thông tin chi tiết về các yếu tố mà chúng được áp dụng. Các chỉ thị hữu ích nhất khi chúng là các công cụ có mục đích chung, chẳng hạn như ngModel
chỉ thị, có thể được áp dụng cho bất kỳ thuộc tính mô hình dữ liệu nào và bất kỳ phần tử biểu mẫu nào, bất kể dữ liệu hoặc phần tử đang được sử dụng để làm gì.
Ngược lại, các thành phần được gắn chặt với nội dung của các mẫu của chúng. Các thành phần cung cấp dữ liệu và logic sẽ được sử dụng bởi các liên kết dữ liệu được áp dụng cho các phần tử HTML trong mẫu, cung cấp ngữ cảnh được sử dụng để đánh giá các biểu thức liên kết dữ liệu và hoạt động như chất kết dính giữa các lệnh và phần còn lại của ứng dụng. Các thành phần cũng là một công cụ hữu ích trong việc cho phép các dự án Angular lớn được chia thành các phần có thể quản lý được.
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;
}