用typecho做的网站拓客系统

bicheng/2026/1/20 8:57:13/文章来源:
用typecho做的网站,拓客系统,中国轻工建设公司网站,同城信息小程序源码这篇文章主要是面向那些刚开始学AngularJs和想要了解数据绑定#xff08;data-binding#xff09;是怎么工作的#xff0c; 如果你已经熟悉如何使用angularjs了#xff0c;我强烈建议你不用阅读了。 angularjs使用者想要知道data-binding是如何工作的#xff0c;就会遇到很…这篇文章主要是面向那些刚开始学AngularJs和想要了解数据绑定data-binding是怎么工作的 如果你已经熟悉如何使用angularjs了我强烈建议你不用阅读了。   angularjs使用者想要知道data-binding是如何工作的就会遇到很多的关的术语 比如$wacth,$apply,$digest,dirty-checking(脏值检测)...等等这些又是做什么的呢 在这篇文章里我会解决所有的疑问通过结合这些术语在一起来学习。 但是我会尽量用简单的方式来说明。   现在开始 The browser events-loop and the Angular.js extension 我们的浏览器会检测等待事件发生比如用户的一些行为假如你点击了一个button或者在input写东西 事件的回调就会在内置的JavaScript跑起来然后你就能够做一些DOM操作了。 所以当回调发生的时候浏览器中的DOM会发生一些变化。   而Angularjs扩展了这个事件轮询创建了一个叫angular content的东西记住它非常重要的一个概念 为了解释这个context是什么以及它是怎么工作的我们需要先了解一下其他的一些概念。 The $watch list 每当你在ui上绑定了东西就会添加了一个$wacth到$watch list中 你可以把$watch想象成为一个能够察觉model的变化的检测器 比如你的html代码是 User: input typetext ng-modeluser / Password: input typepassword ng-modelpass / 在这里我们将$scope.user绑定到了第一个input上把$scope.pass绑定到了第二个input上 这样就意味着我们添加了两个$wacth到了$watch list中了。   再比如 app.controller(MainCtrl, function($scope) {$scope.foo Foo;$scope.world World; }); //页面htnl Hello, {{ World }} 这个例子中虽然我们在控制器中定义了foo和world但是只有一个绑定到了页面上 所以这个例子中我们只创建了一个$watch。   我们再来看看下面这种情况 app.controller(MainCtrl, function($scope) {$scope.people [...]; });//HTML代码 ulli ng-repeatperson in people{{person.name}} - {{person.age}}/li /ul 那这个例子有多少个$watch被创建呢 我们在这里假设peple数组中的每个元素都拥有name和age这2个属性。 由于我们实用ng-repeat遍历$scope.people 如果有10个人则我们一共创建了10*21 22 注意其中的1为ng-repeat所创建的。   所以要注意的是当我们在ui上使用绑定用directives 指令的时候就创建了一个$watch 对了那它是什么时候创建的呢 当我们的模板加载完成亦叫做linking phasecompiler就会找到所有的指令并创建对应的$watch。 $digest loop 还记得我们在上面讨论的event-loop吗 当浏览器发送一个事件我们就能通过angular context管理这个事件此时$digest就会被激活 这个事件轮询loop由两个小loop组成 一个是处理$evalAsync队列 一个是处理$watch list这就是本文的主题了。 那处理的过程是怎样的$digest会轮询我们有的$watch list,大概就想下面这样 ---》Hey$watch,你的value值是多少啊 ---》我的value值是9。 ---》好的有变化吗 ---》没有。 什么都没有变化就会跳到下个继续询问 ---》来你的value值是多少啊 ---》是foo。 ---》有变化吗 ---》有啊本来是bar的 很好那么现在我们有一个DOM要更新下了 流程就会这样继续下去知道$watch list中所有的$watch都被询问...   现在讲下脏值检测dirty-checking现在所有的$watch都被轮询过了 会再次询问是否所有的$watch都已经更新了 如果其中有一个改变了就会重新轮询直到所有的$wacth没有改变。这样做事为了确保所有的model都是“干净的” 注意如果轮询loop超过十次就会抛出异常来退出无限的轮询。   当$degest loop完成DOM就会发生改变 看下面的例子 app.controller(MainCtrl, function() {$scope.name Foo;$scope.changeFoo function() {$scope.name Bar;} }); {{ name }} button ng-clickchangeFoo()Change the name/button 这里我们只有一个$watch,因为ng-click不会创建任何的$watch函数function是不会发生改变的 1·当我们点击按钮的时候 2·浏览器发送事件进入angular context后面再解释这个context 3·然后执行$degest loop会轮询所有的$watch是否发生改变 4·新的一轮loop报告说没有新的改变了 5·然后浏览器就会拿回控制权然后更新DOM这里是更新新的值$scope.name 这里最重要的一点也是难点是所有的事件会进入angular context然后执行$digest loop 这意味着每当我们在input键入一个字符轮询loop会检查页面上所有的$watch。 Entering the angular context with $apply 那是怎么进入angular context的呢答案是$apply 当一个事件发生时吗你如果调用$apply就会进入angular context。 如果你没有调用就只会在外部这里指的是区别于angular context内部执行 那么你就可能会有疑问了 上面的那个例子我没有调用$apply它为什么会进入angular context呢答案是Angular帮我们做了。 所有当你调用ng-click时候这个事件就会被包含进了$apply调用了。 如果你在一个页面上有input并且标签上写着ng-modelfoo 然后输入“f”事件就像这样$apply(foo f;)被调用换句话说就是被$apply包含着调用了。 When angular doesn’t use $apply for us 这是很多Angular的新手共同的疑问我在页面上上使用了jQuery为什么JQuery没有更新我的绑定呢 因为jQuery没有调用$apply所有的事件并没有进入angular context中所以$digest loop没有执行   下面让我们看看一个有趣的例子 假如我们的代码中有下面的指令directive 和控制器controller app.directive(clickable, function() {return {restrict: E,scope: {foo: ,bar: },template: ul stylebackground-color: lightblueli{{foo}}/lili{{bar}}/li/ul,link: function(scope, element, attrs) {element.bind(click, function() {scope.foo;scope.bar;});} }});app.controller(MainCtrl, function($scope) {$scope.foo 0;$scope.bar 0; });例子中我们绑定了foo和bar到了ul上的li中我们想每当我们点击的时候foo和bar都会增加一 那实际情况中我们点击之后会发生什么呢我们能不能看到foo和bar按照我们预期的变化呢 答案是不会因为上面的click是没有被包含在$apply中调用的。 这样是否意味着我们不能这样控制我们想要的变化呢实际上不是的我们是可以的 实际上$scope上的foo和bar都是变化了的只是它没有执行$digest loop所以也就没有意识到$watch的变化 这样也意味着如果我在之后调用$apply这样所有的$watch都会知道变化然后就会更新相应的DOM !DOCTYPE html html ng-appapp head script srchttp:cdn.staticfile.org/angular.js/1.2.10/angular.min.js/script meta charsetutf-8 / titleDirective example/title /head body ng-controllerMainCtrlclickable foofoo barbar/clickablehr /{{ hello }} button ng-clicksetHello()Change hello/button /body /html app angular.module(app, []);app.controller(MainCtrl, function($scope) {$scope.foo 0;$scope.bar 0;$scope.hello Hello;$scope.setHello function() {$scope.hello World;}; });app.directive(clickable, function() {return {restrict: E,scope: {foo: ,bar: },template: ul stylebackground-color: lightblueli{{foo}}/lili{{bar}}/li/ul,link: function(scope, element, attrs) {element.bind(click, function() {scope.foo;scope.bar;});}}}); 如果你点击上面蓝色区域你是不会看到任何变化的但是之后再点击button的话 你就会突然看到0的数字变成一个数字这个数字就是刚刚你点击了蓝色区域多少下的数字 就像刚刚我上面说的那样指令里的click并没有触发$digest loop但是当你点击button按钮的时候 按钮button上的ng-click就会调用$apply然后就会执行$digest loop 所有的$watch就会检查有没有改变其中包含了foo和bar这两个$watch   这时你可能会想这样的结果不是你想要的你想要你点击那个指令块的时候马上就能看到变化。 其实这很简单只需要调用的时候包含$apply就可以了 element.bind(click, function() {scope.foo;scope.bar;scope.$apply(); }); $apply是$scope或者是指令link function上的scope上的一个函数function所以调用它会强制执行$digest loop 注意如果已经有一个轮询loop了在这种情况下调用它将抛出一个异常,这是一个迹象表明,我们不需要再调用$apply了。 其实上面的用法更好的是这样使用 element.bind(click, function() {scope.$apply(function() {scope.foo;scope.bar;}); }) 这两种用法有什么区别呢 区别是第一种用法中我们更新新的值是在angular context外部所以当有错误的时候Angular是不会知道的。 显然在上面的小例子中它不会产生多大影响但是想像下当我们在复杂项目使用多种库然后出错的时候Angular是不会知道自己的错误   所以如果你想在在项目中使用 jQuery plugin你要确保你有调用$apply来执行$degest loop来更新DOM的变化。 Conclusion 最后我希望你看完就明白了 Angular中data-binding的工作原理我猜你看完的第一印象会觉得dirty-checking是很慢的 实际上它是很快的实际上只有页面上达到2000-3000 个$watch的时候它才会出现性能上的延迟但是我觉得你应该用不到那么多个。   注本文基本取自于$watch How the $apply Runs a $digest 原文地址http://angular-tips.com/blog/2013/08/watch-how-the-apply-runs-a-digest/ 转载于:https://www.cnblogs.com/cunjieliu/p/4370441.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/88570.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有哪些网站可以做毕业设计网站建设分金手指专业十三

MATLAB R2023b 是 MathWorks 发布的最新版本的 MATLAB,适用于进行算法开发、数据可视化、数据分析以及数值计算等任务的工程师和科学家。它包含了一系列新增功能和改进,如改进了数据导入工具,增加了对数据帧和表格对象的支持,增强…

网站关键词突然没有排名了淄博平台公司

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《驱动系列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点…

沽源网站建设做购物网站实例代码

hadoop的伪分布模式 伪分布模式的特点部署伪分布模式hadoop-env.shhdfs-site.xmlcore-site.xmlmapred-site.xmlyarn-site.xml对NameNode进行格式化启动Hadoop 对部署是否完成进行测试免密码模式免密码模式的原理(重要)免密码模式的配置 伪分布模式的特点…

jsp做网站图片怎么存储廊坊网站制作官网

PICO 开发者中心概览 ADB 是一个轻量级的 Android 调试桥(Android Debug Bridge,简称 ADB),用于与 Android 设备进行通信和调试。ADB提供了许多有用的功能,使开发人员能够轻松地管理和调试设备上的应用程序。 你可以使用 PDC 工具来调试系统…

广东顺德网站建设玉林博白网站建设

本章主要为大家介绍java多态的概念,以及便于理解的多态简单例子。 Java 多态 多态是同一个行为具有多个不同表现形式或形态的能力。 多态性是对象多种表现形式的体现。 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比…

机械公司网站源码南京网站制作公司有哪些

(1)设备信息模块:记录设备的基本信息,如设备采购来源信息、设备需求量、当前数量、日期等。 (2) 用户模块:教师职工。实现对用户个人信息、消息管理和实验室设备的查询使用申请等。 (3) 管理员模块:实现对所有设备信息的增删改查&…

外贸企业建网站做航模的网站

最近遇到一个React上传组件的问题,即上传附件成功后,文件展示处仍然还有之前上传附件的缓存信息,需要解决的问题是,要把上一次上传的附件缓存在上传成功或者取消后,可以进行清除 经过一顿试错,终于解决了这…

上犹建设局网站安徽专业做网站的公司

npm create vuelatest相关创建代码:

可以做产品推广的网站长沙房地产市场

Node.js是由事件驱动的,每个任务都可以当作一个事件来处理,本贴将对Node.js中的events模块及其中处理事件的类EventEmitter的使用进行详细讲解。 1、EventEmitter对象 在JavaScript中,通过事件可以处理许多用户的交互,比如鼠标…

o2o好网站进入网站前如何做环境检测

原因1:数字锁没有打开 没有打开NumLock(数字小键盘上面有一个【Num】按键),需要按键开启。 注意要检查NumLock灯是否亮起。 或者改成用字母键上面的数字键输入就好了。 原因2:root密码设置错误(这个是比较常…

wordpress页面回收站位置动易医院网站管理系统

sqli-labs是一款学习SQL 注入的开源平台,共有75种不同类型的注入,在本书 的同步网站下载完压缩包后并解压,复制源码然后将其粘贴到网站的目录中,进入 MySQL 管理中的phpMyAdmin, 打开http://127.0.0.1/phpMyAdmin/, 在数据库…

在putty做网站要拷贝什么湘潭市建设网站

1、文件服务器:是一种网络服务器,他能够把共享文件夹或者是网络驱动器映射到本地计算机上面,这样企业里的用户都可以很方便的访问和共享文件,文件服务器还能够存储大量的数据,提供备份,安全性也很高&#x…

做的好的网站有哪些安徽网站建

文章目录 前言1. 同步以及命令传播1.1 同步1.2 命令传播 2. 解决从服务器断线重连2.1 解决方案 3. PSYNC命令4. 复制步骤1:设置主服务器的地址和端口步骤2:建立套接字连接 ——其实就是建立TCP连接步骤3:发送PING命令步骤4:身份验证步骤5:发送端口信息步骤6:同步步骤7:命令传播…

起零网站建设邢台柏乡县建设局网站

nginx:一个高性能、轻量级的web服务软件 1、稳定性高(没有apache稳) 2、系统资源消耗低(处理http请求的并发能力很高,单台物理服务器可以处理3万到5万个并发请求) 稳定:一般在企业中&#xff…

车票网站模板网站设计大概收费范围

一、源码特点 java Web运输公司管理系统是一套完善的java web信息管理系统 serlvetdaobean mvc 模式开发 ,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主 要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5…

网站建设教程 湖南岚鸿潍坊网站托管

本文由 Jonathan 译自 https://medium.muz.li/how-to-succeed-in-wireframe-design-2ab3cd5c4bc9我们常轻忽身边习以为常的事物,觉得没有必要为一些看似简单又可有可无的东西浪费时间——例如线框图。虽然没必要凡事都寻根问底,但当面对复杂问题时&#…

来年做哪个网站能致富网络基础知识

题目描述 请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。实现 MyStack 类: void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素…

江阴市住房与建设局网站东莞网站建设咨询公

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布,对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容,欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter,并加入 Discord 社区&#xf…

北京网站建设文章建设网站后申请什么类型专利

AAC(Advanced Audio Coding)是一种高级音频编码算法,用于对音频进行高效的压缩,并提供更好的音质。AAC算法是MPEG-2和MPEG-4标准中定义的音频编码格式之一。 以下是AAC算法的主要步骤: 分帧:将输入音频信号…

2017优秀网站设计设计一个电商网站

在深度学习中,nn.Identity() 是 PyTorch 中的一个层(layer)。它实际上是一个恒等映射,不对输入进行任何变换或操作,只是简单地将输入返回作为输出。 通常在神经网络中,各种层(比如全连接层、卷…