programing

Angular.js:$eval은 어떻게 작동하며 왜 vanilla eval과 다른가요?

magicmemo 2023. 4. 6. 21:29
반응형

Angular.js:$eval은 어떻게 작동하며 왜 vanilla eval과 다른가요?

궁금해서...$scope.$eval당신은 지시문에서 매우 자주 볼 수 있습니다, 그래서 나는 소스를 확인했고 다음과 같은 것을 발견했습니다.rootScope.js:

  $eval: function(expr, locals) {
    return $parse(expr)(this, locals);
  },

$parse정의되어 있는 것처럼 보인다ParseProviderparse.js파일 길이는 900줄입니다.

질문은 다음과 같습니다.

  1. 정확히는$eval왜 미니 구문 분석 언어가 필요하죠?

  2. 왜 이전 JavaScript가 아닌 거죠?eval사용 중입니까?

$eval그리고.$parseJavaScript는 평가하지 않습니다.이것들은 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

반응형