Angular.js:$eval은 어떻게 작동하며 왜 vanilla eval과 다른가요?
궁금해서...$scope.$eval
당신은 지시문에서 매우 자주 볼 수 있습니다, 그래서 나는 소스를 확인했고 다음과 같은 것을 발견했습니다.rootScope.js
:
$eval: function(expr, locals) {
return $parse(expr)(this, locals);
},
$parse
정의되어 있는 것처럼 보인다ParseProvider
에parse.js
파일 길이는 900줄입니다.
질문은 다음과 같습니다.
정확히는
$eval
왜 미니 구문 분석 언어가 필요하죠?왜 이전 JavaScript가 아닌 거죠?
eval
사용 중입니까?
$eval
그리고.$parse
JavaScript는 평가하지 않습니다.이것들은 Angular를 평가합니다.JS 식링크된 문서에서는 식과 JavaScript의 차이점에 대해 설명합니다.
Q: $eval은 정확히 무엇을 하고 있습니까?자체 미니 구문 분석 언어가 필요한 이유는 무엇입니까?
문서에서:
식은 보통 {{ expression }}과(와) 같은 바인딩에 배치되는 JavaScript와 같은 코드 스니펫입니다.식은 $parse 서비스에 의해 처리됩니다.
실행할 수 있는 것을 제한하는 JavaScript와 같은 미니 언어(예를 들어 3진 연산자를 제외한 제어 흐름 문 없음)와 Angular를 추가합니다.JS 선량(예: 필터).
Q: 왜 평소의 javascript "eval"이 사용되지 않는가?
왜냐하면 실제로 자바스크립트를 평가하는 것이 아니기 때문입니다.문서 내용:
임의의 JavaScript 코드를 실행하려면 컨트롤러 메서드로 만들고 메서드를 호출해야 합니다.JavaScript에서 각도식을 평가()하려면 $eval() 메서드를 사용합니다.
위에 링크된 문서에는 더 많은 정보가 있습니다.
테스트에서 봤을 때
it('should allow passing locals to the expression', inject(function($rootScope) {
expect($rootScope.$eval('a+1', {a: 2})).toBe(3);
$rootScope.$eval(function(scope, locals) {
scope.c = locals.b + 4;
}, {b: 3});
expect($rootScope.c).toBe(7);
}));
평가 표현을 위해 현지인을 합격시킬 수도 있습니다.
이 질문 중 하나는 답이 없는 것 같습니다.vanilla eval()을 사용하지 않는 것은 각도 앱이 Chrome 앱으로 동작하지 않기 때문에 보안상의 이유로 eval()을 사용할 수 없기 때문이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/15671471/angular-js-how-does-eval-work-and-why-is-it-different-from-vanilla-eval
'programing' 카테고리의 다른 글
TypeScript: 유형 '{}'에 속성이 없습니다. (0) | 2023.04.06 |
---|---|
각도와 함께 쉼표를 목록 구분 기호로 사용JS (0) | 2023.04.06 |
PostgreSQL: JSON 열에서 특성 제거 (0) | 2023.04.06 |
스프링 부트 ddl 자동 제너레이터 (0) | 2023.04.06 |
단일 투고에서 Wordpress 카테고리 가져오기 (0) | 2023.04.06 |