Setelah membaca tutorial AngularJS langkah-9 saya telah membuat filter AngularJS saya sendiri, yang seharusnya mengubah data boolean menjadi html.
Ini kode filter saya:
angular.module('phonecatFilters', []).filter('iconify', function () { // My custom filter
return function (input) {
return input ? '<i class="icon-ok"></i>' : '<i class="icon-remove"></i>';
}
});
Ini kode HTML saya:
<dt>Infrared</dt>
<dd>{{phone.connectivity.infrared | iconify }}"></dd>
Masalahnya adalah borwser menampilkan nilai yang dikembalikan secara harfiah sebagai:
<i class="icon-ok"></i>
bukan sebagai ikon (atau html yang dirender) yang seharusnya muncul.
Berikut adalah contoh JSFiddle
Saya pikir beberapa sanitasi terjadi selama proses ini.
Apakah mungkin untuk menonaktifkan sanitasi ini untuk filter khusus ini?
Saya juga tahu cara menampilkan ikon dengan tidak mengembalikan output HTML dari filter melainkan hanya teks 'ok' atau 'hapus' yang kemudian dapat saya gantikan:
<i class="icon-{{phone.connectivity.infrared | iconify}}"><i>
tapi ini bukan yang kuinginkan.
angular-sanitize.js
file agar ini berfungsi. Jika Anda ingin melakukan hal yang sama tanpa menyertakan pustaka tambahan ini, Anda dapat menggunakanng-bind-html-unsafe
direktif.ng-html-bind-unsafe
dan mengharuskan konten html secara eksplisit ditandai sebagai 'aman' - lihat: docs.angularjs.org/api/ng.$sce#Example{{myContent | myFilter | html_safe}}
kecuali saya salah membacanya, Anda mendekati dengan cara yang salah
Saya pikir ng-class adalah arahan yang Anda butuhkan untuk pekerjaan ini dan lebih aman daripada rendering ke atribut class.
dalam kasus Anda tambahkan saja string objek dengan string id sebagai kelas dan nilai sebagai ekspresi yang dievaluasi
<i ng-class="{ 'icon-ok':!phone.connectivity.infrared, 'icon-remove':phone.connectivity.infrared }"></i>'
di samping catatan, Anda sebaiknya hanya menggunakan direktif (bawaan dan kustom) untuk memanipulasi html / dom dan jika Anda membutuhkan render html yang lebih kompleks, Anda harus melihat direktif sebagai gantinya
sumber
<i ng-class="phone.connectivity.infrared ? 'icon-ok' : 'icon-remove'"></i>
Coba filter ini
filter('trust', ['$sce',function($sce) { return function(value, type) { return $sce.trustAs(type || 'html', value); } }]);
membutuhkan pembersihan sudut
var app = angular.module("myApp", ['ngSanitize']);
Tautan Inti
sumber