J'étais dans l'une des présentations angulaires et l'une des personnes à la réunion mentionnée ng-bind
vaut mieux que {{}}
contraignant.
L'une des raisons, ng-bind
mettre la variable dans la liste de surveillance et seulement lorsqu'il y a un changement de modèle, les données sont poussées à afficher, d'autre part, {{}}
vont interpoler l'expression à chaque fois (je suppose que c'est le cycle angulaire) et pousser même si la valeur a changé ou non.
Il est également dit que si vous n'avez pas beaucoup de données à l'écran, vous pouvez les utiliser {{}}
et que le problème de performances ne sera pas visible. Quelqu'un peut-il faire la lumière sur cette question pour moi?
ngBind
au lieu de{{ expression }}
si un modèle est momentanément affiché par le navigateur dans son état brut avant que Angular le compile. Puisqu'ilngBind
s'agit d'un attribut d'élément, il rend les liaisons invisibles à l'utilisateur pendant le chargement de la page." - mais rien n'est mentionné sur les performances.Réponses:
Si vous n'utilisez pas
ng-bind
, à la place quelque chose comme ceci:vous pouvez voir le réel
Hello, {{user.name}}
pendant une seconde avant lauser.name
résolution (avant le chargement des données)Vous pourriez faire quelque chose comme ça
si c'est un problème pour vous.
Une autre solution consiste à utiliser
ng-cloak
.la source
ng-cloak
été inventé pour réparer ce problème.ng-bind-template
vous pouvez également combiner les deux approches:ng-bind-template="Hello, {{user.name}}"
ici, la liaison offre toujours une amélioration des performances et n'introduit plus d'imbricationVisibilité:
Pendant que votre angularjs démarre, l'utilisateur peut voir vos crochets placés dans le html. Cela peut être géré avec
ng-cloak
. Mais pour moi, c'est une solution de contournement, que je n'ai pas besoin d'utiliser, si j'utiliseng-bind
.Performance:
Le
{{}}
est beaucoup plus lent .Il
ng-bind
s'agit d'une directive qui placera un observateur sur la variable transmise. Donc,ng-bind
cela ne s'applique que lorsque la valeur transmise change réellement .Les supports en revanche seront cochés et rafraîchis à chaque fois
$digest
, même si ce n'est pas nécessaire .Je suis en train de créer une grande application d'une seule page (~ 500 liaisons par vue). Passer de {{}} à strict
ng-bind
nous a permis d'économiser environ 20% à chaque foisscope.$digest
.Suggestion :
Si vous utilisez un module de traduction tel que angular-translate , préférez toujours les directives avant l'annotation des crochets.
{{'WELCOME'|translate}}
=><span ng-translate="WELCOME"></span>
Si vous avez besoin d'une fonction de filtre, optez plutôt pour une directive, qui utilise en fait simplement votre filtre personnalisé. Documentation pour le service $ filter
MISE À JOUR 28.11.2014 (mais peut-être hors du sujet):
Dans Angular 1.3x, la
bindonce
fonctionnalité a été introduite. Par conséquent, vous pouvez lier la valeur d'une expression / d'un attribut une fois (sera lié lorsque! = 'Non défini').Ceci est utile lorsque vous ne vous attendez pas à ce que votre liaison change.
Utilisation: Placez
::
avant votre reliure:Exemple:
ng-repeat
pour afficher des données dans le tableau, avec plusieurs liaisons par ligne. Liaisons de traduction, sorties de filtre, qui s'exécutent dans chaque résumé de portée.la source
ng-bind
est mieux que{{...}}
Par exemple, vous pourriez faire:
Cela signifie que tout le texte
Hello, {{variable}}
entouré par<div>
sera copié et stocké en mémoire.Si à la place vous faites quelque chose comme ça:
Seule la valeur de la valeur sera stockée en mémoire et angulaire enregistrera un observateur (expression de surveillance) qui se compose uniquement de la variable.
la source
<div ng-bind-template="{{ var1 }}, {{ var2}}"></div>
est une alternative à {{}} et fonctionne comme ng-bindng-bind
serait plus comparable à<div>Hello, <span>{{variable}}</span></div>
.Fondamentalement, la syntaxe à double bouclé est plus lisible naturellement et nécessite moins de frappe.
Les deux cas produisent la même sortie mais .. si vous choisissez d'aller avec,
{{}}
il y a une chance que l'utilisateur voit pendant quelques millisecondes{{}}
avant que votre modèle ne soit rendu par angulaire. Donc, si vous en remarquez,{{}}
il vaut mieux l'utiliserng-bind
.Il est également très important que seul le fichier index.html de votre application angulaire puisse être non rendu
{{}}
. Si vous utilisez des directives dans ce cas, il n'y a aucune chance de le voir, car angular rend d'abord le modèle et l'ajoute ensuite au DOM.la source
{{...}}
signifie une liaison de données bidirectionnelle. Mais, ng-bind est en fait destiné à la liaison de données unidirectionnelle.L'utilisation de ng-bind réduira le nombre d'observateurs dans votre page. Par conséquent, ng-bind sera plus rapide que
{{...}}
. Donc, si vous souhaitez uniquement afficher une valeur et ses mises à jour, et ne souhaitez pas refléter son changement d'interface utilisateur vers le contrôleur, optez pour ng-bind . Cela augmentera les performances de la page et réduira le temps de chargement de la page.la source
Cela est dû au fait que
{{}}
le compilateur angulaire considère à la fois le nœud de texte et son parent car il existe une possibilité de fusion de 2{{}}
nœuds. Il existe donc des liens supplémentaires qui augmentent le temps de chargement. Bien sûr, pour quelques-unes de ces occurrences, la différence est négligeable, mais lorsque vous l'utilisez dans un répéteur d'un grand nombre d'éléments, cela aura un impact dans un environnement d'exécution plus lent.la source
La raison pour laquelle Ng-Bind est meilleure parce que,
Lorsque votre page n'est pas chargée ou lorsque votre Internet est lent ou lorsque votre site Web est chargé à moitié, vous pouvez voir que ce type de problèmes (vérifiez la capture d' écran avec la marque de lecture) sera déclenché à l'écran, ce qui est complètement bizarre. Pour éviter cela, nous devons utiliser Ng-bind
la source
ng-bind a aussi ses problèmes. Lorsque vous essayez d'utiliser des filtres angulaires , limit ou autre, vous pouvez avoir des problèmes si vous utilisez ng-bind . Mais dans d'autres cas, ng-bind est meilleur du côté UX. Quand l'utilisateur ouvre une page, il / elle verra (10ms-100ms) qui imprime des symboles ( {{... ...}} ), c'est pourquoi ng-bind est meilleur .
la source
Il y a un problème de scintillement dans {{}}, comme lorsque vous actualisez la page, puis pour une courte expression de spam de temps, nous devons donc utiliser ng-bind au lieu de l'expression pour la représentation des données.
la source
ng-bind
est également plus sûr car il représentehtml
une chaîne.Ainsi, par exemple,
'<script on*=maliciousCode()></script>'
sera affiché sous forme de chaîne et ne sera pas exécuté.la source
Selon Angular Doc:
comme ngBind est un attribut d'élément, il rend les liaisons invisibles pour l'utilisateur pendant le chargement de la page ... c'est la principale différence ...
Fondamentalement, jusqu'à ce que tous les éléments dom ne soient pas chargés, nous ne pouvons pas les voir et parce que ngBind est un attribut sur l'élément, il attend que les doms entrent en jeu ... plus d'informations ci-dessous
ngBind
- directive dans le module ng
L' attribut ngBind indique à AngularJS de remplacer le contenu textuel de l'élément HTML spécifié par la valeur d'une expression donnée et de mettre à jour le contenu textuel lorsque la valeur de cette expression change.
En règle générale, vous n'utilisez pas directement ngBind , mais à la place, vous utilisez le balisage double bouclé comme {{expression}} qui est similaire mais moins verbeux.
Il est préférable d'utiliser ngBind au lieu de {{expression}} si un modèle est momentanément affiché par le navigateur dans son état brut avant qu'AngularJS ne le compile. Étant donné que ngBind est un attribut d'élément, il rend les liaisons invisibles pour l'utilisateur pendant le chargement de la page.
Une solution alternative à ce problème serait d'utiliser la directive ngCloak . visitez ici
pour plus d'informations sur le ngbind visitez cette page: https://docs.angularjs.org/api/ng/directive/ngBind
Vous pouvez faire quelque chose comme ça en tant qu'attribut, ng-bind :
ou faites une interpolation comme ci-dessous:
ou de cette façon avec les attributs ng-cloak dans AngularJs:
ng-cloak évitez de flasher sur le dom et attendez que tout soit prêt! c'est égal à l' attribut ng-bind ...
la source
Vous pouvez vous référer à ce site, il vous donnera une explication qui est meilleure car je sais {{}} c'est plus lent que ng-bind.
http://corpus.hubwiz.com/2/angularjs/16125872.html référer ce site.
la source