Apakah mungkin untuk membuat fragmen HTML di pengontrol AngularJS dan menampilkan HTML ini dalam tampilan?
Ini berasal dari persyaratan untuk mengubah gumpalan JSON yang tidak konsisten menjadi daftar id: value
pasangan bersarang . Karena itu HTML dibuat di controller dan sekarang saya ingin menampilkannya.
Saya telah membuat properti model, tetapi tidak dapat membuat ini dalam tampilan tanpa hanya mencetak HTML .
Memperbarui
Tampaknya masalah muncul dari rendering sudut HTML yang dibuat sebagai string dalam tanda kutip. Akan berusaha mencari jalan keluar.
Pengontrol contoh:
var SomeController = function () {
this.customHtml = '<ul><li>render me please</li></ul>';
}
Contoh tampilan:
<div ng:bind="customHtml"></div>
Memberi:
<div>
"<ul><li>render me please</li></ul>"
</div>
function htmlSanitizer(html) {...
. Sudut dev memutuskan bahwa Anda harus dapat menemukan html mengikat dengan perlahan-lahan melalui semua halaman Anda elemen tersembunyi satu per satu untuk menemukan bahwa SATU TUNGGU kehilangan sepotong html. !!! sangat marah dengan asumsi seperti itu !!!Jawaban:
Untuk Angular 1.x, gunakan
ng-bind-html
dalam HTML:Pada titik ini Anda akan mendapatkan
attempting to use an unsafe value in a safe context
kesalahan sehingga Anda perlu menggunakan ngSanitize atau $ sce untuk menyelesaikannya.$ sce
Gunakan
$sce.trustAsHtml()
di pengontrol untuk mengonversi string html.ng Sanitasi
Ada 2 langkah:
termasuk sumber daya angular-sanitize.min.js, yaitu:
<script src="lib/angular/angular-sanitize.min.js"></script>
Dalam file js (controller atau biasanya app.js), sertakan ngSanitize, yaitu:
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])
sumber
ng-bind-html-unsafe
telah dihapus dan dua arahan digabungkan. Lihat: github.com/angular/angular.js/blob/master/…$sce
. Suntikkan ke pengontrol dan berikan html melaluinya.$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml(someHtmlVar);
Kalau tidak, saya terus mendapatkanattempting to use an unsafe value in a safe context
Anda juga dapat membuat filter seperti:
Lalu dalam tampilan
Catatan : Filter ini mempercayai setiap dan semua html yang diteruskan ke sana, dan bisa menyajikan kerentanan XSS jika variabel dengan input pengguna diteruskan ke sana.
sumber
ngResource
Ketergantungan BTW tidak perlu.sanitize
? Ini sangat menyesatkan karena sebenarnya tidak membersihkan apa pun. Sebaliknya harus disebuttrust
,trustSafe
atau yang serupa.rawHtml
adalah nama saya untuk filter, bukansanitize
.Angular JS menunjukkan HTML di dalam tag
Solusi yang disediakan di tautan di atas bekerja untuk saya, tidak ada opsi di utas ini yang berfungsi. Bagi siapa pun yang mencari hal yang sama dengan AngularJS versi 1.2.9
Ini salinannya:
EDIT:
Inilah pengaturannya:
File JS:
File HTML:
sumber
Untungnya, Anda tidak memerlukan filter mewah atau metode tidak aman untuk menghindari pesan kesalahan itu. Ini adalah implementasi lengkap untuk menampilkan markup HTML dengan benar dalam tampilan dengan cara yang dimaksudkan dan aman.
Modul sanitasi harus dimasukkan setelah Angular:
Kemudian, modul harus dimuat:
Ini akan memungkinkan Anda untuk memasukkan markup dalam string dari pengontrol, direktif, dll:
Akhirnya, dalam templat, harus berupa output seperti:
Yang akan menghasilkan output yang diharapkan: 42 adalah jawabannya .
sumber
<div><label>Why My Input Element Missing</label><input /></div>
... Jika Anda terkejut maka perbarui jawaban Anda .. Karena saya menguji semua 10 + solusi suara .. Solusi Anda tidak berhasil bagi saya untuk melihat tag input saya .. baik jika tidak .. saya telah menggunakan$sce.trustAsHtml(html)
Saya sudah mencoba hari ini, satu-satunya cara saya temukan adalah ini
<div ng-bind-html-unsafe="expression"></div>
sumber
ng-bind-html-unsafe
tidak lagi berfungsi.Ini cara terpendek:
Buat filter:
Dan menurut Anda:
PS Metode ini tidak mengharuskan Anda untuk memasukkan
ngSanitize
modul.sumber
$sce
dalam jawaban yang diterima tidak bekerja untuk saya dan saya tidak ingin menyertakan ketergantungan tambahan untuk sesuatu yang begitu sepele.di html
ATAU
pada pengontrol
bekerja juga dengan
$scope.comment.msg = $sce.trustAsHtml(html);
sumber
$sce
rapi tetapi tidak bisakah pengguna menambahkan breakpoint di sini dan mengembalikan kode berbahaya apa pun kethis.myCtrl.comment.msg
menggunakan debugger?ng-bind-html
menghapus.Saya menemukan bahwa menggunakan ng-sanitize tidak memungkinkan saya untuk menambahkan ng-klik di html.
Untuk mengatasi ini saya menambahkan arahan. Seperti ini:
Dan ini adalah HTML:
Semoga berhasil.
sumber
Baru saja melakukan ini menggunakan ngBindHtml dengan mengikuti sudut (v1.4) dokumen ,
Pastikan Anda memasukkan ngSanitize dalam dependensi modul. Maka itu harus bekerja dengan baik.
sumber
Solusi lain, sangat mirip dengan blrbr kecuali menggunakan atribut scoped adalah:
Lalu
Catatan Anda dapat mengganti
element.append()
denganelement.replaceWith()
sumber
ada satu solusi lagi untuk masalah ini menggunakan menciptakan atribut atau arahan baru dalam sudut.
produk-specs.html
app.js
index.html
atau
atau
https://docs.angularjs.org/guide/directive
sumber
Anda juga dapat menggunakan ng-include .
Anda dapat menggunakan "ng-show" untuk memperlihatkan sembunyikan data templat ini.
sumber
ini solusinya buat filter seperti ini
dan terapkan ini sebagai filter ke ng-bind-html like
dan terima kasih kepada Ruben Decrop
sumber
Menggunakan
dan
Untuk itu, Anda perlu memasukkan
angular-sanitize.js
, misalnya dalam file html Anda dengansumber
Berikut adalah
bind-as-html
arahan sederhana (dan tidak aman) , tanpa perlungSanitize
:Perhatikan bahwa ini akan terbuka untuk masalah keamanan, jika mengikat konten yang tidak dipercaya.
Gunakan seperti ini:
sumber
Contoh kerja dengan pipa untuk menampilkan html di templat dengan Angular 4.
1.Crated Pipe escape-html.pipe.ts
`
`2. Daftarkan pipa ke app.module.ts
Gunakan di template Anda
getDivHtml() { //can return html as per requirement}
Silakan tambahkan implementasi yang sesuai untuk getDivHtml di file component.ts terkait.
sumber
Cukup gunakan sederhana
[innerHTML]
, seperti di bawah ini:Sebelum Anda perlu menggunakan
ng-bind-html
...sumber
Dalam Angular 7 + ionic 4, konten Html dapat ditampilkan dengan menggunakan "[innerHTML]":
Saya harap, ini juga akan membantu Anda. Terima kasih.
sumber