2017-10-11 7 views
0
angulaire

J'ai essayé d'utiliser des entités HTML pour éviter les obligeraient angulaire prise coups {{} plaintext}Comment afficher doubles accolades avec

J'ai découvert que le navigateur les convertit en accolades curvy simples de toute façon . Voici un échantillon simple. Comme vous pouvez le voir dans l'inspecteur DOM, les codes d'entité HTML ont été convertis en accolades sinueuses simples. Est-ce spécifié quelque part?

https://codepen.io/anon/pen/OxEeqg

<body> 
    &#123;&#123;1+2&#125;&#125; 
</body> 

Upd: comportement Chrome et FF similaire dans cette situation.

+0

C'est le comportement prévu. Si vous voulez afficher votre ligne littéralement, vous devrez par exemple tourner le '&' dans une entité: '& # 123; & # 123; 1 + 2 & # 125; & # 125; ' – tobiv

+0

Non, je ne parle pas de l'affichage. Le code HTML du DOM lui-même est converti. Je voulais qu'il soit affiché comme des accolades sinueuses, mais pas identifié par l'analyseur d'expression angulaire. Comme les résultats, j'ai dû insérer ZWSP entre les deux premières accolades, mais je suis toujours curieux de savoir pourquoi '{' est converti en '{' * dans la source HTML * –

Répondre

2

Utilisez la directive ng-non-bindable sur un élément d'emballage:

<span ng-non-bindable>{{1+2}}</span> 

Si vous l'utilisez sur un élément conteneur, vous pouvez également ignorer les attributs:

<div ng-non-bindable> 
    <input value="{{example}}"> 
</div> 
+0

Malheureusement même élément ont des attributs où j'ai besoin de liaison et ses descendants les ont aussi. Mais la chose la plus importante c'est que XSS est en fait et je ne veux pas empêcher XSS par blacklisting. Je voulais que la solution fonctionne partout si j'ai oublié d'ajouter 'ng-non-bindable' ou non. J'ai donc ajouté "hook on save" à la base de données et j'ai pensé que ça fonctionnait bien jusqu'à ce que je trouve que le remplacement des accolades sinueuses avec juste des entités HTML ne fonctionne pas parce que le navigateur les remplace. –