说说AngularJS中的$parse和$eval的用法


Posted in Javascript onSeptember 14, 2017

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

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Prototype使用指南之base.js
Jan 10 Javascript
基于jsTree的无限级树JSON数据的转换代码
Jul 27 Javascript
JQuery触发radio或checkbox的change事件
Dec 18 Javascript
jQuery遍历之next()、nextAll()方法使用实例
Nov 08 Javascript
chrome不支持form.submit的解决方案
Apr 28 Javascript
JavaScript String 对象常用方法详解
May 13 Javascript
JavaScript数据结构中栈的应用之表达式求值问题详解
Apr 11 Javascript
javascript过滤数组重复元素的实现方法
May 03 Javascript
利用Javascript实现一套自定义事件机制
Dec 14 Javascript
基于node下的http小爬虫的示例代码
Jan 11 Javascript
微信小程序使用npm包的方法步骤
Aug 13 Javascript
Openlayers实现测量功能
Sep 25 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
Sep 14 #Javascript
日期时间范围选择插件:daterangepicker使用总结(必看篇)
Sep 14 #Javascript
详解React Native顶|底部导航使用小技巧
Sep 14 #Javascript
Angularjs 1.3 中的$parse实例代码
Sep 14 #Javascript
浅谈JavaScript中的属性:如何遍历属性
Sep 14 #Javascript
基于node.js express mvc轻量级框架实践
Sep 14 #Javascript
gulp教程_从入门到项目中快速上手使用方法
Sep 14 #Javascript
You might like
WINDOWS服务器安装多套PHP的另类解决方案
2006/10/09 PHP
PHP实现文件上传与下载实例与总结
2016/03/13 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
mysqli扩展无法在PHP7下升级问题的解决
2019/09/10 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JavaScript的parseInt 进制问题
2009/05/07 Javascript
JQuery 入门实例1
2009/06/25 Javascript
JS 时间显示效果代码
2009/08/23 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
使用JQuery和CSS模拟超链接的用户单击事件的实现代码
2012/05/23 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
javascript实现全角半角检测的方法
2015/07/23 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
AngularJS表单验证中级篇(3)
2016/09/28 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Javascript中的神器——Promise
2017/02/08 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
2018/08/23 jQuery
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
[59:32]Liquid vs Fnatic 2019国际邀请赛淘汰赛败者组BO1 8.20.mp4
2020/07/19 DOTA
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
numpy返回array中元素的index方法
2018/06/27 Python
Tensorflow使用支持向量机拟合线性回归
2018/09/07 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
python中什么是面向对象
2020/06/11 Python
澳洲的服装老品牌:SABA
2018/02/06 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
捷克浴室和厨房设备购物网站:SIKO
2018/08/11 全球购物
秦兵马俑教学反思
2014/02/07 职场文书
学校组织向国旗敬礼活动方案(中小学适用)
2014/09/27 职场文书
群众路线组织生活会发言材料
2014/10/17 职场文书
经营目标责任书
2015/05/08 职场文书
前端学习——JavaScript原生实现购物车案例
2021/03/31 Javascript