Dalam dokumen angular 2, * dan template , kita tahu bahwa * ngIf, * ngSwitch, * ngFor dapat diperluas menjadi tag ng-template. Pertanyaanku adalah:
Saya pikir ngIf
atau ngFor
tanpa *
juga dapat diterjemahkan dan diperluas ke tag template dengan mesin sudut.
Kode berikut
<hero-detail *ngIf="currentHero" [hero]="currentHero"></hero-detail>
akan sama dengan
<ng-template [ngIf]="currentHero">
<hero-detail [hero]="currentHero"></hero-detail>
</ng-template>
Jadi mengapa repot-repot mendesain simbol aneh asterisk ( *
) di sudut 2?
javascript
angular
angular-directive
maxisacoder
sumber
sumber
<template>
tag karena*
sintaks awalan memungkinkan kami untuk melewati tag tersebut dan fokus langsung pada elemen HTML yang kami sertakan, kecualikan, atau ulangi.Jawaban:
Sintaks asterisk adalah gula sintaks untuk sintaks template yang lebih bertele-tele yang direktif diperluas ke bawah tenda, Anda bebas menggunakan salah satu opsi ini.
Kutipan dari dokumen :
sumber
ngIf="expression"
input tidak mengikat. Jika Anda mendapatkan nilai dari DOM, itu akan menjadi string. 2. Kerangka perlu mengetahui tentangngIf
dan kasus khusus lainnya. Tentu, menentukan atribut boolean di suatu tempat di DDO akan dilakukan, tetapi Anda harus melihat kode / dokumen untuk mengetahui perbedaan antara atribut reguler dan gula arahan struktural. 3. Tanda kurung siku, aserisk, tanda kurung dan kekurangannya dengan jelas menyebarkan apa yang terjadi ke pembaca template.Angular2 menawarkan jenis arahan khusus - Arahan struktural
Arahan struktural didasarkan pada
<template>
tag.The
*
sebelum atribut pemilih menunjukkan bahwa direktif struktural harus diterapkan bukan atribut direktif normal atau properti yang mengikat. Angular2 secara internal memperluas sintaks ke<template>
tag eksplisit .Sejak final, ada juga
<ng-container>
elemen yang dapat digunakan mirip dengan<template>
tag tetapi mendukung sintaks singkat yang lebih umum. Ini misalnya diperlukan ketika dua arahan struktural harus diterapkan ke satu elemen, yang tidak didukung.<ng-container *ngIf="boolValue"> <div *ngFor="let x of y"></div> </ng-container>
sumber
Angular memperlakukan elemen template dengan cara khusus. The
*
sintaks adalah cara pintas yang memungkinkan Anda membatalkan menulis seluruh<template>
elemen. Mari saya tunjukkan cara kerjanya.menggunakan ini
*ngFor="let t of todos; let i=index"
de-sugars menjadi
template="ngFor: let t of todos; let i=index"
yang menghilangkan gula
<template ngFor [ngForOf]="todos" .... ></template>
juga arahan Struktural angular seperti ngFor, ngIf dll yang diawali dengan
*
hanya untuk membedakan dari arahan dan komponen kustom inilihat lebih lanjut di sini
https://vsavkin.com/angular-2-template-syntax-5f2ee9f13c6a#.rcffirs7a
sumber
Dari dokumen Angular :
Arahan struktural bertanggung jawab atas tata letak HTML. Mereka membentuk atau membentuk kembali struktur DOM, biasanya dengan menambahkan, menghapus, atau memanipulasi elemen.
Arahan struktural mudah dikenali. Tanda bintang (*) mendahului nama atribut direktif seperti dalam contoh ini.
<p *ngIf="userInput">{{username}}</p>
sumber
Terkadang Anda mungkin perlu
<a *ngIf="cond">
misalnya, jika hanya satu tag. terkadang Anda mungkin ingin meletakkan ngIf di sekitar beberapa tag tanpa memiliki tag nyata sebagai pembungkus yang mengarahkan Anda ke<template [ngIf]="cond">
tag. bagaimana bisa angular tahu apakah itu harus membuat pemilik direktif ngIf di hasil akhir html atau tidak? jadi ini lebih dari sekadar membuat kode lebih jelas. itu perbedaan yang diperlukan.sumber