我知道这一点$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);,任何情况下,但在的情况下,$eval该context会的scope.
| 归档时间: |
|
| 查看次数: |
18270 次 |
| 最近记录: |