Apa perbedaan antara $parse
, $interpolate
dan $compile
layanan? Bagi saya mereka semua melakukan hal yang sama: ambil templat dan kompilasi ke templat-fungsi.
Apa perbedaan antara $parse
, $interpolate
dan $compile
layanan? Bagi saya mereka semua melakukan hal yang sama: ambil templat dan kompilasi ke templat-fungsi.
Jawaban:
Itu semua adalah contoh layanan yang membantu dalam rendering tampilan AngularJS (meskipun $parse
dan $interpolate
dapat digunakan di luar domain ini). Untuk mengilustrasikan apa peran dari setiap layanan, mari kita ambil contoh dari bagian HTML ini:
var imgHtml = '<img ng-src="/path/{{name}}.{{extension}}">'
dan nilai pada ruang lingkup:
$scope.name = 'image';
$scope.extension = 'jpg';
Diberikan markup ini di sini adalah apa yang dibawa setiap layanan ke meja:
$compile
- dapat mengambil seluruh markup dan mengubahnya menjadi fungsi penghubung yang, ketika dieksekusi terhadap lingkup tertentu akan mengubah sepotong teks HTML menjadi dinamis, langsung DOM dengan semua arahan (di sini ng-src
:) bereaksi terhadap perubahan model. Seseorang akan memanggilnya sebagai berikut: $ compile (imgHtml) ($ scope) dan akan mendapatkan elemen DOM dengan semua batasan event DOM sebagai hasilnya. $compile
memanfaatkan $interpolate
(antara lain) untuk melakukan tugasnya.$interpolate
tahu cara memproses string dengan ekspresi interpolasi tertanam, mis /path/{{name}}.{{extension}}
. : . Dengan kata lain dapat mengambil string dengan ekspresi interpolasi, ruang lingkup dan mengubahnya menjadi teks yang dihasilkan. Orang dapat menganggap $interpolation
layanan sebagai bahasa template berbasis string yang sangat sederhana. Mengingat contoh di atas orang akan menggunakan layanan ini seperti: $interpolate("/path/{{name}}.{{extension}}")($scope)
untuk mendapatkan path/image.jpg
string sebagai hasilnya.$parse
digunakan oleh $interpolate
untuk mengevaluasi ekspresi individu ( name
, extension
) terhadap cakupan. Ini dapat digunakan untuk membaca dan mengatur nilai untuk ekspresi yang diberikan. Misalnya, untuk mengevaluasi name
ekspresi yang akan dilakukan: $parse('name')($scope)
untuk mendapatkan nilai "gambar". Untuk mengatur nilai yang akan dilakukan:$parse('name').assign($scope, 'image2')
Semua layanan tersebut bekerja bersama untuk menyediakan UI langsung di AngularJS. Tetapi mereka beroperasi pada level yang berbeda:
$parse
hanya mementingkan ekspresi individu ( name
, extension
). Ini adalah layanan baca-tulis.$interpolate
dibaca saja dan berkaitan dengan string yang berisi banyak ekspresi ( /path/{{name}}.{{extension}}
)$compile
adalah jantung dari mesin AngularJS dan dapat mengubah string HTML (dengan arahan dan ekspresi interpolasi) menjadi DOM langsung.$interpolate
di AnjularJS dan akhirnya saya mendapat jawaban yang ringkas dan informatif.
$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'
$ interpolate tidak memiliki akses tulis ke variabel $ scope seperti yang kita miliki dalam $ eval dan $ parse
$ parse, $ interpolate ---> perlu disuntikkan tetapi $ eval tidak perlu disuntikkan di controller atau di mana ia digunakan
$ parse, $ interpolate memberikan fungsi yang dapat dievaluasi terhadap konteks apa pun tetapi $ eval selalu dievaluasi terhadap $ scope.
$ eval dan $ interpolate di belakang layar hanya menggunakan $ parse.
Inilah penjelasan yang lucu.
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.