angular.js - 试问angularjs的双向绑定是如何实现的?
高洛峰
高洛峰 2017-05-15 16:59:32
0
6
588

用过angularjs的人肯定知道他的双向绑定,用起来也是很方便,可是他内部是怎么实现的呢?

视图变化了去更新数据,这个还好理解,也大都知道怎么去模拟一下,但是说到数据变化了去更新视图,关键在于是怎么去判断数据发生了变化。。。

之前想了一下,类似先存储一份oldValue,然后定时去遍历这些,用newValue和oldValue去对比,如果变化了做更新和其他相关的工作。。。

但是觉得这样行吗?自己思索半天觉得也不是很靠谱,希望各位兄弟姐妹不吝教诲!## 标题

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全員に返信(6)
Ty80

双方向バインディングに似た簡単な例を実装します

HTML

リーリー

スクリプト

リーリー

ビューが変更されたときにデータを更新する

これは非常に簡単で、命令 myModel をコンパイルするときにイベントをバインドするだけです

リーリー

データ変更によるUIの更新

スコープ内にウォッチャーとダイジェストがあります

リーリー

スコープに値を割り当ててダイジェストをトリガーすると、UI も同時に更新されます

リーリー

スコープに値を直接割り当てても UI は更新されません。ほとんどの場合、Angular はダイジェストをアクティブにトリガーするため、スコープを指定するだけでよいという印象を与えます。何気なくその結果、理解できない状況が発生します。たとえば

リーリー

setTimeout を直接使用すると、結果的に UI が更新されず、次の処理を行う必要があります

リーリー

または、ダイジェストをトリガーするのに役立つ angular の $timeout を使用します

リーリー
いいねを押す +0
巴扎黑

疑問を解決するのに役立つ記事がたくさんあります。まず検索してから質問してください。

いいねを押す +0
巴扎黑

まず最初に、質問で言及されているangularjsについてはあまり詳しくありませんが、これは少し間違っています。
Knockout にも同様の双方向データ バインディング機能があり、オブザーバー モードで実装され、set メソッドを使用して値を割り当てると、そのオブジェクトに関心のあるオブザーバーにも通知されます。双方向データ バインディングの効果。

いいねを押す +0
伊谢尔伦

angular1 はダーティ チェックです。 。これにより、パフォーマンスの問題も発生します

いいねを押す +0
世界只因有你

AngularJS は双方向データ バインディング メカニズムをどのように実装していますか?

いいねを押す +0
迷茫

参考:
http://teropa.info/build-your-own-angular/build_your_own_angularjs_sample.pdf

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート