Maison  >  Article  >  interface Web  >  Concernant l'introduction de la liaison de données dans Angularjs, voici une explication détaillée

Concernant l'introduction de la liaison de données dans Angularjs, voici une explication détaillée

寻∝梦
寻∝梦original
2018-09-07 14:34:091166parcourir

Cet article présente la liaison de données de angularjs Il existe de nombreuses méthodes et exemples de codes pour la liaison de données avec angulairejs. J'espère que cela sera utile à tout le monde. . Voici un article

Liaison de données d'angularjs

Il existe trois méthodes de liaison de données dans angulairejs1.X, qui sont utilisées pour la synchronisation des données, exposent. Avant angularjs 1.3, il n'y avait que deux manières de angularjs : two-way-binding et one-way-bindng, puis un mécanisme de liaison appelé one-time-binding a été introduit.

Actuellement, il existe les trois méthodes de liaison de données suivantes dans angularjs :

  • liaison bidirectionnelle

  • une -direction-reliure

  • reliure unique

reliure bidirectionnelle

angularjs dans est d'associer Two-way-binding et Model. Les modifications de données de chaque côté mettront à jour les données de l'autre côté. View

Un scénario courant est la zone de saisie sur la page. La liaison bidirectionnelle peut facilement associer la valeur du contrôle d'entrée au

modèle de données.

<input type="text" id="text"  ng-model="name"/>
Grâce à

, nous pouvons facilement associer la valeur de la zone de saisie (ng-model) à view (name). Sous l'influence du flux de données bidirectionnel, que nous modifions la valeur de la zone de saisie ou que nous modifiions Model, l'autre côté sera mis à jour avec de nouvelles données à temps. name

est une directive intégrée de ng-model pour implémenter une liaison bidirectionnelle. angularjs Dans différents cycles de vie, il existe différents processus logiques. ng-model

  1. phase de compilation :

    1. la commande et la commande ng-model seront fusionnées et traitées dans l'enregistrement de la balise input input événement (événement DOM) ; keydown

    2. enregistre un interpolation pour s'abonner à l'événement $watch (événement angulaire js). change

  2. Phase d'exécution

    1. Déclencheur d'entrée utilisateur

      keydown

    2. L'instruction

      capture l'événement input et appelle keydown pour demander l'action de mise à jour. $apply

    3. Mettre à jour la valeur à angularjsModel

    4. Entrer le contexte

      $digest

    5. L'expression

      détecte que $watch se produit, informe Model et demande une mise à jour change. interpolationDOM

    6. Fin de l'hébergement, quitter l'hébergement et rendre le contrôle au contexte d'exécution JavaScript.

      angularjs

    7. Enfin, le navigateur restitue le texte.
    Liaison unidirectionnelle

Différent du flux bidirectionnel de

, le flux de données de

est unidirectionnel, c'est-à-dire qu'il circulera uniquement des flux Two-way-binding vers one-way-binding, mais pas de model vers view. Par conséquent, view est utilisé pour afficher des données, pas pour obtenir des entrées. modelone-way-bindingDans

,

a deux syntaxes : angularjs et one-way-binding. ng-bind{{expression}}

Pour
<span ng-bind="name"> </span>
<span>{{name}}</span>
, le mécanisme interne est partiellement le même que pour

. one-way-bindingtwo-way-binding

    phase de compilation :
    1. Enregistrez un

      pour vous abonner à l'événement interpolation (angularjs Event) . $watchchange

    phase d'exécution :
    1. Entrez

      . Le angularjs de $digest

    2. détecte les modifications de données, informe expression et demande une mise à jour $watch. interpolationDOM

    3. Fin de l'hébergement, quitter l'hébergement et rendre le contrôle au contexte d'exécution JavaScript.

      angularjs

    4. Enfin, le navigateur restitue le texte.
    liaison unique

Après cela,

implémente un mécanisme appelé 1.3. En substance, son mécanisme n’est pas très différent des deux autres méthodes, mais il se comporte différemment lors de la mise à jour des données. angularjsone-time-binding

enregistrera également

pour écouter les changements de données, mais il annulera la surveillance lorsqu'il détectera des données one-time-bindingnon définies$watch pour la première fois.

<span>{{::name}}</span>

对于上面的代码,假设 nameundefined -> angularjs -> angular ,最终渲染的结果是 angularjs ,而不是 angular 。 这就是 one-time-binding 的特殊之处,当 nameundefined 变化为 angularjs之后,被认定为 name 的状态已经是 stable ,因此将取消 $watch , 即不再监听数据变化。

那么,假设 name'' -> angularjs-> angular, 则渲染结果是 '' ,即空字符串(第一次的值)。因为 one-time-binding 在计算 stable 时候使用的 严格相等,即 newVal === undefined, 如果是,则继续保留 $watch 等待下一次的比较;否则,状态变更为 stable,取消 $watch, 数据转化为最终态。

结束

在我看来,angularjs  核心在于 angularjs context$digest

angularjs context 保证 angularjs 可以捕获到各种事件,用户输入、鼠标事件、键盘事件、甚至 $settimeout$http 等异步行为的状态流转。

$digest 则保证 angularjs 可以确认是否要更新数据。

本篇关于angularjs的文章到这也就结束了(想看更多就到PHP中文网angularjs参考手册中学习),有问题的可以在下方留言提问。


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn