$ parse, $ interpolate 및 $ compile 서비스의 차이점은 무엇입니까?


답변:


464

사람들은 AngularJS와의 원조는 (비록 렌더링 뷰 것을 서비스의 예입니다 $parse$interpolate이 도메인 외부에서 사용될 수있다). 각 서비스의 역할을 설명하기 위해이 HTML을 예로 들어 보겠습니다.

var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'

범위의 값 :

$scope.name = 'image';
$scope.extension = 'jpg';

이 마크 업이 주어지면 각 서비스가 테이블에 가져 오는 것입니다.

  • $compile-전체 마크 업을 가져 와서 특정 범위에 대해 실행될 때 HTML 텍스트 조각을 모든 지시문 (여기서는 ng-src)이 모델 변경에 반응하는 동적 라이브 DOM으로 변환하는 연결 함수로 변환 할 수 있습니다 . $ compile (imgHtml) ($ scope)와 같이 호출하면 결과적으로 모든 DOM 이벤트 경계가있는 DOM 요소를 가져옵니다. $compile일을하기 위해 $interpolate(다른 것들 중에서) 사용하고 있습니다 .
  • $interpolate보간 표현식이 포함 된 문자열을 처리하는 방법을 알고 있습니다 (예 :) /path/{{name}}.{{extension}}. 즉, 보간 표현식, 범위가있는 문자열을 가져 와서 결과 텍스트로 변환 할 수 있습니다. $interpolation서비스를 매우 간단한 문자열 기반 템플릿 언어로 생각할 수 있습니다. 위의 예 $interpolate("/path/{{name}}.{{extension}}")($scope)에서 path/image.jpg문자열을 결과로 얻으려면 다음과 같이이 서비스를 사용하십시오 .
  • $parse범위에 대해 $interpolate개별 표현식 ( name, extension) 을 평가 하는 데 사용됩니다 . 그것은 모두에 사용할 수있는 읽기세트 주어진 식의 값. 예를 들어, name표현식 을 평가 $parse('name')($scope)하려면 "이미지"값을 얻으십시오. 값을 설정하려면 다음을 수행하십시오.$parse('name').assign($scope, 'image2')

이러한 모든 서비스는 AngularJS에서 라이브 UI를 제공하기 위해 협력하고 있습니다. 그러나 그들은 다른 수준에서 작동합니다.

  • $parse개별 표현에만 관련됩니다 ( name, extension). 읽기-쓰기 서비스입니다.
  • $interpolate읽기 전용이며 여러 표현식을 포함하는 문자열과 관련이 있습니다 ( /path/{{name}}.{{extension}})
  • $compile AngularJS 기계의 핵심이며 HTML 문자열 (지시문 및 보간 표현식 포함)을 라이브 DOM으로 변환 할 수 있습니다.

11
잘 설명했다. 투표함! :)
AlwaysALearner

2
좋은. 각각에 대한 사용법과 결과를 제공 할 수 있습니까? 그것은 여전히 ​​나에게 100 % 명확하지 않으며 많은 도움이 될 것이라고 생각합니다. 감사!
Alejandro García Iglesias

2
정말 훌륭합니다. 여기에서 실제 사용의 몇 예를 찾을 수 있습니다 (그리고 그것으로 각도를 최대 속도에 대한 좋은 간단 기사의도) : 속도 업 - 각-JS-와-간단한 최적화 "예를 들어, 대신 글로벌 네비게이션을 렌더링 ng-repeat를 사용하여 $ interpolate 제공자를 사용하여 자체 탐색을 작성하여 오브젝트에 대해 템플리트를 렌더링하고이를 DOM 노드로 변환 할 수 있습니다. "
Nadav Lebovitch

좋은 설명입니다. 실제로 $interpolateAnjularJS의 모든 곳을 검색 했으며 마침내 컴팩트하고 유익한 답변을 얻었습니다.
Damith

세 가지 서비스 개체를 모두 설명하기 위해 예를 효과적으로 사용했습니다. 초보자에게 더 접근하기 쉽도록 각진 j의 다양한 영역에서 이러한 종류의 명확하고 기본적인 설명이 더 필요합니다.
Kings

3
$interpolate-->

Let us say you have two variables assigned to $scope object in the controller,

$scope.a = 2;
$scope.b = 3;

var f = $interpolate("Result is : {{a*b}}");
var result = f($scope);
console.log(result);   --->'Result is 6'

This means that $interpolate can take the string which has one or more angular expressions.

Now $parse:

var f1 = $parse("a*b");
var result1 = f1($scope);
console.log(result1);   ----> '6'

**So $interpolate has the capability to evaluate a string with angular expressions mixed up in the string against the scope to get the result**.


Another important difference between $interpolate and $parse,$eval is:

**$interpolate has the capability to work with strings containing filters along with angular expressions.**

This feature is not accessible in $eval , $parse.

console.log($interpolate("Result is : {{a*b | currency : 'USD$'}}")($scope));

---> 'Result is USD $6.00'

$ intervalate는 $ eval 및 $ parse에서와 같이 $ scope 변수에 대한 쓰기 액세스 권한이 없습니다.

$ parse, $ interpolate ---> 주입이 필요하지만 컨트롤러 또는 $ eval을 사용하는 경우 $ eval을 주입 할 필요는 없습니다.

$ parse, $ interpolate는 모든 컨텍스트에 대해 평가할 수있는 기능을 제공하지만 $ eval은 항상 $ scope에 대해 평가됩니다.

씬 뒤의 $ eval 및 $ interpolate는 $ parse 만 사용합니다.


0

여기에 귀여운 설명이 있습니다.

var img = img/{{name}}.{{extension}}

$parse - > (name,extension) = > vimal , .jpg
$interpolate -> use angular $parse and convert into string -> img/vimal.jpg
$compile -> can turn html string img/vimal.jpg into live DOM so new img tag will be added inside our DOM with all prototype that a img tag have.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.