900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 关于angularjs的数据绑定的介绍 这里有详细的解释

关于angularjs的数据绑定的介绍 这里有详细的解释

时间:2021-08-11 12:13:33

相关推荐

关于angularjs的数据绑定的介绍 这里有详细的解释

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-bindingone-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的作用是将ModelView关联起来,任何一侧的数据变更都会更新另一侧的数据。

常见场景是页面中的输入区域。双向绑定可以很容易的将输入控件的值关联到数据模型中。

通过ng-model我们可以很容易的将输入框(view)的值和name(Model) 关联起来。在双向数据流的作用下,无论是我们修改输入框的值还是修改name,另外一侧都将及时更新到新数据。

ng-modelangularjs内置的一个指令用来实现双向绑定。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}}

对于上面的代码,假设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参考手册中学习),有问题的可以在下方留言提问。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。