深入浅析AngularJS中的一次性数据绑定 (bindonce)
发布时间 - 2026-01-11 01:05:15 点击率:次一、理解双向数据绑定和监听器

为了实现双向数据绑定,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中数据绑定的实例详解
# 绑定
# 将会
# 插值
# 使用了
# 创建一个
# 回调
# 要在
# 我们可以
# 越多
# 小编
# 的是
# 应到
# 就会
# 如果你
# 太多
# 在这个
# 你可以
# 也就
# 在此
# 这就是
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在橙子建站中快速调整背景颜色?
今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】
html如何与html链接_实现多个HTML页面互相链接【互相】
如何用VPS主机快速搭建个人网站?
Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】
如何登录建站主机?访问步骤全解析
如何在香港服务器上快速搭建免备案网站?
详解Android中Activity的四大启动模式实验简述
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何在阿里云完成域名注册与建站?
详解Nginx + Tomcat 反向代理 如何在高效的在一台服务器部署多个站点
iOS验证手机号的正则表达式
Linux系统命令中tree命令详解
网页设计与网站制作内容,怎样注册网站?
如何用美橙互联一键搭建多站合一网站?
实例解析angularjs的filter过滤器
制作旅游网站html,怎样注册旅游网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
潮流网站制作头像软件下载,适合母子的网名有哪些?
Laravel如何实现多表关联模型定义_Laravel多对多关系及中间表数据存取【方法】
移动端脚本框架Hammer.js
Android滚轮选择时间控件使用详解
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
网站制作大概多少钱一个,做一个平台网站大概多少钱?
JavaScript实现Fly Bird小游戏
如何快速搭建高效服务器建站系统?
PHP正则匹配日期和时间(时间戳转换)的实例代码
Swift中switch语句区间和元组模式匹配
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
如何在万网自助建站平台快速创建网站?
成都网站制作公司哪家好,四川省职工服务网是做什么用?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
php后缀怎么变mp4格式错误_修改扩展名提示格式不对怎么办【技巧】
javascript中的数组方法有哪些_如何利用数组方法简化数据处理
如何在云主机上快速搭建多站点网站?
无锡营销型网站制作公司,无锡网选车牌流程?
Laravel如何实现多对多模型关联?(Eloquent教程)
如何快速完成中国万网建站详细流程?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
网站制作软件有哪些,制图软件有哪些?
香港服务器选型指南:免备案配置与高效建站方案解析
Android自定义控件实现温度旋转按钮效果
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
使用PHP下载CSS文件中的所有图片【几行代码即可实现】
网站制作壁纸教程视频,电脑壁纸网站?
打开php文件提示内存不足_怎么调整php内存限制【解决方案】
详解jQuery中基本的动画方法

