我知道$ parse和$ eval都运行在Angular表达式上。为什么Angular团队创造了这两个?
我检查了角度库,$ eval定义如下:
$eval: function(expr,locals) { return $parse(expr)(this,locals); }@H_404_4@所以有什么区别:
$parse(expr)(context,locals);@H_404_4@和
$eval: function(expr,locals); }@H_404_4@我想知道哪一个是最佳实践?什么时候使用这两个?
你注意到,
$parse(expr)($scope,locals)@H_404_4@完全相当于
$scope.$eval(expr,locals)@H_404_4@但是,$ parse是比$ eval更“基本”的操作,所以你可以在一个地方解析一次(例如,在一个指令的编译函数中):
var parsedExpr = $parse(tAttrs.p1);@H_404_4@并在其他地方重复使用(例如,在控制器功能中)
var childScope1 = $scope.$new(); var childScope2 = $scope.$new(); var r1 = parsedExpr(childScope1); var r2 = parsedExpr(childScope2);@H_404_4@