2017-03-23 24 views
37

Tôi gặp một cú pháp gán lạ bên trong mẫu Angular 2.Điều gì sẽ cho phép trong các mẫu Angular 2?

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

Dường như let-collet-car="rowData" tạo ra hai biến mới colcar mà sau đó có thể bị ràng buộc vào bên trong mẫu.

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

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

Tính năng này hoạt động như thế nào?

Sự khác nhau giữa let-somethinglet-something="something else" là gì?

Mã trên có thể được viết lại bằng cách sử dụng <ng-container> thay vì <template> mà không thay đổi cấu trúc DOM cuối cùng không?

+0

cho phép bạn khai báo các biến giới hạn phạm vi cho khối, câu lệnh hoặc biểu thức mà nó được sử dụng. Điều này không giống như từ khóa var, định nghĩa một biến trên toàn cầu, hoặc cục bộ cho toàn bộ một hàm bất kể phạm vi khối. Được trích dẫn từ liên kết này: https: //developer.mozilla.org/vi/tài liệu/Web/JavaScript/Tham chiếu/Báo cáo/cho phép –

+1

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

+1

https://angular.io/docs/ts/latest/guide/structural-directives.html#!#template-input-variable tìm kiếm từ "let" (với một không gian) và đi đến khoảng thứ 9. Có một lời giải thích tốt về biến mẫu này là gì –

Trả lời

35

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

gốc

Templates (<template>, hoặc <ng-template> kể từ 4.x) được thêm dưới dạng chế độ xem được nhúng và nhận được thông qua ngữ cảnh.

Với let-col thuộc tính ngữ cảnh $implicit được cung cấp dưới dạng col trong mẫu cho các ràng buộc. Với let-foo="bar" thuộc tính ngữ cảnh bar được cung cấp dưới dạng 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" 
      [ngOutletContext]="{ 
            $implicit: 'some col value', 
            bar: 'some bar value' 
           }" 
></ng-template> 

Xem thêm this answerViewContainerRef#createEmbeddedView.

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

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

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

Xem thêm Using $implict to pass multiple parameters

+0

Cảm ơn bạn đã giải thích 'ngOutletContext'. Đó là mối liên hệ 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. –

+0

Tôi không nghĩ rằng nó được gọi là 'ngTemplateOutletContext' như bạn đã đề xuất trong việc phát hành của góc 5. Các tài liệu cũng không đề cập đến bất cứ điều gì về nó không được chấp nhận. https://angular.io/api/common/NgTemplateOutlet – Jessycormier

+0

5 chưa được phát hành. Không chắc chắn tài liệu hiển thị. Các changelog không có bất cứ điều gì mới về nó kể từ đó. –

Các vấn đề liên quan