AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值


Posted in Javascript onJanuary 25, 2016

在"AngularJS中自定义有关一个表格的Directive"中自定义了一个有关表格的Direcitve,其表格的表现方式是这样的:

<table-helper datasource="customers" clumnmap="[{name: 'Name'}, {street: 'Street'}, {age: 'Age'}, {url: 'URL', hidden: true}]"></table-helper>

以上,变量colmnmap的值是事先定义在了Scope中的:

return {
restrict: 'E',
scope: {
columnmap: '=',
datasource: '='
},
link:link,
template:template
};

AngularJS中,还有一种运行时给Scope变量赋值的办法,那就是在link函数中使用$parse或$eval方法

在Direcitve的呈现方面和以前一致:

<table-helper-with-parse datasource="customers" columnmap="[{name: 'Name'},...]"></table-helper-with-parse>

Directive大致是这样:

var tableHelperWithParse = function($parse){
var template = "",
link = function(scope, element, attrs){
var headerCols = [],
tableStart = '<table>',
tableEnd = '</table>',
table = '',
visibleProps = [],
sortCol = null,
sortDir = 1,
columnmap = null;
$scope.$watchCollection('datasource', render);
//运行时赋值columnmap
columnmap = scope.$eval(attrs.columnmap);
//或者
columnmap = $parse(attrs.columnmap)();
wireEvents();
function rener(){
if(scope.datasource && scope.datasourse.length){
table += tableStart;
table += renderHeader();
table += renderRows() + tableEnd;
renderTable();
}
}
};
return {
restrict: 'E',
scope: {
datasource: '='
},
link: link,
template: template
}
}
angular.module('direcitvesModule')
.directive('tableHelperWithParse', tableHelperWithParse);

下面给大家介绍下$parse和$eval的不同

首先,$parse跟$eval都是用来解析表达式的, 但是$parse是作为一个单独的服务存在的。$eval是作为scope的方法来使用的。

$parse典型的使用是放在设置字符串表达式映射在真实对象上的值。也可以从$parse上直接获取到表达式对应的值。

var getter = $parse('user.name'); 
var setter = getter.assign; 
setter(scope, 'new name');
getter(context, locals) // 传入作用域,返回值
setter(scope,'new name') // 修改映射在scope上的属性的值为‘new value'

$eval 即scope.$eval,是执行当前作用域下的表达式,如:scope.$eval('a+b'); 而这个里的a,b是来自 scope = {a: 2, b:3};

看看源码它的实现是

$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},

可以找到它也是基于$parse,不过它的参数已经被固定为this,就是当前的scope,所以$eval只是在$parse基础上的封装而已,是一种$parse快捷的API。

Javascript 相关文章推荐
JavaScript 事件系统
Jul 22 Javascript
Document对象内容集合(比较全)
Sep 06 Javascript
jquery实现加载等待效果示例
Sep 25 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
轻松掌握JavaScript状态模式
Sep 07 Javascript
AngularJS实践之使用NgModelController进行数据绑定
Oct 08 Javascript
javascript实现消灭星星小游戏简单版
Nov 15 Javascript
Angularjs实现上传图片预览功能
Sep 01 Javascript
微信小程序使用audio组件播放音乐功能示例【附源码下载】
Dec 08 Javascript
vue如何根据网站路由判断页面主题色详解
Nov 02 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
Apr 25 Javascript
JS可断点续传文件上传实现代码解析
Jul 30 Javascript
学习JavaScript事件流和事件处理程序
Jan 25 #Javascript
javascript产生随机数方法汇总
Jan 25 #Javascript
在AngularJS中如何使用谷歌地图把当前位置显示出来
Jan 25 #Javascript
理解JavaScript表单的基础知识
Jan 25 #Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 #Javascript
JavaScript数组的一些奇葩行为
Jan 25 #Javascript
JavaScript文本框脚本编写的注意事项
Jan 25 #Javascript
You might like
php实现把url转换迅雷thunder资源下载地址的方法
2014/11/07 PHP
php高清晰度无损图片压缩功能的实现代码
2018/12/09 PHP
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
Jquery实现搜索框提示功能示例代码
2013/08/13 Javascript
JavaScript实现给按钮加上双重动作的方法
2015/08/14 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
2016/06/25 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
jQuery插件zTree实现的基本树与节点获取操作示例
2017/03/08 Javascript
js实现随机点名小功能
2017/08/17 Javascript
微信小程序用户自定义模版用法实例分析
2017/11/28 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
详解Vue CLI3配置解析之css.extract
2018/09/14 Javascript
从零到一详聊创建Vue工程及遇到的常见问题
2019/04/25 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
2019/09/27 Javascript
d3.js 地铁轨道交通项目实战
2019/11/27 Javascript
vue中 v-for循环的用法详解
2020/02/19 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
Python中删除文件的程序代码
2011/03/13 Python
讲解Python中的递归函数
2015/04/27 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
使用opencv将视频帧转成图片输出
2019/12/10 Python
Python合并2个字典成1个新字典的方法(9种)
2019/12/19 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
详解python 内存优化
2020/08/17 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
10个示例带你掌握python中的元组
2020/11/23 Python
python+opencv实现车道线检测
2021/02/19 Python
Canon佳能美国官方商店:购买数码相机、数码单反相机、镜头和打印机
2016/11/15 全球购物
100%有机精油,美容油:House of Pure Essence
2018/10/30 全球购物
体育专业个人求职信范文
2013/12/27 职场文书
面试后的感谢信范文
2014/02/01 职场文书
产品开发计划书
2014/04/27 职场文书
前台文员岗位职责
2015/02/04 职场文书
考勤制度通知
2015/04/25 职场文书
一级电子管军用接收机测评
2022/04/05 无线电