说说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 相关文章推荐
如何实现iframe(嵌入式帧)的自适应高度
Jul 26 Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 Javascript
Jquery从头学起第四讲 jquery入门教程
Aug 01 Javascript
Google Maps API地图应用示例分享
Oct 23 Javascript
JavaScript中的包装对象介绍
Jan 27 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
Oct 27 Javascript
jQuery EasyUI 折叠面板accordion的使用实例(分享)
Dec 25 jQuery
node错误处理与日志记录的实现
Dec 24 Javascript
实例讲解JS中pop使用方法
Jan 27 Javascript
layui 中select下拉change事件失效的解决方法
Sep 20 Javascript
微信小程序音乐播放器开发
Nov 20 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
用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针对JSON操作实例分析
2015/01/12 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
IE6/7/8中Option元素未设value时Select将获取空字符串
2011/04/07 Javascript
别了 JavaScript中的isXX系列
2012/08/01 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
实现一个简单的vue无限加载指令方法
2017/01/10 Javascript
微信小程序 高德地图SDK详解及简单实例(源码下载)
2017/01/11 Javascript
JavaScript在控件上添加倒计时功能的实现代码
2017/07/04 Javascript
react-native-fs实现文件下载、文本存储的示例代码
2017/09/22 Javascript
JavaScript数据结构之优先队列与循环队列实例详解
2017/10/27 Javascript
vue项目中的webpack-dev-sever配置方法
2017/12/14 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
webpack的pitching loader详解
2019/09/23 Javascript
webpack proxy 使用(代理的使用)
2020/01/10 Javascript
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
美国顶级户外凉鞋品牌:Chacos
2017/03/27 全球购物
GAP阿联酋官网:GAP UAE
2017/11/30 全球购物
澳大利亚排名第一的露营和户外设备在线零售商:Outbax
2020/05/06 全球购物
如何在Shell脚本中使用函数
2015/09/06 面试题
行政人员岗位职责
2013/12/08 职场文书
活动邀请函范文
2014/01/19 职场文书
保密承诺书范文
2014/03/27 职场文书
小学课外活动总结
2014/07/09 职场文书
师德师风的心得体会
2014/09/02 职场文书
2014年党的群众路线教育实践活动整改措施(个人版)
2014/09/25 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书
javascript函数式编程基础
2021/09/15 Javascript
Netty客户端接入流程NioSocketChannel创建解析
2022/03/25 Java/Android