$parse 대 $eval ? 어떤 것이 최선의 방법입니까?
나는 그것을 알고 있습니다.$parse
그리고.$eval
둘 다 Angular 식으로 작동합니다.그럼 왜 Angular 팀이 이 두개를 만들었을까요?
각 도서관에서 확인해봤는데,$eval
다음과 같이 정의됩니다.
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
}
그렇다면 다음과 다른 점은 무엇입니까?
$parse(expr)(context, locals);
그리고.
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
}
어떤 것이 가장 좋은 방법인지 알고 싶습니다. 그리고 이 두 가지를 언제 사용해야 합니까?
당신이 알아차린 것처럼,
$parse(expr)($scope, locals)
와 정확히 동치입니다.
$scope.$eval(expr, locals)
그렇지만,$parse
보다 "fundament" 작업입니다.$eval
, 그래서, 당신은 할 수 있습니다.$parse
한 곳에 한 번(예: 인)compile
명령의 함수):
var parsedExpr = $parse(tAttrs.p1);
그리고 다른 곳에서 반복적으로 사용합니다 (예를 들어, a에서).controller
함수)
var childScope1 = $scope.$new();
var childScope2 = $scope.$new();
var r1 = parsedExpr(childScope1);
var r2 = parsedExpr(childScope2);
제 생각에 중요한 차이점은$eval
가scope
현재 범위에 대한 식을 실행하는 방법.$parse
는 (전 세계적으로 사용 가능한) 서비스입니다.
이렇게 말씀하시면 됩니다.$parse(expr)(context, locals);
, 어떤 맥락이든 간에, 그러나 의 경우에는.$eval
그context
가 될 것입니다scope
.
$eval은 현재 범위에 대해 $parse을 사용합니다.
당신이 가지고 있다고 치자.
$scope.a = 2;
$scope.b = 4;
$parse("a*b")
결과를 얻기 위해 컨텍스트/객체/범위에 대해 평가해야 하는 함수를 제공합니다.
그래서 이제
var f = $parse("a*b");
var result = f($scope);
우리는 $scope에 적용되는 함수인 $ parse의 출력을 사용하고 있습니다.
참고:
$eval
는 항상 현재 범위를 기준으로 식을 평가하고 결과를 반환합니다. 예:console.log($scope.$eval("a*b")); // 8
$parse
함수만 반환하고 스코프에서는 작동하지 않습니다.예:var func = $parse("a*b");
지금이다func
에 적용할 수 있는
모든 범위
var result = func($scope); console.log(result); // 8
물건
var result1 = func({a:3 , b:3}); console.log(result1); // 9
따라서 한 번 파싱한 동일한 식을 범위 또는 객체에 대해 평가할 수 있습니다.
전에 말씀드린 바와 같이, 에 대해.$eval
각진 용법$parse
식을 평가하고 결과를 반환하기 위한 현재 범위를 배경으로 합니다.
동일한 식에 대해 여러 컨텍스트를 실행하려면$parse
최선의 선택입니다.
".$eval ()"는 수식(및 선택적으로 로컬)을 취한 다음 "$parse()"를 사용하여 현재 범위에 대해 실행하는 간단한 범위 메서드입니다.
"$parse()" 서비스는 마법이 일어나는 곳입니다.각 표현식을 사용하고 함수를 반환하는데, 함수는 "context"와 "locals" 두 개의 인수를 사용합니다.후자는 컨텍스트에 설정된 변수를 재정의하는 데 사용됩니다.문맥이 핵심 부분입니다.
$scope.foo = 3;
var parseFn = $parse(‘foo = 5’);
parseFn($scope);
$scope.foo; // returns 5
또는 그보다 짧음:
$scope.foo = 3;
$scope.$eval(‘foo = 5’);
$scope.foo; // returns 5
언급URL : https://stackoverflow.com/questions/29870806/parse-vs-eval-which-one-is-best-practice
'programing' 카테고리의 다른 글
조회 결과를 MySQL의 변수로 설정 (0) | 2023.10.04 |
---|---|
WordPress의 편집기에 관리 전용 하위 메뉴 링크를 표시합니다.오류가 발생합니다. (0) | 2023.10.04 |
Objective-C 클래스에서 Swift 프로토콜 가져오기 (0) | 2023.10.04 |
AngularJS Reference Error: $window가 정의되지 않았습니다. (0) | 2023.10.04 |
C에서 구조물의 정적 배열 초기화 (0) | 2023.10.04 |