angularjs培训之重新理解双向绑定和事件详解

AngularJS双向绑定与事件通信
本文详细介绍了AngularJS中的双向绑定机制,并通过实例演示如何使用ng-click指令和watch进行模型变化的监听。此外,还讲解了如何利用$emit和$broadcast实现在不同作用域间的事件通信。

双向绑定是angularjs亮点之一,在前面的《angularjs培训之helloworld》篇中大概介绍了下双向绑定,现在我们“旧事重提”,先看下下面的代码片段:
view中:

 <input type=’button’ ng-click=”set()” value=”set Value”> 
<input type=”text” ng-model=’userName2’>
controller中对应的方法:

scope.set=function()$scope.userName2=Eason; scope. watch(userName2,function()alert(ngmodeluserName2hasbeenchanged,nowis:+$scope.userName2););modeluserName2inputEason使 watch注册一个观察事件,当模型userName2的值发生变化时,会触发注册的回调方法,打印出该模型中的值。

wKioL1Q2L0HyP3YwAADe4uPQjy0831.jpg

有了这个图双向绑定好理解多了吧。内部的实现机制后续咱们介绍。

有了按钮怎么给按钮注册呢?在angularjs中我们可以使用内置的指令ng-click来绑定事件,即上面代码中的 ng-click=”set()”,在controller中就可以使用 scope.set的形式实现方法。ng-click其实对html原始click事件的封装,其实不止是click事件,原生的事件向focus,blur,change事件都可以在angularjs中官方API中找到对应的方法。具体的可以戳这里http://docs.angularjs.cn/api/ng/directive

在上讲中我们通过实例看了下scope的嵌套,现在如果我们想要一个特定的功能能横跨多个scope,需要提供一个有用的方法使得可以在任意两个controller之间通信,该怎么做呢?其实在angularjs中提供了沿着scope作用域链向上或者向下发送消息来通信,即 emit, broadcast

先看下图:

wKiom1Q2Pu-CYALSAABmlT2Q_e4935.jpg

emitscope rootScope为止,

$broadcast从当前scope开始向下发送请求,

$emit的基本用法:

scope. emit(‘event name’,argument);
scope. broadcast(‘event name’,argument);
第一个参数为事件名称,第二个名字即为要传递的数据。

现在有了向上和向下传递事件的方法了,该怎么接受对应的事件名称呢?我们可以使用$on监听。如下:

scope. on(‘event name’,function(evt) {
});
下面看一个完整的例子:

function innerCtrl($scope){ 
$scope.$emit(‘someEvent’, [1,2,3]);
}
function outerCtrl($scope){
$scope.$on(‘someEvent’, function(mass) {console.log(mass)});
}
通过运行代码,我们在控制台能看到数组的值。
Event 对象还有很多熟悉和方法,我们大概浏览下:

targetScope,

currentScope,

name,

stopPropagation,

preventDefault,

defaultPrevented :Calling preventDefault() sets defaultPrevented to true

Angularjs也提供了监听公共事件状态的event,例如(之摘录了一部分):

includeContentLoadedThe includeContentLoaded event fires from the ngInclude directive when the ngInclude content is reloaded.

locationChangeSuccessThe locationChangeSuccess event is broadcasted from the rootScopeifandonlyifwehavenotpreventedthe locationChangeStart event when the location of the browser changes successfully

$routeChangeSuccess:

$destroy

好了,这次的介绍到此为止了,有问题请留言,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值