Vscode-ng-language-service: Mendukung rangkaian opsional dalam template

Dibuat pada 18 Agu 2017  ·  70Komentar  ·  Sumber: angular/vscode-ng-language-service

di 0.1.4 di Windows 10

errors?.required disorot sebagai kesalahan

Nama harus diisi

image

bug

Komentar yang paling membantu

ini berhasil untuk saya:

Saya harap ini membantu Anda.

Semua 70 komentar

Juga terjadi di OS X 10.11.6 (El Capitan).

OS: OS X 10.11.6
Versi ekstensi: 0.1.4
Versi VS Code: 1.15.1

Saya juga mendapat masalah ini di Window 10 x64
Ekstensi versi 0.1.7
VS Code versi 1.15.1
Tolong segera perbaiki

Masalah yang sama disini.
Kesalahannya adalah: 'Kesalahan pengenal' tidak ditentukan. 'NgModel' tidak mengandung anggota seperti itu '.

OS: macOS 10.13
Ekstensi: 0.1.7
Kode VS: 1.16.1
Sudut: 4.4.3
Naskah: 2.5.2

Permasalahan yang sama! Ada solusi?

Haruskah saya mengimpornya di app.module atau di komponen saya di mana formulir itu ada?

Impor @ angular / forms yang disebutkan oleh @VladBozhinovski tidak akan menyelesaikannya.
Jenis terkait: https://github.com/angular/vscode-ng-language-service/issues/179

Ya juga tidak berhasil bagiku ...

saya punya masalah yang sama .... ada solusi?

Masalah yang Sama, apakah ada yang menemukan perbaikan?

Masalah yang sama di sini. Ada ide?

Saya juga mendapat masalah ini solusi apa pun

Sama disini.

sepertinya saya tidak sendiri :)

Begitu banyak orang mendapat masalah ini. Kalian bisa mencegahnya seperti 'email? .Error.required'

@ Duanthse03268 ini bekerja dengan menghapus kesalahan garis merah tetapi masih mendapatkan kesalahan konsol berikut, tahu mengapa?

FoodFormComponent.html:9 ERROR TypeError: Cannot read property 'minlength' of undefined at Object.eval [as updateDirectives] (FoodFormComponent.html:10) at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:13056) at checkAndUpdateView (core.es5.js:12236) at callViewAction (core.es5.js:12601) at execComponentViewsAction (core.es5.js:12533) at checkAndUpdateView (core.es5.js:12242) at callViewAction (core.es5.js:12601) at execComponentViewsAction (core.es5.js:12533) at checkAndUpdateView (core.es5.js:12242) at callWithDebugContext (core.es5.js:13456)

Pastikan Anda mengimpor
impor {FormsModule, Validators} dari '@ angular / forms';

Tidak ada solusi di utas ini yang menyelesaikan masalah. Saya membuat contoh sesederhana mungkin untuk memastikan tidak ada hal lain yang mengacaukannya:

screen shot 2018-01-08 at 22 56 53

FormModule dan Validator telah diimpor dari @ angular / forms. Saya juga menguji solusi ini oleh @ Duanthse03268 , dan tidak hanya tidak menyelesaikan masalah garis merah, itu juga menyebabkan kesalahan di konsol ketika status myField berubah (TypeError: Tidak dapat membaca properti 'diperlukan' dari null) jika digunakan tanpa '?' setelah 'error'.

Implementasi saya bekerja tanpa kesalahan di browser tetapi tetap mempertahankan garis merah (seharusnya salah) di editor (VSCode). Inti dari file yang dimaksud (semua yang lain Anda cukup 'ng baru ...' untuk mereproduksi):

app.module.ts
app.component.ts
app.component.html

Versi:

Ekstensi: 0.1.7
VSCode: 1.19.1
CLI Sudut: 1.6.3
Node: 9.2.1
OS: macOS 10.12.6
Sudut: 5.1.3
Chrome: 63.0.3239.84

Mengapa Anda tidak mencoba menggunakan 'myfield? .Error.required'.

Saya mencobanya, seperti yang saya tulis di komentar saya sebelumnya: "tidak hanya tidak menyelesaikan masalah garis merah, itu juga menyebabkan kesalahan di konsol ketika status myField berubah (TypeError: Tidak dapat membaca properti 'diperlukan' dari null ) ".

Jadi, untuk menguraikan, 'myField? .Errors.required' tidak berfungsi dan menyebabkan pesan kesalahan di atas ditampilkan di konsol. '?' harus ditulis setelah 'kesalahan' agar kode ini berfungsi di browser tanpa pesan kesalahan, namun tidak menyelesaikan masalah asli garis merah yang salah di editor.

Ini sangat menjengkelkan karena garis merah masih ada tetapi fungsinya berfungsi. Saya setuju dengan joonashak karena solusi yang disajikan tidak berfungsi dan mencoba kedua format tidak menyelesaikan masalah.

ini berhasil untuk saya:

Saya harap ini membantu Anda.

Hanya solusi :(

IntelliJ memberikan kesalahan yang sama untuk saya. Tetapi penerapannya bekerja bahkan dengan kesalahan di browser. Solusi oleh @Ahnset berhasil untuk saya. Ingin tahu apa sintaks ini dan bagaimana cara kerjanya sekarang?

Saya menemukan bahwa kesalahan ini muncul setiap kali Anda mereferensikan properti yang didefinisikan sebagai 'any'. Solusi lain adalah menggunakan anotasi properti braket, clientFirstName? .Errors ['required'] yang juga cukup bodoh.

Semakin parah, dengan pembaruan vscode terbaru, pohon file saya menjadi lebih seperti pohon natal: christmas_tree:

@adickenscheidt terima kasih atas solusinya. Bekerja dengan baik, setuju bodoh untuk saat ini.

menghapus Angular Language Service ...

@ Duanthse03268 Fungsi Anda bekerja! Terima kasih.

@tokopedia
Terima kasih solusi ini berhasil untuk saya

Berhasil. Sangat dihargai @ Duanthse03268

@ Duanthse03268 Fungsi Anda bekerja! Tapi apa sebenarnya artinya?

Ini tidak berfungsi untuk properti objek bersarang
<mat-select [(ngModel)]="object?.nestedObject?.property" name="property" #property="ngModel">
mendapatkan kesalahan penguraian supercool pada object?.object?.property

Saya menggunakan ini. Jelek tapi berhasil.
name?.errors && name?.errors['required']

email.errors ['wajib'] berhasil untuk saya

@ guignol1981 Solusi berhasil untuk saya.

Menggunakan ini berhasil untuk saya:

Hanya nama elemen yang membutuhkan? menandai. Tidak terlalu jelek

Saya memiliki masalah yang sama, tetapi tidak ada solusi yang diusulkan yang berhasil:
"formulir? .get ('nama'). error.required"
"formulir? .get ('nama'). kesalahan. ['diperlukan']"
"formulir? .get ('nama'). kesalahan?. diperlukan"

Halo, coba seperti ini.
Form.hasError ('wajib');

Itu berhasil untuk saya. Terima kasih @antonheck

ada beberapa solusi, masing-masing lebih baik untuk situasi yang berbeda, ya. Tapi bukan itu masalahnya. Saya tidak harus menulis kode saya secara berbeda, termasuk jelek, sintaxe hacky, hanya untuk menenangkan ekstensi IDE, ketika apa yang saya tulis benar dari awal.

Saya memiliki masalah dan pesan yang persis sama dengan kode serupa ini:

class MyComponent {
  form: FormGroup;
}

dengan garis seperti ini di template:

<app-errors [control]="form.controls.email">

Pesan eror :

Pengenal 'email' tidak ditentukan. '__type' tidak berisi anggota seperti itu

Masalah disebabkan oleh bidang jenis seperti (terjadi dengan AbstractControl atau yang lainnya tentu saja):

{  [key: string]: AbstractControl;  };

Saya memiliki pesan ini di Visual Studio Code (Windows) dan Angular Language Services, tetapi tidak dengan ng lint .

Solusi terbaik sejauh ini:

Coba tambahkan "!!".
Meski rumit,
Saya berhasil dengan cara ini.

image

_dari: https://github.com/angular/vscode-ng-language-service/issues/126#issuecomment -366200219_

Terima kasih tmrony, solusi terbaik setelah beberapa hari mencari ...

Sebenarnya seharusnya seperti ini, sorotan kesalahan ditampilkan karena properti "error" dari "AbstractControl" tidak memiliki properti yang ditentukan secara ketat, ini berjenis " ValidationErrors "

Jadi mengakses langsung aturan validasi menyebabkan kesalahan, dalam kasus saya mengaksesnya menggunakan notasi braket persegi memecahkan masalah.

(btw bahkan jika saya mengakses properti validasi secara langsung, saya tidak mendapatkan kesalahan kompilasi, aplikasi berfungsi dengan baik)

image

Cara lain untuk melakukannya adalah dengan menggunakan metode "hasError" dari kontrol:

   <span *ngIf="(firstName.dirty || firstName.touched) && firstName.hasError('required')">First name is required.</span>

@ boban984 Solusi berhasil ....

@adickenscheidt Solusi berhasil untuk saya! Terima kasih

"price.errors ['required']" -> Berhasil
"!! price.errors.required" -> Berhasil

"price? .errors? .required" juga harus berfungsi, karena "nama lengkap? .errors? .required" saya berfungsi.

"price.errors ['required']" -> Berhasil

Itu tidak memicu compiler 'pengenal tidak ditentukan' tetapi itu bukan solusi yang baik, karena jika objek kesalahan adalah nol, itu akan kesalahan pada konsol tentang itu.

@boban
ini adalah solusi dan penjelasan pemenang.

Saya senang menemukan metode hasError() yang dibahas di sini, ini tentu cara paling jelas untuk menunjukkan maksud dari templat bersyarat dan saya pikir saya akan mencoba menggunakannya secara eksklusif untuk selanjutnya.

Namun ... tidak ada yang menangani akar penyebab masalahnya, dan ini telah menjadi masalah dengan layanan bahasa selama kira-kira setahun sekarang. Properti errors memiliki tanda tangan indeks kunci ( [key: string]: any ) yang berarti bahwa dalam kode TS, pernyataan myControl.errors.anythingYouLike akan terkompilasi dengan rapi, tidak peduli flag mode-ketat apa yang telah Anda setel . Ini benar, karena tujuan utama memiliki tanda tangan indeks seperti itu adalah agar dapat membuat properti arbitrer pada waktu proses, dan mengaksesnya dengan notasi titik atau notasi indeks. Layanan bahasa memungkinkan indeks-notasi, itulah sebabnya control?.errors['required'] berfungsi, tetapi menandai notasi titik sebagai salah, yang merupakan kesalahan.

tiga solusi:

<span *ngIf=" username.errors['email']">must be email</span>

<span *ngIf="!!username?.errors.email">must be email</span>

<span *ngIf="username.hasError('email')">must be email</span>

Saya suka yang terbaik ketiga

@ boban984 Solusi dan penjelasan yang bagus

terima kasih, bekerja untuk saya !. 👍🏼
Saya benci melihat Kesalahan di konsol 😬

Halo, coba seperti ini.
Form.hasError ('wajib');

Ini adalah solusi paling elegan, dan benar-benar berfungsi untuk semua kasus: myForm.hasError ('required', 'myField').

Terima kasih @antonheck

Halo, coba seperti ini.
Form.hasError ('wajib');

Ini adalah solusi paling elegan, dan benar-benar berfungsi untuk semua kasus: myForm.hasError ('required', 'myField').

Ini berfungsi, tetapi solusi terbaik berdasarkan kesederhanaan ditawarkan oleh @ boban984 : "myField.hasError ('required')". :)

Saya memecahkan masalah ini dengan cara ini:

  • example.component.ts:
this.myForm = this.formBuilder.group({
      field: ['', [Validators.required, Validators.maxLength(10)]]
});

get getField() { return this.myForm.get('field'); }
  • example.component.html:
<div *ngIf="getField.errors" class="invalid-feedback">
  <div *ngIf="getField.hasError('required')"> Text required </div>
  <div *ngIf="getField.hasError('maxlength')"> Text maxLength </div>
</div>

Saya berharap dapat membantu.

Sempurna @bePericon, ini cocok untuk saya!
Terima kasih!

<input type="text" formControlName="name" class="form-control" placeholder="Full name"> <div *ngIf="submitted && f['name'].errors" class="alert alert-danger"> <div *ngIf="f['name'].errors.required">Full Name is required</div> </div>
Ini berhasil untuk saya di Angular 7

Jadi setelah dua tahun, belum diperbaiki? 🤣
terkait: https://github.com/angular/vscode-ng-language-service/issues/110

Jadi setelah dua tahun, belum diperbaiki? 🤣
terkait: # 110

Ini bukan bug, itu cara kerjanya yang seharusnya

Jika ini adalah fungsionalitas yang diharapkan, dapatkah dokumentasi diperbarui? (lihat di sini untuk satu contoh).

Ini dengan jelas menyimpulkan pengakses properti mentah ngModel dapat digunakan, di mana utas ini telah ditetapkan, mereka pasti tidak bisa.

Sebenarnya apakah sudah diperbaiki? Saya beralih ke hasError berabad-abad yang lalu, tetapi sekarang saya mencoba dan gagal mereproduksi kesalahan tersebut. myControl.errors.maxlength tidak menghasilkan warna merah berlekuk-lekuk untuk saya. Ini dengan ekstensi layanan bahasa 0.801.1, yang menggunakan v8.1.x pustaka, jika itu membantu.

@ thw0rted jadi, setelah tes ulang dengan myControl.errors.required dan .pattern dan (menyadari saya melewatkan atribut required pada tag input, yang menyebabkan kegagalan yang lebih besar), mereka tidak cukup berhasil.

Required sebagian besar berfungsi, meskipun ada beberapa kesalahan aneh yang muncul (gagal menangkapnya dan sayangnya tidak konsisten), dan pattern ketika polanya salah tetapi tampaknya tidak diperbarui saat polanya benar.

Juga, saya memiliki ekstensi bahasa vsCode yang sama, dan saya masih melihat coretan aneh.

Akan tetap menggunakan solusi .hasError untuk saat ini, dan mungkin masih akan merekomendasikan agar dokumen diperbarui, setidaknya untuk memilikinya sebagai penggunaan praktik yang lebih jelas / terbaik.

Saya menemukan bahwa kesalahan ini muncul setiap kali Anda mereferensikan properti yang didefinisikan sebagai 'any'. Solusi lain adalah menggunakan anotasi properti braket, clientFirstName? .Errors ['required'] yang juga cukup bodoh.

Ini menghapus kesalahan untuk saya. Sebagai referensi, kode berfungsi bahkan ketika kesalahan diuraikan, saya hanya tidak suka melihat garis merah di kode saya.

Ya, memasukkan kunci sebagai string menghilangkan garis merah.

Tapi Anda kehilangan fitur seperti ejaan yang benar dan pelengkapan otomatis dengan ini.

Selain menggunakan hasError (), mengakses kontrol anak formulir harus menggunakan get () daripada akses titik itu. misalnya

class MyComponent {
  form: FormGroup;
}

dengan garis seperti ini di template:

<app-errors [control]="form.controls.email">

Pesan eror :

Pengenal 'email' tidak ditentukan. '__type' tidak berisi anggota seperti itu

solusinya adalah:

<app-errors [control]="form.get('email')">

Masalah yang sama.

f.email.errors.email.required Kegagalan
!! f.email.errors.email.required Kegagalan
f.email?.errors.email.required Kegagalan
f? .email? .errors.email.required Kegagalan
f.email.error. ['required'] Gagal
f.email?.error.['required '] Gagal

Ini berhasil untuk saya:

f ['email']. error.required

Masalah ini telah dikunci secara otomatis karena tidak ada aktivitas.
Ajukan masalah baru jika Anda mengalami masalah yang serupa atau terkait.

Baca lebih lanjut tentang kebijakan penguncian percakapan otomatis kami.

_Tindakan ini telah dilakukan secara otomatis oleh bot._

Apakah halaman ini membantu?
0 / 5 - 0 peringkat