AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值  更新时间:2016年01月25日 11:41:50   投稿:mrr   这篇文章主要介绍了AngularJS中如何使用$parse或$eval在运行时对Scope变量赋值的相关资料,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下 在”AngularJS中自定义有关一个表格的Directive”中自定义了一个有关表格的Direcitve,其表格的表现方式是这样的: 以上,变量colmnmap的值是事先定义在了Scope中的: return { restrict: ‘E’, scope: { columnmap: ‘=’, datasource: ‘=’ }, link:link, template:template }; AngularJS中,还有一种运行时给Scope变量赋值的办法,那就是在link函数中使用$parse或$eval方法。 在Direcitve的呈现方面和以前一致: Directive大致是这样: var tableHelperWithParse = function($parse){ var template = “”, link = function(scope, element, attrs){ var headerCols = [], tableStart = ”, tableEnd = ”, 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。 您可能感兴趣的文章: AngularJs $parse、$eval和$observe、$watch详解 说说AngularJS中的$parse和$eval的用法 angularjs scope 赋值 eval parse 相关文章 AngularJS实现树形结构(ztree)菜单示例代码 这篇文章运用示例代码给大家详细介绍了利用AngularJS如何实现树形结构(ztree)菜单,文中仅用了几行AngularJS代码就是了这个功能,对大家日常开发很有帮助,有需要的朋友们可以参考借鉴,下面来一起看看吧。 2016-09-09 AngularJS 前台分页实现的示例代码 本篇文章主要介绍了AngularJS 前台分页实现的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-06-06 Angular2数据绑定详解 本篇文章主要介绍了Angular2数据绑定的相关知识。具有很好的参考价值。下面跟着小编一起来看下吧 2017-04-04 关于使用axios的一些心得技巧分享 vue更新到2.0之后,作者就宣告不再对vue-resource更新,而是推荐的axios,所以下面这篇文章主要给大家分享了关于使用axios的一些心得技巧,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。 2017-07-07 AngularJs验证重复密码的方法(两种) 本文给大家介绍angularjs验证重复密码的两种方法,每种方法都有各自的优缺点,大家可以根据需要选择一种方法,具体内容详情大家通过本文详细了解下吧 2016-11-11 Angularjs全局变量被作用域监听的正确姿势 这篇文章主要介绍了Angularjs全局变量被作用域监听的正确姿势的相关资料,需要的朋友可以参考下 2016-02-02 Angularjs上传图片实例详解 上传图片需要引入插件ngFileUpload,使用bower安装方法,下面通过本文给大家介绍Angularjs上传图片实例详解,希望对大家有所帮助 2017-08-08 angularjs客户端实现压缩图片文件并上传实例 这篇文章主要介绍了angularjs客户端实现压缩图片文件并上传实例,本文直接给出代码实例,需要的朋友可以参考下 2015-07-07 AngularJS对动态增加的DOM实现ng-keyup事件示例 这篇文章主要介绍了AngularJS对动态增加的DOM实现ng-keyup事件示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 2018-03-03 AngularJS中watch监听用法分析 这篇文章主要介绍了AngularJS中watch监听用法,较为详细的分析了$watch的具体功能、相关参数用法与使用注意事项,需要的朋友可以参考下 2016-11-11 最新评论

在”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。

您可能感兴趣的文章:

  • AngularJs $parse、$eval和$observe、$watch详解
  • 说说AngularJS中的$parse和$eval的用法
张贴在3