AngularJS浅谈AngularJS中的$parse和$eval

 

scope.$eval(‘a+b’); // 3

<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();
        })
    }
});

scope.a = 1;
scope.b = 2;

哪些是表达式?
AngularJS中的表明式便是一对好像于JavaScript代码的代码片段(可是它们和JavaScript代码有互不相同)。表明式通常被用来防护在绑定中,例如{{expression}}。上边是1个例证:

1 + 2 = {{ 1 + 2 }}
或者:

My name is {{ user.name }}
$parse服务
$parse服务能够讲贰个表达式转换为一个函数。这几个函数能够被调用,在那之中的参数是1个上下文对象,日常来说是成效域。

$eval服务
$eval是1个成效域scope中的方法,它将会在近期功能域中实践3个表明式并回到结果:

上边是一段简单的代码:

别的,通过$parse的表明式重返的这几个函数有二个assign属性。那几个assign属性也是1个函数,它可以用来在给定的上下文中改变这些表达式的值。

上面的例子能够丰富显示我们怎么需求$parse服务。倘使属性值是name,那么大家完全可以绝不$parse,只用scope[attrs.myAttr]即可。不过在上头的例子中,方括号并不可行。

看来,$parse和$eval都以法力于AngularJS的表明式。

AngularJS的初学者平常会对$parse和$eval三个内建劳动感到有点猜疑,后天大家就来说说AngularJS中的$parse和$eval。

相关文章