Let- * trong các mẫu Angular 2 là gì?


154

Tôi đã bắt gặp một cú pháp gán lạ trong mẫu Angular 2.

<template let-col let-car="rowData" pTemplate="body">
    <span [style.color]="car[col.field]">{{car[col.field]}}</span>
</template>

Nó xuất hiện let-collet-car="rowData"tạo hai biến mới colcarsau đó có thể được liên kết vào bên trong khuôn mẫu.

Nguồn: https://www.primefaces.org/primeng/#/datitable/templating

let-*Cú pháp kỳ diệu này được gọi là gì?

Làm thế nào nó hoạt động?

Sự khác biệt giữa let-somethingvà là let-something="something else"gì?


4
@NiekT. điều này là khác nhau, hãy- * trong góc 2 là phạm vi biến mẫu
Sterling Archer

3
angular.io/docs/ts/latest/guide/ Từ tìm kiếm từ "let" (có khoảng trắng ) và đi đến khoảng thứ 9. Có một lời giải thích tốt về những gì biến mẫu này làm
Sterling Archer

@SterlingArcher Cảm ơn bạn đã sửa lỗi, bản thân tôi khá mới đối với JS và Angular.
Nodon Darkeye

Câu trả lời:


152

cập nhật góc 5

ngOutletContext đã được đổi tên thành ngTemplateOutletContext

Xem thêm https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

nguyên

Mẫu ( <template>hoặc <ng-template>từ 4.x) được thêm dưới dạng chế độ xem được nhúng và được thông qua một bối cảnh.

Với let-colthuộc tính bối cảnh $implicitđược tạo sẵn như coltrong khuôn mẫu cho các ràng buộc. Với let-foo="bar"các thuộc tính bối cảnh barđược thực hiện như là foo.

Ví dụ: nếu bạn thêm một mẫu

<ng-template #myTemplate let-col let-foo="bar">
  <div>{{col}}</div>
  <div>{{foo}}</div>
</ng-template>

<!-- render above template with a custom context -->
<ng-template [ngTemplateOutlet]="myTemplate"
             [ngTemplateOutletContext]="{
                                           $implicit: 'some col value',
                                           bar: 'some bar value'
                                        }"
></ng-template>

Xem thêm câu trả lời nàyViewContainerRef # createdEmbeddedView .

*ngForcũng hoạt động theo cách này. Cú pháp chính tắc làm cho điều này rõ ràng hơn

<ng-template ngFor let-item [ngForOf]="items" let-i="index" let-odd="odd">
  <div>{{item}}</div>
</ng-template>

nơi NgForthêm mẫu như xem nhúng vào DOM cho mỗi itemcủa itemsvà bổ sung thêm một vài giá trị ( item, index, odd) với bối cảnh.

Xem thêm Sử dụng $ implict để truyền nhiều tham số


2
Cảm ơn đã giải thích ngOutletContext. Đó là liên kết còn thiếu giữa những gì tôi đã biết và thông tin mà tôi không thể tìm thấy trong tài liệu.
Steven Liekens

1
Tôi không nghĩ nó được gọi là ngTemplateOutletContextnhư bạn đã đề xuất trong việc phát hành góc 5. Các tài liệu cũng không đề cập bất cứ điều gì về việc nó bị phản đối. angular.io/api/common/NgTemplateOutlet
Jessy

5 vẫn chưa được phát hành. Không chắc chắn những gì các tài liệu cho thấy. Thay đổi không có gì mới về nó kể từ đó.
Günter Zöchbauer

1
Cảm ơn bạn vì câu trả lời này, thiếu rất nhiều tài liệu về những gì *cú pháp đang làm.
dook

Không nên là mẫu ng thứ hai (mẫu có ngTemplateOutlet) thực sự là mẫu ng. Có lẽ ng-container sẽ tốt hơn? Cả hai sẽ hoạt động tôi đoán, nhưng ng-container đúng hơn về mặt ngữ nghĩa. Hoặc là tôi sai?
Ondrej Peterka

0

Angy microsyntax cho phép bạn cấu hình một lệnh trong một chuỗi nhỏ gọn, thân thiện. Trình phân tích cú pháp microsyntax dịch chuỗi đó thành các thuộc tính trên <ng-template>. Từ khóa let khai báo một biến đầu vào mẫu mà bạn tham chiếu trong mẫu.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.