说说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 相关文章推荐
url 特殊字符 传递参数解决方法
Jan 01 Javascript
jquery ajax abort()的使用方法
Oct 28 Javascript
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
Dec 25 Javascript
javascript中获取下个月一号,是星期几
Jun 01 Javascript
JS对img进行操作(换图片/切图/轮换/停止)
Apr 17 Javascript
javascript 动态创建表格
Jan 08 Javascript
Web前端新人笔记之jquery入门心得(新手必看)
May 17 Javascript
jquery获取点击控件的绝对位置简单实例
Oct 13 Javascript
jQuery通过ajax快速批量提交表单数据
Oct 25 Javascript
微信小程序ibeacon三点定位详解
Oct 31 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
Apr 07 Javascript
jQuery开发仿QQ版音乐播放器
Jul 10 jQuery
用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 获取客户端真实IP地址多种方法小结
2010/05/15 PHP
PHP获取MAC地址的具体实例
2013/12/13 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
2014/06/19 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
php微信开发之关注事件
2018/06/14 PHP
CutePsWheel javascript libary 控制输入文本框为可使用滚轮控制的js库
2010/02/07 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
node.js中的http.response.writeHead方法使用说明
2014/12/14 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
js实现改进的仿蓝色论坛导航菜单效果代码
2015/09/06 Javascript
JavaScript使ifram跨域相互访问及与PHP通信的实例
2016/03/03 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
深入理解jQuery 事件处理
2016/06/14 Javascript
详细解读Jquery各Ajax函数($.get(),$.post(),$.ajax(),$.getJSON())
2016/08/15 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
详解jQuery简单的表格应用
2016/12/16 Javascript
实战node静态文件服务器的示例代码
2018/03/08 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
微信小程序使用form表单获取输入框数据的实例代码
2018/05/17 Javascript
微信运维交互机器人的示例代码
2018/11/12 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[03:12]2016完美“圣”典风云人物:单车专访
2016/12/02 DOTA
Python里隐藏的“禅”
2014/06/16 Python
python基础教程之对象和类的实际运用
2014/08/29 Python
Python的Django框架使用入门指引
2015/04/15 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python 检查是否为中文字符串的方法
2018/12/28 Python
python地震数据可视化详解
2019/06/18 Python
加拿大鞋网:Globo Shoes
2019/12/26 全球购物
医院办公室主任职责
2013/12/29 职场文书
初三政治教学反思
2014/01/30 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
病人写给医生的感谢信
2015/01/23 职场文书
SpringCloud的JPA连接PostgreSql的教程
2021/06/26 Java/Android