AngularJs数据绑定原理
注这篇博文主要是写给新手的,是给那些刚刚开始接触Angular,并且想了解数据帮定是如何工作的人。如果你已经对Angular比较了解了,那强烈建议你直接去阅读源代码。 Angular用户都想知道数据绑定是怎么实现的。你可能会看到各种各样的词汇: 让我们从头开始吧。 浏览器事件循环和Angular.js扩展我们的浏览器一直在等待事件,比如用户交互。假如你点击一个按钮或者在输入框里输入东西,事件的回调函数就会在javascript解释器里执行,然后你就可以做任何DOM操作,等回调函数执行完毕时,浏览器就会相应地对DOM做出变化。 Angular拓展了这个事件循环,生成一个有时成为 $watch 队列($watch list)每次你绑定一些东西到你的UI上时你就会往$watch队列里插入一条
User: <input type="text" ng-model="user" /> Password: <input type="password" ng-model="pass" /> 在这里我们有个 接着看下面的例子:
app.controller('MainCtrl', function($scope) { $scope.foo = "Foo"; $scope.world = "World"; }); 这里,即便我们在 再看下面的例子: 这里又生成了多少个 还记得我前面提到的扩展的事件循环吗?当浏览器接收到可以被 这就是所谓的 例如: 这里我们有一个 这里很重要的(也是许多人的很蛋疼的地方)是每一个进入 谁决定什么事件进入 如果当事件触发时,你调用 这是Angular新手共同的痛处。为什么我的jQuery不会更新我绑定的东西呢?因为jQuery没有调用 我们来看一个有趣的例子: 假设我们有下面这个directive和controller 它将 那我们点击元素的时候会发生什么呢?我们能看到更新吗?答案是否定的。因为点击事件是一个没有封装到 真正的结果是: 试试看吧:http://jsbin.com/opimat/2/ 如果我们点击这个directive(蓝色区域),我们看不到任何变化,但是我们点击按钮时,点击数就更新了。如刚才说的,在这个directive上点击时我们不会触发 现在你在想那并不是你想要的,你想要的是点击蓝色区域的时候就更新点击数。很简单,执行一下 试试看:http://jsbin.com/opimat/3/edit 有用啦!但是有一种更好的使用 有什么不一样的?差别就是在第一个版本中,我们是在 因此,如果你想使用一个jQuery插件,并且要执行 有时候我想多说一句的是有些人在不得不调用 你已经知道了我们设置的任何绑定都有一个它自己的 来看个例子: 这就是我们创造一个新的 试试看:http://jsbin.com/ucaxan/1/edit 例子2: watch的第二个参数接受两个参数,新值和旧值。我们可以用他们来略过第一次的执行。通常你不需要略过第一次执行,但在这个例子里面你是需要的。灵活点嘛少年。 例子3: 我们想要监视 试试看:http://jsbin.com/ucaxan/3/edit 呃?没用,为啥?因为 例子4: 试试看:http://jsbin.com/ucaxan/4/edit 现在有用了吧!因为我们对 关于 好吧,我希望你们已经学会了在Angular中数据绑定是如何工作的。我猜想你的第一印象是 无论如何,随着ECMAScript6的到来,在Angular未来的版本里我们将会有 另一方面,这个主题并不容易,如果你发现我落下了什么重要的东西或者有什么东西完全错了,请指正(原文是在GITHUB上PR 或报告issue) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |