说说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查看对象功能代码
Apr 25 Javascript
为调试JavaScript添加输出窗口的代码
Feb 07 Javascript
ExtJs事件机制基本代码模型和流程解析
Oct 24 Javascript
js实现二代身份证号码验证详解
Nov 20 Javascript
jQuery通过扩展实现抖动效果的方法
Mar 11 Javascript
javascript实现瀑布流加载图片原理
Feb 02 Javascript
Node.js利用debug模块打印出调试日志的方法
Apr 25 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
使用JS动态显示文本
Sep 09 Javascript
element-ui使用导航栏跳转路由的用法详解
Aug 22 Javascript
Weex开发之地图篇的具体使用
Oct 16 Javascript
vue中get请求如何传递数组参数的方法示例
Nov 08 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
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
PHP 输出缓存详解
2009/06/20 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
关于IIS php调用com组件的权限问题
2012/01/11 PHP
深入理解php printf() 输出格式化的字符串
2016/05/23 PHP
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
对于input 框限定输入值为浮点型的js代码
2017/09/25 Javascript
基于Vue实现图片在指定区域内移动的思路详解
2018/11/11 Javascript
原生js拖拽实现图形伸缩效果
2020/02/10 Javascript
js回调函数原理与用法案例分析
2020/03/04 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
[00:37]DOTA2上海特级锦标赛 OG战队宣传片
2016/03/03 DOTA
浅谈python中的占位符
2017/11/09 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python实现一个简单的并查集的示例代码
2018/03/19 Python
浅析Python3中的对象垃圾收集机制
2019/06/06 Python
Python 异常处理Ⅳ过程图解
2019/10/18 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
Django 删除upload_to文件的步骤
2020/03/30 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
Django contrib auth authenticate函数源码解析
2020/11/12 Python
智能钱包:Ekster
2019/11/21 全球购物
客服主管岗位职责
2013/12/13 职场文书
办公室文员岗位职责范本
2014/06/12 职场文书
计生工作先进事迹
2014/08/15 职场文书
写景作文评语集锦
2014/12/25 职场文书
会议开幕词
2015/01/28 职场文书
导游词之安徽九华山
2019/09/18 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
详解CocosCreator项目结构机制
2021/04/14 Javascript
漫画「处刑少女的生存之道」第3卷封面公开
2022/03/21 日漫