Angular.js: bagaimana saya bisa menghapus komentar yang dibuat oleh ng-if dan ng-repeat?

Dibuat pada 22 Agu 2014  ·  40Komentar  ·  Sumber: angular/angular.js

Apakah ada cara untuk mencegah Angular membuat komentar HTML "pembantu"? Sebagai contoh,

<div ng-include="myTemplate"></div>
Akan berubah menjadi sesuatu seperti

<!-- ngInclude: 'hurr-durr.html' -->
<div ng-include="myTemplate"></div>

Bagaimana cara menghentikan ini?

$compile won't fix inconvenient

Komentar yang paling membantu

komentar akan menunjukkan beberapa logika produk bahwa saya tidak ingin orang lain
melihat.

26-08-2014 7:05 GMT+08:00 Brian Ford [email protected] :

@cc17 https://github.com/cc17 mengapa Anda ingin menyingkirkan ini
elemen? Ada kemungkinan cara yang lebih baik untuk mencapai tujuan Anda.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/8722#issuecomment -53349716.

Semua 40 komentar

Saya tidak dapat memberi tahu Anda cara kerjanya secara internal, tetapi sudut membutuhkan komentar ini untuk melacak arahan yang mungkin atau mungkin tidak memiliki node DOM aktual sebagai output. Misalnya, ketika ngIf salah, tidak ada simpul DOM, tetapi kompilator sudut memerlukan komentar untuk mengetahui di posisi mana di pohon arahan itu berada. Saya yakin orang lain, misalnya @caitp dapat menjelaskan ini dengan lebih baik.

@cc17 mengapa Anda ingin menyingkirkan elemen-elemen ini? Ada kemungkinan cara yang lebih baik untuk mencapai tujuan Anda.

komentar akan menunjukkan beberapa logika produk bahwa saya tidak ingin orang lain
melihat.

26-08-2014 7:05 GMT+08:00 Brian Ford [email protected] :

@cc17 https://github.com/cc17 mengapa Anda ingin menyingkirkan ini
elemen? Ada kemungkinan cara yang lebih baik untuk mencapai tujuan Anda.


Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/8722#issuecomment -53349716.

Saya setuju dengan @cc17. Bahkan saya ingin mencapai hal yang sama.

@cc17 Saya ingin memahami ini. Angular membutuhkan node komentar ini untuk hadir karena alasan di luar topik ini.
Sekarang, kamu bilang

komentar akan menunjukkan beberapa logika produk yang saya tidak ingin orang lain lihat

Apakah Anda mengatakan itu?

  • Anda ingin node komentar tidak menampilkan informasi apa pun? Yaitu jika ini adalah node komentar kosong maka tidak apa-apa
  • Node komentar seharusnya tidak ada sama sekali

Jika Anda berbicara tentang opsi pertama, maka saya pikir itu mungkin berlebihan tetapi ada kemungkinan bahwa keikutsertaan dapat ditambahkan. Jika Anda berbicara tentang opsi kedua, maka menghapusnya akan melibatkan refactor besar tentang cara kerja transklusi arahan dan saya ragu itu akan segera terjadi.

@lgalfaso

Anda ingin node komentar tidak menampilkan informasi apa pun? Yaitu jika ini adalah node komentar kosong maka tidak apa-apa

Saya bisa mengatakan itu akan menjadi pilihan.

@lgalfaso ya opsi pertama baik-baik saja. Paparkan badan komentar penting yang tidak akan merusak perilaku arahan saat ini.

Saya datang ke sini mencari jawaban yang sama untuk masalah yang sama, tetapi untuk alasan yang berbeda (itu benar-benar mengganggu men-debug elemen DOM dengan sejuta komentar).

Mendengarkan orang lain menggambarkan ketergantungan Angular pada komentar, masuk akal. Untuk menambahkan dua sen saya pada kekhawatiran Anda menyembunyikan logika aplikasi.. Angular adalah javascript, dan seperti yang kita semua tahu, tidak ada cara untuk benar-benar mengamankan kode javascript Anda dari pengguna yang benar-benar ingin masuk dan melihat apa yang Anda dapatkan di bawah tenda. Menghapus komentar, menurut saya, hanya akan membuat orang yang mengintip tidak bisa melihat logika Anda. Itu tidak akan menghalangi penyerang, dan saya akan sangat terkejut jika penyerang akan menganggap komentar sudut Anda sebagai rute untuk menemukan kemungkinan eksposur atau kelemahan dalam kode Anda.

@cc17
"Komentar akan menunjukkan beberapa logika produk yang saya tidak ingin orang lain lihat."
? Untuk melihat komentar Anda harus membuka alat dev browser.
Di sana, SEMUA logika produk Anda (bagian ujung depan) ditampilkan! Html Anda (asli dan terkini), javascript, permintaan jaringan...

@seavor
"itu benar-benar menjengkelkan men-debug elemen DOM dengan sejuta komentar di jalan"
Saya ingin tahu halaman sudut mana (dengan waktu respons yang dapat diterima ;-)) yang dapat Anda buat menghasilkan "sejuta komentar"

+1

Saya ingin melihat opsi untuk menghapus komentar dari HTML langsung juga. Di mata saya itu jelek dan mengganggu. Tidak seperti editor teks saya, konsol pengembang tingginya 1/3 halaman, jadi komentar tambahan ini benar-benar bug.

Apakah ada detail lebih lanjut tentang mengapa sebenarnya Angular membutuhkan ini?

Jelek dan mengganggu bukanlah alasan yang sangat kuat. 😉
Komentar digunakan oleh sudut sebagai penanda untuk konten yang akan
dimasukkan di sana. Misalnya elemen ngIf yang tidak ditampilkan membutuhkan ini.
Jadi saya tidak berpikir ada kemungkinan realistis bahwa mereka akan pernah ada
DIHAPUS. Angular 2 secara teoritis harus memiliki masalah yang sama tetapi mungkin itu
berbeda di sana.
Am 10.02.2016 19:16 schrieb "Alistair G MacDonald" < [email protected]

:

+1

Saya ingin melihat opsi untuk komentar dihapus dari HTML langsung juga.
Di mata saya itu jelek dan mengganggu.

Apakah ada detail lebih lanjut tentang mengapa sebenarnya Angular membutuhkan ini?


Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/8722#issuecomment -182509708
.

Ya, ng2 memiliki komentar untuk arahan struktural juga. (Saya pikir mereka menggunakan elemen <script> , tetapi beralih ke komentar di beberapa titik, karena elemen tersebut melanggar penyeleksi CSS iirc.)

Ya mengerti @Narretz , keburukan mungkin tidak terlalu memotivasi, tetapi tidak jelas apa tradeoff yang sebenarnya. Apakah kinerjanya lebih baik dengan menggunakan node DOM yang ada? Saya tidak dapat membayangkan yang akan membuat banyak perbedaan (mungkin saya jauh dari itu). Atau apakah lebih mudah untuk beralih melalui node DOM daripada membuat larik JavaScript?

@F1LT3R , node komentar ada sebagai penanda. Mereka diperlukan untuk kasus ketika konten tidak ditampilkan (misalnya ekspresi ngIf mengevaluasi ke false, nilai ngSwitchWhen tidak cocok dengan ekspresi ngSwitch dll). Dalam hal ini, kita memerlukan placeholder di DOM untuk mengetahui di mana harus memasukkan elemen aktual nanti (misalnya ketika ekspresi ngIf dievaluasi menjadi true, dll).

Saya berharap akan ada Opsi untuk itu.

Meninggalkan komentar seperti ini, saya pikir itu bukan ide yang bagus
<!-- ngIf: transaction.status==9 && transaction.status!==8 -->

@codetrash , jika Anda memiliki ide yang lebih baik untuk diusulkan, kita semua mendengarkan :smiley:

@codetrash mengapa itu bukan ide yang bagus?

@Narretz untuk aplikasi yang cukup sensitif seperti Perbankan, Layanan pembayaran,

!-- ngIf: transaction.status==9 && transaction.status!==8 -->

dapat menyebabkan situasi yang berisiko.

@gkalpak mungkin Meninggalkan penanda terenkripsi dll. Apakah Anda punya?

@codetrash Markup ekspresi didasarkan pada kode javascript Anda yang tetap mengekspos agen pengguna. Mengaburkan kode Javascript Anda mungkin membuat lebih sulit untuk mendapatkan informasi, tetapi logika aplikasi Anda masih dapat diekstraksi. Kami tentu saja dapat mencoba untuk menghapus / mengaburkan ekspresi, tetapi menurut saya pribadi tidak ada risiko keamanan di sini dan itu adalah prioritas rendah. Jika ada yang ingin mencobanya, dipersilakan, meskipun saya tidak dapat menjamin bahwa itu akan digabungkan.

Terima kasih @gkalpak , masuk akal. Saya dapat melihat mengapa mencoba melacak perubahan DOM di JS mungkin sangat tidak praktis untuk kinerja dan pemeliharaan. Saya kira jika kita dapat mengatakan "Angular mengontrol semua hal di DOM" itu mungkin agak lebih layak, tetapi Angular cenderung menyatu dengan semua jenis perpustakaan pihak ke-3 jadi ... eh. Yang "lebih rendah dari dua kejahatan".

@codetrash
<dapat menyebabkan situasi yang berisiko>>
?? Kode ini tidak lebih dari yang dapat Anda baca di html yang dikirim dalam teks yang jelas pada tahap pertama, jadi ...

+1.

@smurugavel Tolong jangan hanya memberi +1 pada masalah ini. Masih belum ada alasan kuat terhadap komentar ini, jadi +1 saja tidak akan membuat kami menerapkan ini.

@Narretz , seperti yang @cc17 katakan, logika bisnis adalah perhatian saya, yang tidak perlu dilihat oleh orang lain yang dapat melihat kode sumber melalui alat pengembang.
melalui saran di utas ini, opsi pertama @lgalfaso tidak masalah bagi saya.
Atau, dapatkah tim sudut mengenkripsi komentar-komentar ini yang tidak dapat dibaca manusia atau menambahkan pengidentifikasi unik yang dapat dilacak oleh sudut secara internal? hanya pikiranku..

@smurugavel , seperti yang telah disebutkan di utas ini, komentar ini tidak berisi apa pun yang belum terlihat sebagai teks biasa di templat Anda. Siapa pun yang dapat melihat kode sumber Anda dapat melihat logika bisnis ini. Menyingkirkan komentar tidak akan menyelesaikan masalah Anda.

Saya harap akan ada Opsi untuk menghapus dan mendapatkan ini lagi pada penyaringan.

Meninggalkan komentar seperti ini, saya pikir itu bukan ide yang bagus

Apa lagi jika saya harus menerapkan filter dan menggunakan ul li lagi saat ini nilai li yang saya komentari akan muncul lagi.

@ManishLSN , tidak yakin apa yang Anda maksud. Tidak ada komentar li . Hanya komentar HTML biasa.
Yang mengatakan, saya percaya masuk akal untuk memiliki komentar kosong ketika debug info dinonaktifkan (isi komentar tidak melayani tujuan lain selain "kemampuan debug").

WDYT @Narretz , @lgalfaso ?

Lagi (untuk orang-orang yang mengangkat keprihatinan ini), ini tidak akan berdampak pada keamanan.

Kami membutuhkan node komentar untuk berada di DOM atau Angular tidak akan berfungsi.
Kami dapat menerapkan ide untuk menghapus teks komentar jika debugInfo dinonaktifkan. Ini adalah perubahan yang cukup sederhana. PR siapa saja?

Terima kasih !!!

@codetrash Ini ditutup dan saya pikir itu bagus untuk "menyembunyikan" logika dari inspektur. Tetapi seperti yang dinyatakan sebelumnya, HTML dan JS biasa Anda disajikan ke browser, jadi itu tidak boleh dianggap lebih aman. Ini kemungkinan bisa dilindungi jauh lebih baik dengan menggunakan sudut sisi server dengan 2.0. Bagaimanapun, satu-satunya "situasi berisiko" yang dapat saya lihat adalah jika mereka dapat mengubah nilai di inspektur dan melihat atau menyimpan data yang seharusnya tidak dapat mereka lakukan - tetapi ini dapat dihentikan dengan tidak memberikan data itu ke model di posisi pertama. Ini harus dianggap praktik yang buruk untuk mengirim data sensitif dari server jika harus disembunyikan dari pengguna - dengan kata lain, izin harus ditegakkan di sisi server, terutama untuk perbankan, layanan pembayaran, dll. Apa pun yang dikirim ke browser harus dianggap tersedia untuk umum.

Itu kasus penggunaan yang menarik Akuno. Saya dapat mengatur mengapa itu terjadi
membuat frustrasi.

Saya pikir dalam praktiknya Anda ingin memfilter elemen tertentu bahkan dalam a
skenario non-sudut. Saya membingkai, berkomentar, dll.

Lebih banyak pekerjaan untuk diterapkan, ya, tetapi saluran pipa yang lebih bersih dan lebih terkontrol
antara satu format dan format lainnya mungkin merupakan ide yang bagus.
Pada 25 Mar 2016 2:55, "akunno" [email protected] menulis:

Saya harap saya memahami ini dengan benar, karena saya berada di kapal yang sama.

Saat ini dom saya berisi banyak komentar dan gambar seperti ini:

ketika saya memanggil innerHTML pada induk elemen, saya berakhir dengan sesuatu
seperti ini:

ng-src="data:image/gif;base64,....">

Saya tidak mengetahui cara mengekstrak HTML tanpa arahan sudut.
Saya mencoba mengekstrak HTML yang dirender tanpa sudut karena saya lewat
ini ke konverter yang membuat Word doc darinya. Saat ini kata
doc berisi banyak tag gambar dengan X merah karena masih mencoba
untuk membuat gambar seolah-olah itu adalah gambar. Komennya juga masif
memperbesar ukuran tali.

Saya sudah mencoba untuk menghapus komentar, tetapi saya masih tidak dapat menemukan cara
untuk mengekstrak HTML yang diberikan tanpa arahan sudut yang mencemarinya.
Idealnya, ketika saya memanggil innerHTML saya ingin melihat jika
ngIf benar atau tidak sama sekali, jika ngIf mengembalikan salah.

Saya harap saya memahami ini dengan benar, dan ini adalah +1 untuk suatu cara
entah bagaimana mengekstrak output yang diberikan tanpa komentar/arahan.


Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung atau lihat di GitHub
https://github.com/angular/angular.js/issues/8722#issuecomment -201172995

kasus penggunaan lain: setidaknya melewatkan baris baru dengan konfigurasi untuk css: pseudo https://css-tricks.com/almanac/selectors/e/empty/

@mashpie menemukan kasus penggunaan yang sama barusan, sungguh suatu kebetulan

Angular tidak menambahkan baris baru di sekitar komentar penanda. Lihat http://plnkr.co/edit/z1rJZd7yU0TYZmDAynTh?p=preview

Anda dapat melakukannya dengan menggunakan.

app.config(['$compileProvider', function ($compileProvider) {
// nonaktifkan info debug
$compileProvider.debugInfoEnabled(false);
}]);

@RHanmant ini tidak menghapus komentar sepenuhnya, itu hanya menghapus nama variabel/properti dari komentar. Komentar itu perlu.

Saya datang ke laporan masalah ini ketika mencoba menggunakan aturan css seperti #mydiv > div:last-child dan div yang seharusnya menjadi anak terakhir bukan karena komentar angularjs sesudahnya.

Pemilih CSS mengabaikan komentar, jadi apa yang Anda jelaskan tidak dapat terjadi.

Saya berharap akan ada Opsi untuk itu.

Meninggalkan komentar seperti ini, saya pikir itu bukan ide yang bagus
<!-- ngIf: transaction.status==9 && transaction.status!==8 -->

Ya, semua orang akan tahu bahwa pengembang terlalu malas untuk menambahkan beberapa konstanta alih-alih nilai hardcoding :).
Dan ya, ada sedikit pengungkapan ( karena ada di frontend ), tetapi jika Anda membersihkan bagian belakang secara menyeluruh, tidak ada yang akan mengeksploitasi info "bocoran" ini. Jadi saya pikir kita harus fokus pada bagian itu.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat