อะไรคือ - ในเทมเพลต Angular 2


155

ฉันเจอไวยากรณ์ที่ได้รับมอบหมายแปลก ๆ ภายในเทมเพลต Angular 2

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

ปรากฏว่าlet-colและlet-car="rowData"สร้างตัวแปรใหม่สองตัวcolและcarจากนั้นสามารถผูกไว้กับภายในแม่แบบ

ที่มา: https://www.primefaces.org/primeng/#/datatable/templating

let-*ไวยากรณ์มหัศจรรย์นี้เรียกว่าอะไร?

มันทำงานยังไง?

ความแตกต่างระหว่างlet-somethingและlet-something="something else"คืออะไร?


4
@NiekT นี่คือความแตกต่าง, let- * ในเชิงมุม 2 คือการกำหนดขอบเขตตัวแปรเทมเพลต
Sterling Archer

3
angular.io/docs/ts/latest/guide/…ค้นหาคำว่า "let" (มีช่องว่าง) แล้วไปที่รอบที่ 9 มีคำอธิบายที่ดีว่าตัวแปรเทมเพลตนี้ทำอะไรได้บ้าง
Sterling Archer

@SterlingArcher ขอบคุณสำหรับการแก้ไขฉันค่อนข้างใหม่สำหรับ JS และ Angular ด้วยตัวเอง
Nodon Darkeye

คำตอบ:


152

อัปเดตเชิงมุม 5

ngOutletContext ถูกเปลี่ยนชื่อเป็น ngTemplateOutletContext

ดูที่https://github.com/angular/angular/blob/master/CHANGELOG.md#500-beta5-2017-08-29

เป็นต้นฉบับ

เทมเพลต ( <template>หรือ<ng-template>ตั้งแต่ 4.x) ถูกเพิ่มเป็นมุมมองแบบฝังและรับบริบท

ด้วยlet-colคุณสมบัติบริบท$implicitทำให้พร้อมใช้งานcolภายในเทมเพลตสำหรับการโยง ด้วยlet-foo="bar"คุณสมบัติบริบทจะทำให้ใช้ได้ในฐานะbarfoo

ตัวอย่างเช่นถ้าคุณเพิ่มแม่แบบ

<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>

ดูเพิ่มเติมคำตอบนี้และViewContainerRef # createEmbeddedView

*ngForยังทำงานด้วยวิธีนี้ ไวยากรณ์ที่ยอมรับได้ทำให้สิ่งนี้ชัดเจนยิ่งขึ้น

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

ที่NgForเพิ่มแม่แบบเป็นมุมมองที่ฝังตัวเพื่อ DOM สำหรับแต่ละitemของitemsและเพิ่มค่าไม่กี่ ( item, index, odd) บริบท

ดูเพิ่มเติมที่การใช้ $ implict เพื่อส่งผ่านพารามิเตอร์หลายตัว


2
ngOutletContextขอขอบคุณสำหรับการอธิบาย นั่นคือลิงค์ที่ขาดหายไประหว่างสิ่งที่ฉันรู้และข้อมูลที่ฉันไม่สามารถหาได้ในเอกสารประกอบ
Steven Liekens

1
ฉันไม่คิดว่ามันถูกเรียกngTemplateOutletContextตามที่คุณแนะนำในการเปิดตัวมุม 5 เอกสารยังไม่ได้พูดถึงสิ่งที่ถูกคัดค้าน angular.io/api/common/NgTemplateOutlet
Jessy

5 ยังไม่ออก ไม่แน่ใจว่าสิ่งที่เอกสารแสดง การเปลี่ยนแปลงไม่มีอะไรใหม่เกี่ยวกับมันตั้งแต่นั้นมา
GünterZöchbauer

1
ขอบคุณสำหรับคำตอบนี้มีเอกสารไม่เพียงพอเกี่ยวกับสิ่งที่*ไวยากรณ์กำลังทำอยู่
dook

ไม่ควรเป็น ng-template อันที่สอง (อันที่มี ngTemplateOutlet) จริงๆ ng-template บางที ng-container น่าจะดีกว่า? ทั้งสองจะทำงานฉันเดา แต่ ng-container มีความหมายถูกต้องมากขึ้น หรือฉันผิด
Ondrej Peterka

0

ไมโครซิงก์ Angular ช่วยให้คุณกำหนดค่าคำสั่งในสตริงขนาดกะทัดรัดและเป็นมิตร ตัวแยกวิเคราะห์ microsyntax <ng-template>แปลสตริงที่เป็นคุณลักษณะบน คำหลักให้ประกาศตัวแปรตัวแปรแม่แบบที่คุณอ้างอิงภายในแม่แบบ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.