#在angularjs1.X 中存在了三種資料綁定的方式,用於資料的同步、展示。在angularjs 1.3
之前,angularjs
只存在兩種方式: two-way-binding
和one-way-bindng
, 而後則引入了稱為one-time-binding
的綁定機制。
目前angularjs
中存在以下三種資料綁定方式:
two-way-binding
one-way-binding
one-time-binding
# #angularjs
中的Two-way-binding
的作用是將Model
和
關聯起來,任何一邊的資料變更都會更新另一側的數據。 常見場景是頁面中的輸入區域。雙向綁定可以很容易的將輸入控制項的值關聯到
資料模型
。 <pre class="brush:php;toolbar:false"><input type="text" id="text" ng-model="name"/></pre>
透過
)的值和
namename,另外一側都會及時更新到新資料。
ng-model
是
angularjs 內建的一個指令用來實現雙向綁定。
ng-model
compilation phase:
input
標籤註冊##interpolation
change 事件(angularjs Event)。
Runtime Phase
#使用者輸入觸發
keydown
input 指令捕捉
keydown
angularjs
更新值到
Model
Model
發生了。 angularjs
託管結束,退出託管,交還控制權到 JavaScript 執行上下文。 最後瀏覽器重新渲染文字。
不同於
Two-way-binding的雙向流動,
one-way- binding 的資料流向是單向,即只會從
model 流向
view
view 流向
model 。因此,
one-way-binding
angularjs
中, 和{{expression} }
。 <pre class="brush:php;toolbar:false"><span ng-bind="name"> </span>
<span>{{name}}</span></pre>
對於 one-way-binding
來說,內部機制和
#interpolation
註冊一個
$watch
runtime phase:
$digest 。
expression
的。 angularjs
託管結束,退出託管,交還控制權到 JavaScript 執行上下文。
最後瀏覽器重新渲染文字。
<span>{{::name}}</span>
对于上面的代码,假设 name
从 undefined
-> angularjs
-> angular
,最终渲染的结果是 angularjs
,而不是 angular
。 这就是 one-time-binding
的特殊之处,当 name
从 undefined
变化为 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参考手册中学习),有问题的可以在下方留言提问。
以上是關於angularjs的資料綁定的介紹,這裡有詳細的解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!