angularjs

angular 表达式 通过$parse服务解析执行。

与Javascript表达式的区别

1.属性求值:所有属性的求值是对于scope的,而javascript是对于window对象的;

2.宽容:表达式求值,对于underfined和null,angular是宽容的,单javascript会产生NullPointerExceptions=

3.没有流程控制语句:在angular表达式里,不能做以下任何的事:条件分支、循环、抛出异常。

4.过滤器(filters):我们可以就将表达式的结果传入过滤链(filter chains);

<body ng-app>
	<!--
	 model==>1213 
	 view ==>1213
	 3个view 
     数据是双向的
	-->
	<input type="test" ng-model="name"/>
	<!--angular 的表达式-->
	{{name}}
	<input type="test" ng-model="name"/>
	<!--<script type="text/javascript">
		var string='alert(1+2)';
		eval(string);
	</script>-->
</body>

scope是指向应用model的object,也是表达式的执行上下文。

scope被放置于一个类似应用的DOM结构的层次结构中。

变量变量:

1.能通过固定的接口才能改变变量的值,比如说只能通过set()设置变量的值,set被调用时比较一下就知道了。比较繁琐。

2.脏检查。

angular 使用的就是脏检查:

1.不会脏检查所有的对象,当对象被绑定到html中,这个对象添加为检查对象(watcher).

2.不会脏检查所有的属性,同样当属性被绑定后,这个属性会被列为检查的属性。

当angular程序初始化时,会将绑定的对象的属性添加为监听对象(watcher),也就是说一个对象绑定了N个属性,就会添加N个watcher。

什么时候去脏检查?

angular所系统的方法中都会触发比较事件,比如:controller初始化的时候,所有以ng-开头的事件执行后,都会触发脏检查。

手动触发脏检查:

$apply仅仅只是进入angular context,然后通过$digest去触发脏检查

$apply如果不给差数的话,检查该$scope里的所有监听的属性,推荐给上参数

$digest()

所属的scope和其所有子scope的脏检查,脏检查又会触发$watch().整个Angular双向绑定机制就活了起来

不建议直接调用$digest(),而应该使用$apply(),$apply 其实不能把信直接送给$apply,之间还有$eval门卫把关,如果$apply带的表达式不合法

$eval会把错误送交$exceptionHandler,合法才触发digest,所以更安全。

怎么触发脏检查?

  首先通过$apply方法,去触发eval()方法,当eval()解析器解析成功的时候,会触发digest()方法,digest()方法就会触发watch()方法,

$watch():

在digest执行时,如果watch观察的value与上次执行时不一样时,就会被触发

Angularjs 内部的watch实现了页面随model的及时更新

$watch(watchFn,watchAction,deepWatch)

watchFn:angular表达式或函数的字符创

watchAction(newValue,oldValue,scope):watchFn发生变化会被调用

deepWatch:可选择的布尔值命令检查被监控的对象的每个属性是否发生变化

$watch会返回一个函数,想要注销这个watch可以使用函数。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值