一、$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
如果觉得《AngularsJS中的$parse $eval》对你有帮助,请点赞、收藏,并留下你的观点哦!