Est-il possible de créer un fragment HTML dans un contrôleur AngularJS et d'avoir ce HTML affiché dans la vue?
Cela provient de l'obligation de transformer un blob JSON incohérent en une liste imbriquée de id: value
paires. Par conséquent, le code HTML est créé dans le contrôleur et je cherche maintenant à l'afficher.
J'ai créé une propriété de modèle, mais je ne peux pas la rendre dans la vue sans imprimer simplement le code HTML .
Mise à jour
Il semble que le problème résulte du rendu angulaire du code HTML créé sous forme de chaîne entre guillemets. J'essaierai de trouver un moyen de contourner cela.
Exemple de contrôleur:
var SomeController = function () {
this.customHtml = '<ul><li>render me please</li></ul>';
}
Exemple de vue:
<div ng:bind="customHtml"></div>
Donne:
<div>
"<ul><li>render me please</li></ul>"
</div>
function htmlSanitizer(html) {...
. Les développeurs angulaires ont décidé que vous devriez être en mesure de trouver n'importe quelle liaison html en parcourant lentement toutes vos pages les éléments cachés un par un pour trouver cette seule pièce manquante de html. !!! très en colère contre une telle hypothèse !!!Réponses:
Pour Angular 1.x, utilisez
ng-bind-html
dans le HTML:À ce stade, vous obtiendrez une
attempting to use an unsafe value in a safe context
erreur, vous devez donc utiliser ngSanitize ou $ sce pour résoudre ce problème.$ sce
Utilisez
$sce.trustAsHtml()
dans le contrôleur pour convertir la chaîne html.ngSanitize
Il y a 2 étapes:
inclure la ressource angular-sanitize.min.js, c'est-à-dire:
<script src="lib/angular/angular-sanitize.min.js"></script>
Dans un fichier js (contrôleur ou généralement app.js), incluez ngSanitize, c'est-à-dire:
angular.module('myApp', ['myApp.filters', 'myApp.services', 'myApp.directives', 'ngSanitize'])
la source
ng-bind-html-unsafe
été supprimé et les deux directives ont été combinées. Voir: github.com/angular/angular.js/blob/master/…$sce
. Injectez-le dans le contrôleur et passez-y le HTML.$scope.thisCanBeusedInsideNgBindHtml = $sce.trustAsHtml(someHtmlVar);
Sinon, je n'arrêtais pas de recevoirattempting to use an unsafe value in a safe context
Vous pouvez également créer un filtre comme ceci:
Puis dans la vue
Remarque : ce filtre approuve tout le code HTML qui lui est transmis et pourrait présenter une vulnérabilité XSS si des variables avec une entrée utilisateur lui sont transmises.
la source
ngResource
dépendance BTW n'est pas nécessaire.sanitize
? C'est tellement trompeur qu'il ne désinfecte rien. Au lieu de cela, il doit être appelétrust
,trustSafe
ou quelque chose de similaire.rawHtml
est mon nom pour le filtre au lieu desanitize
.Angular JS affiche HTML dans la balise
La solution fournie dans le lien ci-dessus a fonctionné pour moi, aucune des options de ce fil n'a fonctionné. Pour tous ceux qui recherchent la même chose avec AngularJS version 1.2.9
En voici une copie:
ÉDITER:
Voici la configuration:
Fichier JS:
Fichier HTML:
la source
Heureusement, vous n'avez pas besoin de filtres sophistiqués ou de méthodes dangereuses pour éviter ce message d'erreur. Il s'agit de l'implémentation complète pour sortir correctement le balisage HTML dans une vue de la manière voulue et sûre.
Le module de désinfection doit être inclus après Angular:
Ensuite, le module doit être chargé:
Cela vous permettra d'inclure du balisage dans une chaîne à partir d'un contrôleur, d'une directive, etc.:
Enfin, dans un modèle, il doit être sorti comme suit:
Ce qui produira la sortie attendue: 42 est la réponse .
la source
<div><label>Why My Input Element Missing</label><input /></div>
... Si cela vous surprend, mettez à jour votre réponse plz .. Parce que j'ai testé toutes les solutions de vote + 10 .. Votre solution n'a pas fonctionné pour moi pour voir mes balises d'entrée .. bien sinon .. J'avais utilisé$sce.trustAsHtml(html)
J'ai essayé aujourd'hui, le seul moyen que j'ai trouvé était
<div ng-bind-html-unsafe="expression"></div>
la source
ng-bind-html-unsafe
ne fonctionne plus.C'est le chemin le plus court:
Créez un filtre:
Et selon vous:
PS Cette méthode ne vous oblige pas à inclure le
ngSanitize
module.la source
$sce
dans la réponse acceptée ne fonctionnait pas pour moi et je ne voulais pas inclure une dépendance supplémentaire pour quelque chose d'aussi trivial.sur html
OU
sur le contrôleur
fonctionne aussi avec
$scope.comment.msg = $sce.trustAsHtml(html);
la source
$sce
est soigné mais un utilisateur ne pourrait-il pas simplement ajouter un point d'arrêt ici et restaurer un code malveillant à l'this.myCtrl.comment.msg
aide d'un débogueur?ng-bind-html
se retire.J'ai trouvé que l'utilisation de ng-sanitize ne me permettait pas d'ajouter ng-click dans le html.
Pour résoudre ce problème, j'ai ajouté une directive. Comme ça:
Et voici le HTML:
Bonne chance.
la source
Je viens de le faire en utilisant ngBindHtml en suivant des documents angulaires (v1.4) ,
Assurez-vous d'inclure ngSanitize dans les dépendances du module. Ensuite, cela devrait fonctionner correctement.
la source
Une autre solution, très similaire à celle de blrbr, sauf en utilisant un attribut de portée est:
Et alors
Notez que vous pouvez remplacer
element.append()
parelement.replaceWith()
la source
il existe une autre solution à ce problème en utilisant la création de nouveaux attributs ou directives en angulaire.
product-specs.html
app.js
index.html
ou
ou
https://docs.angularjs.org/guide/directive
la source
vous pouvez également utiliser ng-include .
vous pouvez utiliser "ng-show" pour afficher masquer ces données de modèle.
la source
voici la solution faire un filtre comme celui-ci
et l'appliquer comme filtre au ng-bind-html comme
et merci à Ruben Decrop
la source
Utilisation
et
Pour cela, vous devez inclure
angular-sanitize.js
, par exemple dans votre fichier html avecla source
Voici une
bind-as-html
directive simple (et peu sûre) , sans avoir besoin dengSanitize
:Notez que cela s'ouvrira pour des problèmes de sécurité, si vous liez du contenu non approuvé.
Utilisez comme ça:
la source
Exemple de travail avec pipe pour afficher du HTML dans le modèle avec Angular 4.
1. tuyau évalué escape-html.pipe.ts
"
`2. Enregistrez le tuyau sur app.module.ts
Utiliser dans votre modèle
getDivHtml() { //can return html as per requirement}
Veuillez ajouter l'implémentation appropriée pour getDivHtml dans le fichier component.ts associé.
la source
Utilisation simple
[innerHTML]
, comme ci-dessous:Avant de devoir utiliser
ng-bind-html
...la source
Dans Angular 7 + ionic 4, le contenu Html peut être affiché en utilisant "[innerHTML]":
J'espère que cela vous aidera également. Merci.
la source