全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

深入浅析AngularJS中的一次性数据绑定 (bindonce)

一、理解双向数据绑定和监听器

为了实现双向数据绑定,AngularJS使用了$watch API来观察期作用域中的模型变化。具体的作用域取决于你的代码如何编写。如果你没有创建一个自作用域,就是说没有使用ngController指令在你的DOM和你的控制器代码之间创建一个关联,你可能处理的是跟作用域$rootScope,这个作用域由ngApp自动创建,并且是应用中所有作用域的父作用域,当然,如果你选择手动启动AngularJS,那情况就另当别论了。每当你创建了一个数据绑定时,AngularJS就会自动创建一个监听器来监听这个数据的变化。比如说下面这个简单的例子:

<p>Hello {{name}}!</p>

在这个例子中,我们使用了插值指令,这个指令会注册一个监听器来监听相应作用域中属性name的变化,并在该属性发生变化时将它实时反应到DOM中。

添加下面的代码,你的name属性将会自动的被赋值为Pascal:

angular.module('myApp', []) 
 .run(function ($rootScope) { 
  $rootScope.name = "Pascal"; 
}]); 

 通过上面的代码,我们就成功的使用了插值指令创建了在试图上创建了一个数据绑定。现在,如果name属性发生变化,视图将会自动发生更新。比如说我们添加下面的代码,在按钮点击是修改name的值:

<button ng-click="name = 'Christoph'">Click me!</button> 

  此时,点击按钮,我们可以将name的值修改为Christoph,同时我们会触发一个$digest循环来更新DOM中相应的部分。在上面的例子中,你看的知识单向数据绑定。然而,你完全可以使用ngModel指令来将视图中发生的变化实时的反应到模型中。

上面的双向绑定魔法的实现完全依赖于$digest循环,当$digest循环被触发时,AngularJS将会去处理遍历当前作用域和子作用域中的所有监听器,然后通过检查模型中发生的变化来更新DOM中的值,直到模型不再发生变化为止。一旦$digest循环执行完成,浏览器会重新渲染DOM来反应模型数据变化。

 现在,我们大概了解了AngularJS的数据绑定机制,你可能会问我们为何还需要一次性数据绑定。

由于AngularJS使用监听器来实现数据绑定。当监听器越来越多时,可能会出现一些性能上的问题。由于在注册监听器使,同时会注册一个回调函数,以便在$digest循环执行时能够相应的更新视图。也就是说,监听器越多,AngularJS需要处理的回调函数也就越多。

现在假设在视图中有很多值需要被AngularJS处理。比如说像上面使用插值指令来进行数据绑定,虽然我们可能并不想让这个值只绑定一次,比如说上面的Pascal,在应用代码执行的整个过程中这个属性都不会发生改变,但是AngularJS默认依然会在这个属性上绑定一个监听器和回调函数。因此,在$digest时,AngularJS依然会去特意的关注这个值,这实在是有些过头了。

二、一次性数据绑定(One-time bindings)

这就是我们需要一次性数据绑定的原因。在AngularJS的文档中,我们可以清楚的了解到这个新特性的作用:一次性数据绑定表达式可以在数据稳定之后,不需要在$digest循环中重计算…

一次性数据绑定的出现解决了前面提到的由监听器太多带来的性能问题。那么我们应该如何使用一次性数据绑定呢?

使用一次性数据绑定非常的简单,我们只需要在表达式之前加上双冒号::即可。比如,前面我们使用了插值指令将name属性绑定到了视图中:

<p>Hello {{name}}!</p> 

使用一次性数据绑定,我们这样写:

<p>Hello {{::name}}!</p> 

在AngularJS 1.3版本中,你可以在任何AngularJS的表达式中使用一次性数据绑定。即使在诸如ng-repeat这样严重依赖于双向绑定的指令中,你依然可以使用它。

以上所述是小编给大家介绍的AngularJS中的一次性数据绑定 (bindonce),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


# angularjs  # bindonce  # 一次性绑定  # 详谈AngularJs 控制器、数据绑定、作用域  # AngularJS1.X学习笔记2-数据绑定详解  # AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】  # AngularJS入门教程之数据绑定原理详解  # AngularJS入门教程之数据绑定用法示例  # AngularJS 双向数据绑定详解简单实例  # AngularJS实践之使用NgModelController进行数据绑定  # 详解JavaScript的AngularJS框架中的作用域与数据绑定  # angularjs学习笔记之双向数据绑定  # Angularjs中数据绑定的实例详解  # 绑定  # 将会  # 插值  # 使用了  # 创建一个  # 回调  # 要在  # 我们可以  # 越多  # 小编  # 的是  # 应到  # 就会  # 如果你  # 太多  # 在这个  # 你可以  # 也就  # 在此  # 这就是 


相关文章: 学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  个人网站制作流程图片大全,个人网站如何注销?  如何快速生成可下载的建站源码工具?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  c# 在ASP.NET Core中管理和取消后台任务  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  魔方云NAT建站如何实现端口转发?  如何确保西部建站助手FTP传输的安全性?  建站OpenVZ教程与优化策略:配置指南与性能提升  视频网站制作教程,怎么样制作优酷网的小视频?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  建站为何优先选择香港服务器?  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  已有域名如何免费搭建网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?  武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?  外贸公司网站制作,外贸网站建设一般有哪些步骤?  如何通过商城自助建站源码实现零基础高效建站?  ,柠檬视频怎样兑换vip?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  如何用wdcp快速搭建高效网站?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何选择最佳自助建站系统?快速指南解析优劣  如何快速生成橙子建站落地页链接?  建站之星代理如何获取技术支持?  西安专业网站制作公司有哪些,陕西省建行官方网站?  如何将凡科建站内容保存为本地文件?  javascript中的try catch异常捕获机制用法分析  网站设计制作企业有哪些,抖音官网主页怎么设置?  香港服务器部署网站为何提示未备案?  相册网站制作软件,图片上的网址怎么复制?  如何选择高效可靠的多用户建站源码资源?  零基础网站服务器架设实战:轻量应用与域名解析配置指南  在线制作视频网站免费,都有哪些好的动漫网站?  北京制作网站的公司排名,北京三快科技有限公司是做什么?北京三快科技?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  高端建站如何打造兼具美学与转化的品牌官网?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  C#如何使用XPathNavigator高效查询XML  css网站制作参考文献有哪些,易聊怎么注册?  北京网站制作的公司有哪些,北京白云观官方网站?  网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?  c++ stringstream用法详解_c++字符串与数字转换利器  网站插件制作软件免费下载,网页视频怎么下到本地插件?  电商网站制作公司有哪些,1688网是什么意思?  建站org新手必看:2024最新搭建流程与模板选择技巧  制作农业网站的软件,比较好的农业网站推荐一下?  如何在阿里云服务器自主搭建网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。