说说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 相关文章推荐
js常见表单应用技巧
Jan 09 Javascript
某页码显示的helper 少量调整,另附js版
Sep 12 Javascript
如何将一个String和多个String值进行比较思路分析
Apr 22 Javascript
document.write()及其输出内容的样式、位置控制
Aug 12 Javascript
jQuery toggleClass应用实例(附效果图)
Apr 06 Javascript
html的DOM中Event对象onblur事件用法实例
Jan 21 Javascript
在linux中使用包管理器安装node.js
Mar 13 Javascript
AngularJS Bootstrap详细介绍及实例代码
Jul 28 Javascript
JS小数转换为整数的方法分析
Jan 07 Javascript
基于JavaScript实现带数据验证和复选框的表单提交
Aug 23 Javascript
详解vue数组遍历方法forEach和map的原理解析和实际应用
Nov 15 Javascript
Javascript组合继承方法代码实例解析
Apr 02 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
浅谈PHP中Stream(流)
2015/06/08 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
javascript下function声明一些小结
2007/12/28 Javascript
JS控制日期显示的小例子
2013/11/23 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
JQuery实现超链接鼠标提示效果的方法
2015/06/10 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
jquery UI Datepicker时间控件的使用方法(基础版)
2015/11/07 Javascript
一篇文章掌握RequireJS常用知识
2016/01/26 Javascript
无阻塞加载js,防止因js加载不了影响页面显示的问题
2016/12/18 Javascript
如何解决jQuery EasyUI 已打开Tab重新加载问题
2016/12/19 Javascript
微信小程序 列表的上拉加载和下拉刷新的实现
2017/04/01 Javascript
详解vue的数据binding绑定原理
2017/04/12 Javascript
jQuery动态追加页面数据以及事件委托详解
2017/05/06 jQuery
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
JavaScript this指向相关原理及实例解析
2020/07/10 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
pygame学习笔记(5):游戏精灵
2015/04/15 Python
python实现汉诺塔递归算法经典案例
2021/03/01 Python
Python实现判断给定列表是否有重复元素的方法
2018/04/11 Python
Python 计算任意两向量之间的夹角方法
2019/07/05 Python
找Python安装目录,设置环境路径以及在命令行运行python脚本实例
2020/03/09 Python
Python opencv相机标定实现原理及步骤详解
2020/04/09 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
State Cashmere官网:半零售价可持续蒙古羊绒
2020/02/26 全球购物
某个公司的Java笔面试题
2016/03/11 面试题
汽车专业毕业生自荐信
2013/11/03 职场文书
《七颗钻石》教学反思
2014/02/28 职场文书
镇政府副镇长群众路线专题民主生活会对照检查材料
2014/09/19 职场文书
公司更名通知函
2015/04/24 职场文书
创业计划书之都市休闲农庄
2019/12/28 职场文书
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers
CSS控制继承中的height能变为可继承吗
2022/06/10 HTML / CSS