Jadual Kandungan
Perbezaan 2
Rumah hujung hadapan web tutorial js Rekod masalah pembangunan sudut: Komponen tidak boleh mendapatkan atribut input @Input

Rekod masalah pembangunan sudut: Komponen tidak boleh mendapatkan atribut input @Input

Dec 09, 2022 pm 08:17 PM
angular.js

Apabila saya melaksanakan ciri di tempat kerja baru-baru ini, saya menghadapi masalah kecil: komponen Angular tidak boleh mendapatkan atribut input @Input Walaupun saya agak biasa dengan masalah ini, adalah perlu cari masalahnya. Ia adalah satu proses, jadi saya akan meringkaskan dan merekodkan isu ini.

Rekod masalah pembangunan sudut: Komponen tidak boleh mendapatkan atribut input @Input

[Cadangan tutorial berkaitan: "tutorial sudut"]

Saya perlu memberikan KomponenTetapkan atribut input@Input Nah, mudah untuk mengekod secara langsung.

Kod asal adalah seperti ini:

@Component({
	selector: 'my-menu',
	templateUrl: './main-menu.widget.html'
})
export class MyMenuWidget {
  data: any[];
  
  ...

    constructor(...) {
       this._changesSubscription = this._service.changes.pipe(
            map((data: any[]) => {
                    ...
                    return data;
            })
        ).subscribe((data: any[]) => {
            this.data = data;
        });
    }

  ...
}
Salin selepas log masuk

Tambah atribut input:

@Component({
	selector: 'my-menu',
	templateUrl: './main-menu.widget.html'
})
export class MyMenuWidget {
  @Input() isMainMenu: boolean = false;

  data: any[];
  
  ...

    constructor(...) {
        this._changesSubscription = this._service.changes.pipe(
                map((data: any[]) => {
                        ...
                        return data;
                })
        ).subscribe((data: any[]) => {
            if (this.isMainMenu) {
               this.data = data.filter((d: any) => d.ID === 233);
            }
            else {
              this.data = data;
            }
        });
    }

  ...
}
Salin selepas log masuk

Gunakannya :

<my-menu [isMainMenu]="mainMenu"></my-menu>
Salin selepas log masuk

Kemudian saya mendapati bahawa atribut input adalahMenu Utama dalam MyMenuWidget tidak pernah dapat nilainya. Saya menyemaknya dan mendapati bahawa tiada masalah sama sekali, tetapi saya tidak dapat mendapatkan nilainya.

Lihat lebih dekat, ahhhh? ? ? , langganan kepada Boleh Diperhatikan sebenarnya ditulis dalam pembina! ! ! Walaupun menulis cara ini boleh berfungsi seperti biasa dalam beberapa senario dan tidak menjejaskan fungsi kod, cara penulisan ini sangat tidak teratur, menyebabkan masalah seperti kod dalam contoh di atas. Oleh itu, semasa perkembangan normal, tidak digalakkan untuk menulis seperti ini. Jadi apakah cara yang betul untuk menulisnya?

Muat naik kod.

@Component({
	selector: &#39;my-menu&#39;,
	templateUrl: &#39;./main-menu.widget.html&#39;
})
export class MyMenuWidget {
  @Input() isMainMenu: boolean = false;

  data: any[];
  
  ...
  
  constructor(...) {
     ...
  }
  
    ngOnInit() {
        this._changesSubscription = this._service.changes.pipe(
            map((data: any[]) => {
                ...
                return data;
            })
        ).subscribe((data: any[]) => {
            if (this.isMainMenu) {
                    this.data = data.filter((d: any) => d.ID === 233);
            }
            else {
                this.data = data;
            }
        });
    }

  ...
}
Salin selepas log masuk

Maka persoalannya ialah, mengapa kod yang sama boleh berfungsi seperti biasa apabila diletakkan dalam ngOnInit? Sesetengah orang akan mengatakan bahawa kita hanya perlu meletakkannya dalam ngOnInit, tetapi tidak dalam pembina. Jadi mengapa tidak, perlu difikirkan.

Persoalannya, apakah perbezaan antara pembina Angular dan fungsi ngOnInit?

Perbezaan 1

Perbezaan dalam bahasa:

Mari kita lihat dahulu perbezaan mereka dari perspektif bahasa. ngOnInit hanyalah kaedah pada kelas komponen Strukturnya tidak berbeza daripada kaedah lain pada kelas, kecuali ia mempunyai nama tertentu.

export class MyMenuWidget implements OnInit { 
   ngOnInit() {}
}
Salin selepas log masuk

Tidak mengapa untuk melaksanakannya atau tidak saya masih boleh menulisnya seperti ini, tiada masalah langsung. Tiada penanda eksplisit perlu melaksanakan antara muka ini.

export class MyMenuWidget {
   ngOnInit() {}
}
Salin selepas log masuk

Beginilah cara menulis ES6 Bagaimana untuk menulis kod di atas dalam ES5?

Pembina adalah berbeza sama sekali daripadanya. Ia akan dipanggil semasa membuat contoh kelas.

export class MyMenuWidget {
   constructor(){}
  
   ngOnInit() {}
}
Salin selepas log masuk

Perbezaan 2

Perbezaan dalam proses permulaan komponen:

Dari perspektif permulaan komponen, perbezaan antara kedua-duanya masih sangat besar. Proses permulaan Angular mempunyai dua peringkat utama:
1 Bina pepohon komponen; 2. Lakukan pengesanan perubahan ; . Pertama Pembina baru akan dipanggil untuk membuat contoh, iaitu untuk memanggil pembina kelas komponen. Semua cangkuk kitar hayat termasuk ngOnInit kemudiannya dipanggil sebagai sebahagian daripada fasa pengesanan perubahan.

Apabila Angular memulakan pengesanan perubahan, pepohon komponen telah dibina dan pembina semua komponen dalam pepohon telah dipanggil. Selain itu, setiap nod templat komponen ditambahkan pada DOM pada ketika ini. Di sini anda mempunyai akses kepada semua data yang anda perlukan untuk memulakan komponen - pembekal DI, DOM, dsb. Mekanisme komunikasi @Input dikendalikan sebagai sebahagian daripada fasa pengesanan perubahan, jadi @Input tidak tersedia dalam pembina.

export class MyMenuWidget {
   constructor(private _elementRef: ElementRef){
     ...
   }
  
   ngOnInit() {}
}
Salin selepas log masuk
Perbezaan tiga

Perbezaan fungsi:

Untuk Angular

pembina

, ia digunakan terutamanya untuk permulaan dan menyuntik kebergantungan. Pendekatan biasa adalah untuk meletakkan logik sesedikit mungkin ke dalam pembina Kadang-kadang, walaupun anda meletakkan banyak logik, ia tidak menjejaskan fungsi. Untuk

ngOnInit

, Angular mencipta DOM komponen, menggunakan pembina untuk menyuntik semua kebergantungan yang diperlukan dan memanggil ngOnInit selepas melengkapkan permulaan Ini adalah tempat yang baik untuk melaksanakan logik permulaan komponen . Ringkasnya

, pembina

pembina itu sendiri tiada kaitan dengan Angular dan ngOnInit fungsi cangkuk ini ditakrifkan dalam Angular.

Ringkasan

Adakah sekarang jelas mengapa @Input tidak boleh mendapatkan nilai dalam pembina? Pada masa hadapan, ia akan menjadi jelas logik mana yang harus diletakkan dalam pembina dan yang harus diletakkan dalam ngOnInit.

Untuk lebih banyak pengetahuan berkaitan pengaturcaraan, sila lawati:

Pengajaran Pengaturcaraan

! !

Atas ialah kandungan terperinci Rekod masalah pembangunan sudut: Komponen tidak boleh mendapatkan atribut input @Input. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx Penjelasan terperinci tentang pengurus keadaan pembelajaran sudut NgRx May 25, 2022 am 11:01 AM

Artikel ini akan memberi anda pemahaman yang mendalam tentang pengurus negeri Angular NgRx dan memperkenalkan cara menggunakan NgRx saya harap ia akan membantu anda!

Pembelajaran sudut bercakap tentang komponen kendiri (Komponen Kendiri) Pembelajaran sudut bercakap tentang komponen kendiri (Komponen Kendiri) Dec 19, 2022 pm 07:24 PM

Artikel ini akan membawa anda untuk terus belajar sudut dan memahami secara ringkas komponen kendiri (Komponen Kendiri) dalam Angular Saya harap ia akan membantu anda!

Analisis ringkas komponen bebas dalam Angular dan lihat cara menggunakannya Analisis ringkas komponen bebas dalam Angular dan lihat cara menggunakannya Jun 23, 2022 pm 03:49 PM

Artikel ini akan membawa anda melalui komponen bebas dalam Angular, cara mencipta komponen bebas dalam Angular, dan cara mengimport modul sedia ada ke dalam komponen bebas saya harap ia akan membantu anda!

Apakah yang perlu saya lakukan jika projek itu terlalu besar? Bagaimana untuk membahagikan projek Angular dengan munasabah? Apakah yang perlu saya lakukan jika projek itu terlalu besar? Bagaimana untuk membahagikan projek Angular dengan munasabah? Jul 26, 2022 pm 07:18 PM

Projek Angular terlalu besar, bagaimana untuk membahagikannya secara munasabah? Artikel berikut akan memperkenalkan kepada anda cara membahagikan projek Angular secara munasabah. Saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara menyesuaikan format pemilih masa-masa-sudut Mari kita bincangkan tentang cara menyesuaikan format pemilih masa-masa-sudut Sep 08, 2022 pm 08:29 PM

Bagaimana untuk menyesuaikan format angular-datetime-picker? Artikel berikut membincangkan cara menyesuaikan format saya harap ia akan membantu semua orang!

Panduan langkah demi langkah untuk memahami suntikan pergantungan dalam Angular Panduan langkah demi langkah untuk memahami suntikan pergantungan dalam Angular Dec 02, 2022 pm 09:14 PM

Artikel ini akan membawa anda melalui suntikan pergantungan, memperkenalkan masalah yang diselesaikan oleh suntikan pergantungan dan kaedah penulisan asalnya, dan bercakap tentang rangka kerja suntikan pergantungan Angular saya harap ia akan membantu semua orang.

Angular's :host, :host-context, ::ng-deep selectors Angular's :host, :host-context, ::ng-deep selectors May 31, 2022 am 11:08 AM

Artikel ini akan memberi anda pemahaman yang mendalam tentang beberapa pemilih khas dalam Angular: host, :host-context, ::ng-deep Saya harap ia akan membantu anda!

Pemahaman mendalam tentang @Component decorator dalam sudut Pemahaman mendalam tentang @Component decorator dalam sudut May 27, 2022 pm 08:13 PM

Komponen ialah subkelas Arahan Ia adalah penghias yang digunakan untuk menandakan kelas sebagai komponen Sudut. Artikel berikut akan memberi anda pemahaman yang mendalam tentang @Component decorator dalam sudut saya harap ia akan membantu anda.

See all articles