$ parse vs $ eval?哪一个是最佳实践?

Muk*_*mar 24 angularjs

我知道这一点$parse并且$eval都在Angular表达式上运行.那么为什么Angular团队创建了这两个?

我检查了角度库,$eval定义如下:

$eval: function(expr, locals) {
        return $parse(expr)(this, locals);
      }
Run Code Online (Sandbox Code Playgroud)

那么有什么区别:

$parse(expr)(context, locals);
Run Code Online (Sandbox Code Playgroud)

$eval: function(expr, locals) {
        return $parse(expr)(this, locals);
      }
Run Code Online (Sandbox Code Playgroud)

我想知道哪一个是最佳做法?什么时候使用这两个?

New*_*Dev 32

你注意到了,

$parse(expr)($scope, locals)
Run Code Online (Sandbox Code Playgroud)

正好相当于

$scope.$eval(expr, locals)
Run Code Online (Sandbox Code Playgroud)

但是,$parse更多的是"基本"操作$eval,因此,您可以$parse在一个地方(例如,在compile指令的功能中):

var parsedExpr = $parse(tAttrs.p1);
Run Code Online (Sandbox Code Playgroud)

并在其他地方重复使用(例如,在controller函数中)

var childScope1 = $scope.$new();
var childScope2 = $scope.$new();

var r1 = parsedExpr(childScope1);
var r2 = parsedExpr(childScope2);
Run Code Online (Sandbox Code Playgroud)


sfl*_*che 20

我认为重要的区别在于,这$eval是一种scope在当前作用域上执行表达式的方法,$parse而是一种(更全局可用的)服务.

因此可以这样说$parse(expr)(context, locals);,任何情况下,但在的情况下,$evalcontext会的scope.