说说AngularJS中的$parse和$eval的用法
AngularJS的初学者常常会对$parse和$eval两个内建服务感到有些困惑,今天我们就来说说AngularJS中的$parse和$eval。
总的来说,$parse和$eval都是作用于AngularJS的表达式。
什么是表达式?
AngularJS中的表达式就是一些类似于JavaScript代码的代码片段(但是它们和JavaScript代码有不尽相同)。表达式通常被用来防止在绑定中,例如{{expression}}。下面是一个例子:
1 + 2 = {{ 1 + 2 }}
或者:
My name is {{ user.name }}
$parse服务
$parse服务可以讲一个表达式转换为一个函数。这个函数可以被调用,其中的参数是一个上下文对象,通常来说是作用域。
另外,通过$parse的表达式返回的这个函数有一个assign属性。这个assign属性也是一个函数,它可以用来在给定的上下文中改变这个表达式的值。
下面是一段简单的代码:
<div my-attr="obj.name" my-directive>testing</div>
app.directive('myDirective',function($log,$parse){
return function(scope,elem,attrs){
//解析"my-attr属性值到一个函数中"
var model = $parse(attrs.myAttr);
//model现在是一个函数,可以调用它来获取表达式的值
//下面这行代码将会输出作用域中obj.name的值
$log.log(model(scope));
elem.bind('click',function(){
//'model.assign'也是一个函数,它用来更新表达式的值
model.assign(scope,'New name');
scope.$apply();
})
}
});
上面的例子可以充分体现我们为什么需要$parse服务。如果属性值是name,那么我们完全可以不用$parse,只用scope[attrs.myAttr]即可。但是在上面的例子中,方括号并不管用。
$eval服务
$eval是一个作用域scope中的方法,它将会在当前作用域中执行一个表达式并返回结果:
scope.a = 1;
scope.b = 2;
scope.$eval('a+b'); // 3
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
相关文章
Angular 4依赖注入学习教程之InjectToken的使用(八)
这篇文章主要给大家介绍了关于Angular 4依赖注入之InjectToken使用的相关资料,文中介绍的非常详细,对大家学习或者使用Angular4具有一定的参考学习价值,需要的朋友们下面来跟着小编一起学习学习吧。2017-06-06
Angular.JS判断复选框checkbox是否选中并实时显示
最近因为工作需要做了一个选择标签的功能,把一些标签展示给用户,用户选择自己喜欢的标签,就类似我们在购物网站看到的那种过滤标签似的,所以这篇文章就给大家介绍了Angular.JS判断复选框checkbox是否选中并实时显示的方法,下面来一起看看吧。2016-11-11
Angular.js中angular-ui-router的简单实践
本篇文章主要介绍了Angular.js中angular-ui-router的简单实践,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-07-07
Angular入口组件(entry component)与声明式组件的区别详解
这篇文章主要给大家介绍了关于Angular入口组件(entry component)与声明式组件的区别的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。2018-04-04


最新评论