web前端|js教程
databinding,angularjs
web前端-js教程
本篇文章介绍angularjs的数据绑定的介绍,里面有很多与angularjs的数据绑定的方法和实例代码,希望对大家有帮助,现在一起来看这篇文章吧angularjs 的数据绑定
教务管理系统app源码,vscode 写代码跳动,ubuntu启动kali,tomcat 参数 过长,sqlite图形化界面,js插件 复制到剪切板,jira的前端用的是哪个框架,接口防爬虫爬取数据,高洛峰php视频教程,面试问题seo,如何建立网站模板,手机网页免费制作,后台模板框架lzw
在angularjs1.X 中存在了三种数据绑定的方式,用于数据的同步、展示。在angularjs 1.3
之前,angularjs
只存在两种方式:two-way-binding
和one-way-bindng
, 而后则引入了称为one-time-binding
的绑定机制。
众点评源码,Ubuntu开启镜像删除,tomcat9设置主页,爬虫 post提交,php用户微信红包,seo -339lzw
目前angularjs
中存在以下三种数据绑定方式:
情侣源码,Vscode文件夹展开图标,Ubuntu镜像引导,如何读写tomcat文件,爬虫棋牌app,php讲师介绍,新手怎么开始做seo 外推lzw
two-way-binding
one-way-binding
one-time-binding
two-way-binding
angularjs
中的Two-way-binding
的作用是将Model
和View
关联起来,任何一侧的数据变更都会更新另一侧的数据。
常见场景是页面中的输入区域。双向绑定可以很容易的将输入控件的值关联到数据模型中。
通过ng-model
我们可以很容易的将输入框(view
)的值和name
(Model
) 关联起来。在双向数据流的作用下,无论是我们修改输入框的值还是修改name
,另外一侧都将及时更新到新数据。
ng-model
是angularjs
内置的一个指令用来实现双向绑定。ng-model
在不同生命周期中,有不同的逻辑处理。
compilation phase:
ng-model
指令和input
指令会被合并处理给input
标签 注册keydown
事件(DOM Event);
interpolation
则注册一个$watch
用来订阅change
事件(angularjs Event)。
Runtime Phase
用户输入触发keydown
input
指令捕获keydown
事件,调用$apply
来请求更新动作。
angularjs
更新值到Model
进入$digest
上下文
$watch
表达式检测到Model
发生了change
,通知interpolation
,请求 更新DOM
。
angularjs
托管结束,退出托管,交还控制权到 JavaScript 执行上下文。
最后浏览器重新渲染文本。
One-way-binding
不同于Two-way-binding
的双向流动,one-way-binding
的数据流向是单向,即只会从model
流向view
,而不会从view
流向model
。 因此,one-way-binding
用来展示数据,而不是获取输入。
在angularjs
中,one-way-binding
则有两种语法:ng-bind
和{{expression}}
。
{{name}}
对于one-way-binding
来说,内部机制和two-way-binding
有部分相同的机制。
compilation phase:
interpolation
注册一个$watch
用来订阅change
事件(angularjs Event)。
runtime phase:
angularjs
进入$digest
。
expression
的$watch
检测到数据发生变更,通知interpolation
,请求 更新DOM
。
angularjs
托管结束,退出托管,交还控制权到 JavaScript 执行上下文。
最后浏览器重新渲染文本。
one-time-binding
1.3
之后,angularjs
实现了一个叫one-time-binding
的机制。本质上它的机制和其他两种方式没太多差异,但在数据更新时候表现的不太一样。
one-time-binding
同样会注册$watch
来监听数据变化,但它会在第一次检测到数据 非 Undefined 时候取消监听。
{{::name}}
对于上面的代码,假设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参考手册中学习),有问题的可以在下方留言提问。