Apa perbedaan antara NG-IF dan NG-Show/Hide?
Perbedaan pertama adalah bahwa NG-IF dibuat hanya ketika ekspresi setelah simpul DOM benar, NG-show dibuat di awal, dan tampilan: blokir dan tampilan: tidak ada yang digunakan untuk mengontrol tampilan dan tidak ditampilkan.
Perbedaan kedua adalah bahwa NG-IF akan (secara implisit) menghasilkan ruang lingkup baru, dan hal yang sama berlaku untuk SWITCH NG, NG-termasuk, dll. Untuk secara dinamis membuat antarmuka.
Ini akan menyebabkan model NG terikat dengan variabel dasar di NG-IF dan mengikat model ini ke area tampilan lain di div luar. Ketika lapisan dalam berubah, lapisan luar tidak akan berubah secara serempak karena sudah ada dua variabel.
<p> {{name}} </p> <div ng-if = "true"> <input type = "text" ng-model = "name"> </div>NG-Show tidak memiliki masalah ini karena tidak datang dengan ruang lingkup tingkat pertama.
Cara untuk menghindari masalah semacam ini adalah dengan selalu mengikat elemen di halaman ke properti objek (data.x) alih -alih mengikat secara langsung ke variabel dasar (x).
Lihat ruang lingkup di angularjs untuk detailnya
Ketika NG-Repeat berulang kali di atas array, jika ada nilai yang sama dalam array, masalah apa yang akan ada dan bagaimana menyelesaikannya?
Duplikat dalam repeater tidak diperbolehkan. Menambahkan trek dengan $ index dapat menyelesaikannya. Tentu saja, Anda juga dapat melacak dengan nilai biasa, selama Anda dapat secara unik mengidentifikasi setiap item dalam array (buat hubungan antara DOM dan data).
Bisakah ungkapan yang ditulis dalam NG-klik menggunakan metode pada objek asli JS?
Tidak hanya ekspresi dalam klik NG, tetapi hanya metode JS asli yang tidak dapat dipanggil langsung selama mereka berada di halaman, karena ini tidak ada dalam lingkup $ pengontrol yang sesuai dengan halaman.
Ambil kastanye:
<p> {{parseInt (55.66)}} <p>
Anda akan menemukan bahwa tidak ada yang ditampilkan.
Tetapi jika Anda menambahkan fungsi ini dalam $ SCOPE:
$ scope.parseint = function (x) {return parseInt (x);}Tentu saja tidak ada masalah seperti ini.
Untuk persyaratan semacam ini, menggunakan filter mungkin merupakan pilihan yang baik:
<p> {{13.14 | ParseIntFilter}} </p> app.filter ('parseIntfilter', function () {return function (item) {return parseInt (item);}})){{sekarang | 'yyyy-mm-dd'}} Dalam ungkapan ini, bagaimana garis vertikal dan parameter selanjutnya dapat disesuaikan?
Filter, memformat data, menerima input, memprosesnya sesuai dengan aturan tertentu, dan mengembalikan hasil pemrosesan.
Filter bawaan
Ada sembilan jenis filter bawaan:
tanggal (tanggal)
mata uang
limitto (batas array atau panjang string)
orderby (sort)
huruf kecil (huruf kecil)
huruf besar (topi)
Nomor (format nomor, tambahkan seribu pemisah, dan terima parameter untuk membatasi jumlah tempat desimal)
filter (proses array dan filter elemen yang berisi substring)
JSON (memformat objek JSON)
Ada dua cara untuk menggunakan filter, satu adalah dengan langsung di halaman:
<p> {{sekarang | Tanggal: 'yyyy-mm-dd'}} </p>
Satu lagi adalah menggunakannya di JS:
// $ filter ('Name Filter') (Objek yang perlu disaring, parameter 1, parameter 2, ...)
$ filter ('date') (sekarang, 'yyyy-mm-dd hh: mm: ss');
Filter khusus
// Bentuk app.filter ('name filter', function () {return function (objek yang perlu disaring, filter parameter 1, filter parameter 2, ...) {// ... lakukan sesuatu untuk mengembalikan objek setelah diproses;}}); // chestnut app.filter ('timesfilter', function () {return function (item, time) {var result = ''; for (var i = 0; i <Times; i ++) {hasil+= item;} hasil pengembalian;}})Apa hubungan antara pabrik, layanan dan penyedia?
pabrik
Masukkan metode layanan dan data dalam suatu objek dan kembalikan objek ini
app.factory ('fooservice', function () {return {target: 'factory', sayhello: function () {return 'hello' + this.target;}}});melayani
Buat Layanan Melalui Metode Konstruktor dan Kembalikan Objek Instantiated
app.service ('fooService', function () {var self = this; this.target = 'service'; this.sayhello = function () {return 'hello' + self.target;}});Penyedia
Buat layanan yang dapat dikonfigurasi melalui konfigurasi. The Returned in $ get adalah menggunakan pabrik untuk membuat konten layanan
app.provider ('fooService', function () {this.configData = 'init data'; this.setConfigData = function (data) {if (data) {this.configData = Data;}} ini. $ get = function () {var self = this; return {target: ',', say 'function () {var self = this; return {' provider ',', get = function () {var self = this; return {target: 'provider', 'get = function () {var self = this; return {' provider ',', $ 'get = function () {var self = this; return {' provider ',',). this.target;}}}}}); // Apa yang disuntikkan di sini adalah fooservice providerApp.config (function (fooserviceprovider) {fooserviceProvider.setConfigData ('config data');});Dari perspektif implementasi yang mendasarinya, layanan memanggil pabrik dan mengembalikan contohnya; Penyedia panggilan pabrik, mengembalikan konten yang ditentukan dalam $ get. Fungsi pabrik dan layanan serupa, kecuali bahwa pabrik adalah fungsi normal yang dapat mengembalikan apa pun (pengembalian dapat diakses, jadi bagaimana menulis variabel pribadi, Anda tahu); Layanan adalah konstruktor, yang tidak dapat dikembalikan (yang terikat pada ini dapat diakses); Penyedia adalah pabrik yang ditingkatkan, yang mengembalikan pabrik yang dapat dikonfigurasi.
Lihat Pabrik AngularJS VS Layanan vs Penyedia
Mekanisme apa yang digunakan untuk pengikatan data sudut? Deskripsi terperinci tentang prinsip tersebut
Mekanisme inspeksi kotor.
Ikatan data dua arah adalah salah satu mekanisme inti AngularJS. Ketika ada perubahan data dalam tampilan, itu akan diperbarui ke model. Ketika ada perubahan data dalam model, tampilan juga akan diperbarui secara bersamaan. Jelas, ini membutuhkan pemantauan.
Prinsipnya adalah bahwa Angular mengatur antrian mendengarkan pada model lingkup untuk mendengarkan perubahan data dan memperbarui tampilan. Setiap kali suatu objek terikat pada tampilan, AngularJS akan memasukkan $ watch ke dalam antrian $ watch untuk mendeteksi apakah ada perubahan dalam model yang dipantau. Ketika browser menerima peristiwa yang dapat diproses dengan konteks sudut, $ Digest Loop akan dipicu, melintasi semua jam tangan $ dan akhirnya memperbarui DOM.
Berikan kastanye
<tombol ng-click = "val = val+1"> Tingkatkan 1 </tombol>
Saat mengklik, operasi pembaruan akan dihasilkan (setidaknya dua loop $ digest dipicu)
Tekan tombol
Browser menerima suatu peristiwa dan memasuki konteks sudut
Loop $ Digest mulai dieksekusi, menanyakan apakah setiap $ Watch berubah
Sejak $ Watch Monitoring $ scope. Val Perubahan Dilaporkan, Loop $ Digest ditegakkan
Tidak ada perubahan yang terdeteksi di loop $ digest baru
Browser mengambil kembali controller dan memperbarui DOM yang sesuai dengan nilai baru $ scope.val
Batas atas loop $ digest adalah 10 kali (pengecualian dilemparkan setelah lebih dari 10 kali untuk mencegah loop tak terbatas).
Lihat Ikatan Data untuk AngularJS
Dua blok antarmuka horizontal a dan b. Jika suatu peristiwa dipicu dalam A, cara apa yang bisa diketahui B? Deskripsi terperinci tentang prinsip tersebut
Dengan kata lain, masalah ini adalah bagaimana berkomunikasi antara modul antarmuka horizontal. Ada dua metode, satu adalah untuk berbagi layanan dan yang lainnya harus didasarkan pada acara.
Layanan bersama
Dalam sudut, objek singleton dapat dihasilkan melalui pabrik, dan objek ini dapat disuntikkan ke dalam modul A dan B yang membutuhkan komunikasi.
Berdasarkan peristiwa
Ada dua cara untuk melakukan ini
Yang pertama adalah menggunakan pengontrol induk. Di pengontrol anak, memicu suatu peristiwa ($ emit) ke pengontrol induk, lalu dengarkan acara ($ on) di pengontrol induk, dan kemudian disiarkan ($ siaran) ke pengontrol anak. Dengan cara ini, melalui parameter yang dibawa oleh peristiwa tersebut, data disebarkan melalui pengontrol induk dan di antara pengontrol tingkat yang sama.
Tipe kedua adalah menggunakan $ rootscope. Setiap aplikasi sudut memiliki root scope $ rootscope secara default. Root scope berada di level atas, dan ada lingkup di semua level yang tergantung darinya. Oleh karena itu, jika subcontroller secara langsung menggunakan $ rootscope untuk menyiarkan dan menerima acara, komunikasi antar rekan dapat dicapai.
Lihat komunikasi antar pengontrol di angularjs
Bagaimana seharusnya aplikasi sudut berlapis dengan baik?
Membagi struktur direktori
Untuk proyek kecil, Anda dapat mengaturnya berdasarkan jenis file, seperti:
filter layanan model pengontrol cssjs
Namun, untuk proyek yang lebih besar, yang terbaik adalah membaginya sesuai dengan modul bisnis, seperti:
cssmodules controller akun model layanan filter template disk pengontrol disk model filter layanan template
Yang terbaik adalah memiliki direktori umum di bawah modul untuk menyimpan hal -hal publik.
Pemisahan kode logis
Sebagai kerangka kerja MVVM, aplikasi sudut harus dibagi sesuai dengan model, tampilan model (pengontrol), dan tampilan.
Pemisahan kode logika di sini terutama mengacu pada mencoba membuat lapisan pengontrol sangat tipis sebanyak mungkin. Ekstrak logika bersama ke dalam Layanan (seperti permintaan data latar belakang, berbagi data dan cache, komunikasi antar-modul berbasis peristiwa, dll.), Mengekstrak operasi antarmuka bersama ke dalam arahan (seperti merangkum pemilihan tanggal, paging, dll. Ke dalam komponen, dll.), Mengekstrak operasi format bersama ke dalam filter, dll., Dll.
Dalam aplikasi yang kompleks, konstruktor yang sesuai juga dapat ditetapkan untuk entitas, seperti modul hard disk (disk), yang mungkin memiliki beberapa tampilan seperti daftar, kreasi baru, dan detail, dan masing -masing pengontrol yang sesuai. Kemudian, konstruktor disk dapat dibangun untuk menyelesaikan penambahan data, penghapusan, modifikasi dan operasi verifikasi. Jika ada pengontrol terkait disk, konstruktor disk disuntikkan ke dalam konstruktor disk dan instance dihasilkan. Contoh ini memiliki metode penambahan, penghapusan, modifikasi dan verifikasi. Ini tidak hanya memiliki lapisan yang jelas tetapi juga menyadari penggunaan kembali (membuat lapisan pengontrol lebih tipis).
Lihat praktik mendalam AngularJS di Suning Cloud Center
Perpustakaan perutean apa yang biasa digunakan untuk aplikasi sudut dan apa perbedaannya?
Ngroute dan UI.Router umumnya digunakan dalam Angular1.x, dan ada juga router baru (berorientasi komponen) yang dirancang untuk Angular2. Yang di belakang belum digunakan dalam proyek yang sebenarnya, jadi saya tidak akan membicarakannya.
Apakah itu Ngroute atau UI.Router, sebagai fitur tambahan tambahan dari kerangka kerja, harus diperkenalkan dalam bentuk dependensi modul.
perbedaannya
Modul NGROUTE adalah modul perutean sudut, sedangkan modul UI.Router adalah modul pihak ketiga yang dikembangkan berdasarkan modul NGROUTE.
UI.Router didasarkan pada keadaan (negara), Ngroute didasarkan pada URL, dan modul UI.Router memiliki fungsi yang lebih kuat, terutama tercermin dalam aspek sarang pandangan.
Gunakan UI.Router untuk mendefinisikan rute dengan hubungan orangtua-anak yang jelas, dan masukkan templat perutean anak ke dalam <v ui-view> </div> dari template perutean induk melalui arahan ui-view, sehingga menyadari sarang tampilan. Ini tidak dapat didefinisikan dalam Ngroute. Jika <Div Ng-View> </div> digunakan dalam tampilan orangtua-anak pada saat yang sama, itu akan jatuh ke loop mati.
Contoh
Ngroute
var app = angular.module('ngRouteApp', ['ngRoute']);app.config(function($routeProvider){ $routeProvider .when('/main', { templateUrl: "main.html", controller: 'MainCtrl' }) .otherwise({ redirectTo: '/tabs' });Ui.Router
var app = angular.module ("uirouteApp", ["ui.router"]); app.config (function ($ urlRouterProvider, $ stateProvider) {$ urlRouterProvider.otherwise ("/index"); $ stateProvider .State ("MAIN", {URL: "/INDEX"); 'Mainctrl'})Jika Anda merencanakan sistem komponen sepenuhnya melalui Petunjuk Angular, tantangan apa yang mungkin Anda temui?
Saya tidak pernah membuat satu set lengkap komponen dengan direktur sendiri, jadi saya tidak bisa menjelaskannya.
Satu hal yang dapat dipikirkan adalah bagaimana komponen berinteraksi dengan dunia luar dan bagaimana mereka dapat digunakan melalui konfigurasi sederhana.
Aplikasi sudut yang dikembangkan oleh tim yang berbeda. Jika Anda ingin mengintegrasikannya, masalah apa yang mungkin ditemui dan bagaimana cara menyelesaikannya?
Konflik antara berbagai modul dapat ditemui.
Misalnya, semua perkembangan satu tim dilakukan di bawah Modulea, sedangkan kode yang dikembangkan oleh tim lain dilakukan di bawah Moduleb
angular.module ('myapp.modulea', []) .factory ('servicea', function () {...}) Angular.module ('myapp.moduleb', []). Factory ('ServiceA', function () {...}) angular.module ('myapp', ['myapp', ['Myapp.Ini akan menyebabkan Servicea di bawah dua modul ditimpa.
Tampaknya tidak ada solusi yang baik di Angular1.x, jadi yang terbaik adalah membuat perencanaan terpadu pada tahap awal, membuat perjanjian, dan berkembang secara ketat sesuai dengan perjanjian. Setiap pengembang hanya menulis kode blok tertentu.
Apa kelemahan sudut?
Kendala yang kuat
Ini mengarah pada biaya belajar tinggi dan tidak ramah ke ujung depan.
Tetapi ketika mengikuti konvensi AngularJS, produktivitas akan tinggi dan ramah programmer.
Tidak kondusif untuk SEO
Karena semua konten diperoleh dan diterjemahkan secara dinamis, mesin pencari tidak dapat merangkak.
Salah satu solusi adalah bahwa untuk akses pengguna normal, server menanggapi konten aplikasi AngularJS; Untuk akses mesin pencari, ini merespons halaman HTML khusus untuk SEO.
Masalah kinerja
Sebagai kerangka kerja MVVM, karena pengikatan data dua arah diimplementasikan, akan ada masalah kinerja untuk array besar dan objek yang kompleks.
Metode yang dapat digunakan untuk mengoptimalkan kinerja aplikasi sudut:
Kurangi item pemantauan (seperti ikatan satu arah untuk data yang tidak berubah)
Atur secara aktif indeks (tentukan trek oleh, tipe sederhana menggunakan diri mereka sendiri sebagai indeks secara default, dan objek menggunakan $$ hashkey secara default, misalnya, ubah untuk melacak dengan item.id)
Kurangi jumlah data yang diberikan (seperti paging, atau mengambil sebagian kecil dari data setiap kali, dan mengambilnya sesuai kebutuhan)
Data perataan (misalnya, untuk struktur pohon, gunakan struktur perataan untuk membangun data peta dan pohon. Saat beroperasi pada pohon, karena referensi yang sama dengan data datar, perubahan data pohon akan disinkronkan ke data datar asli)
Selain itu, untuk Angular1.x, ada masalah dengan mekanisme pemeriksaan dan modul kotor.
Mobile
Ionik dapat dicoba, tetapi tidak sempurna.
Bagaimana cara melihat pandangan Peter-Paul Koch tentang Angular pada Januari 2015?
Bagaimana Anda melihat pengontrol sebagai sintaks yang diperkenalkan di Angular 1.2?
Manfaat paling mendasar
Sebelum Angular 1.2, ikatan apa pun pada tampilan terikat langsung ke $ SCOPE
fungsi myctrl ($ scope) {$ scope.a = 'aaa'; $ scope.foo = function () {...}}Menggunakan controlleras, tidak perlu menyuntikkan $ scope lagi, controller menjadi objek JavaScript yang sangat sederhana (POJO), viewmodel yang lebih murni.
fungsi myctrl () {// Gunakan VM untuk menangkap ini untuk menghindari fungsi internal yang menyebabkan konteks berubah saat menggunakan var vm ini = ini; vm.a = 'aaa';}prinsip
Dari sudut pandang implementasi kode sumber, sintaks controlleras hanya membuat atribut pada $ cakupan dengan alias AS misalnya dari objek controller.
if (directive.controlleras) {penduduk setempat. $ scope [directive.controlleras] = controllerInstance;}Namun, selain membuat controller lebih banyak Pojo yang disebutkan di atas, Anda juga dapat menghindari menemukan lubang yang terkait dengan ruang lingkup AngularJS (yaitu, lubang di mana NG-jika menghasilkan ruang lingkup tingkat pertama, yang sebenarnya merupakan lubang di pitam yang lebih lama, seperti halnya pitam pada rantai prototipe rujukan. Karena ketika menggunakan controlleras, semua bidang yang dibatasi oleh soalfx, seperti halnya rantai, ketika menggunakan controlleras, semua bidang pada soal-field pada soal-loughing, karena semua fields pada soalfx, karena semua field-field pada soalfx, karena semua field-field landasan pada soalfx, karena ketika menggunakan controlleras, semua bidang pada soal-fields pada soalfx, karena semua field-fields pada soalfx, karena semua fields pada soalscric, karena ketika menggunakan controlleras, semua bidang pada Tampilan pada Tampilan Tampilan, karena ketika menggunakan controlleras, semua bidang pada Tampilan pada Tampilan Tampilan. ada).
<Div ng-controller = "testctrl as vm"> <p> {{name}} </p> <div ng-if = "vm.name"> <input type = "text" ng-model = "vm.name"> </div> </div>pertanyaan
Satu masalah yang akan Anda temui dengan controlleras adalah bahwa karena tidak ada $ cakupan yang disuntikkan, metode di bawah $ emit, $ siaran, $ on, $ watch, dll. Tidak dapat digunakan. Operasi terkait peristiwa ini dapat dienkapsulasi dan ditangani secara seragam, atau $ cakupan dimasukkan ke dalam pengontrol tunggal untuk perawatan khusus.
Pengontrol Sudut Referensi sebagai Sintaks vs Lingkup
Detail "Injeksi Ketergantungan" Angular
kastanye
Injeksi ketergantungan adalah pola desain perangkat lunak yang bertujuan untuk menangani ketergantungan antara kode dan mengurangi kopling antar komponen.
Misalnya, jika Anda tidak menggunakan AngularJS, Anda mungkin perlu melakukan ini jika Anda ingin meminta data dari latar belakang dan menampilkannya di ujung depan:
var animalbox = document.querySelector ('. Animal-box'); var httpRequest = {get: function (url, callback) {console.log (url + 'diminta'); var hewan = ['kucing', 'anjing', 'kelinci']; Callback (Hewan); }} var render = function (el, http) {http.get ('/API/hewan', fungsi (hewan) {el.innerhtml = hewan;})} render (httprequest, animalbox);Namun, jika parameter tidak dilewati ketika render dipanggil, seperti yang berikut, kesalahan akan dilaporkan karena EL dan HTTP tidak dapat ditemukan (ketergantungan didefinisikan, dan ketergantungan tidak akan ditemukan secara otomatis saat berjalan)
memberikan();
// typeError: tidak dapat membaca properti 'dapatkan' tidak ditentukan
Dan menggunakan angularjs, Anda dapat melakukan ini secara langsung
function myctrl = ($ scope, $ http) {$ http.get ('/API/hewan'). Sukses (fungsi (data) {$ scope.animals = data;})}Dengan kata lain, ketika aplikasi Angular sedang berjalan, myCtrl dipanggil dan dua dependensi, $ scope dan $ http secara otomatis disuntikkan.
prinsip
AngularJS menyimpulkan nama layanan ketergantungan melalui nama parameter konstruktor, dan menggunakan tostring () untuk menemukan string yang sesuai sesuai dengan fungsi yang ditentukan ini, kemudian mem -parsing parameter (ketergantungan) dalam keteraturan, kemudian mendapatkan ketergantungan yang sesuai dalam peta ketergantungan, dan instantatif dan meneruskannya.
Untuk menyederhanakannya, mungkin seperti ini:
var inject = {// penyimpanan pemetaan ketergantungan penyimpanan: {}, // Daftarkan register dependensi: fungsi (name, sumber daya) {this.storage [name] = sumber daya; }, // Parsenkan ketergantungan dan panggilan panggilan: fungsi (target) {var self = this; var fn_args =/^function/s*[^/(]*/(/s*([^/)]*)/)/m; var strip_comments = /((////.*$)|(///* media/s/s media? fntext = target.toString (). ganti (strip_comments, ''); argdecl = fntext.match (fn_args) [1] .split (/,?/g); var args = []; argdecl.foreach (function (arg) {if (self.storage [arg]) {args.push (self.storage [arg]);}}) return function () {target.Apply ({}, args); }}}Menggunakan injektor ini, chestnut sebelumnya yang tidak menggunakan angularjs dapat dipanggil setelah memodifikasinya.
inject.register ('el', animalbox); inject.register ('ajax', httprequest); reender = inject.resolve (render); reender ();pertanyaan
Karena injektor AngularJS mengasumsikan bahwa nama parameter fungsi adalah nama ketergantungan, dan kemudian mencari ketergantungan, jika ketergantungan disuntikkan seperti pada kastanye sebelumnya, setelah kode dikompresi (parameter diganti namanya), ketergantungan tidak dapat ditemukan.
// function myctrl = ($ scope, $ http) {...} // function myctrl = (a, b) {...}Oleh karena itu, dua metode berikut biasanya digunakan untuk menyuntikkan dependensi (ada persyaratan untuk urutan di mana dependensi ditambahkan).
Metode anotasi array
myapp.controller ('myctrl', ['$ scope', '$ http', function ($ scope, $ http) {...}])Suntikan Eksplisit $
myapp.controller ('myctrl', myctrl); function myctrl = ($ scope, $ http) {...} myctrl. $ inject = ['$ scope', '$ http'];Mengisi kembali
Untuk wadah DI, tiga elemen harus dimasukkan: pendaftaran dependensi, deklarasi dependensi, dan perolehan objek.
Di AngularJS, baik modul dan $ menyediakan dapat memberikan pendaftaran dependensi; injektor bawaan dapat memperoleh objek (secara otomatis melengkapi injeksi ketergantungan); Deklarasi dependensi seperti yang disebutkan dalam pertanyaan sebelumnya.
Ini kastanye
// Untuk modul, lebih dari satu parameter dilewatkan, yang berarti modul baru dibuat, dan array kosong berarti tidak ada ketergantungan pada modul lain // hanya ada satu parameter (nama modul), yang berarti mendapatkan modul // define myapp, tambahkan myapp.services sebagai dependency angular.module ('myapp', ['myapp. angular.module ('myapp.services', []) // $ penyedia memiliki pabrik, layanan, penyedia, nilai, konstanta // tentukan httpserviceangular.module ('myapp.services'). Layanan ('httpservice', ['$ http', function ($ http) {{'$ http', function ($ http) {{'$ http', function ($ http) {'$ http') {'$ http')merujuk ke
[AngularJS] Menerapkan suntikan ketergantungan sederhana sendiri
Pahami modul dan injektor dalam sudut, yaitu injeksi ketergantungan
Skenario Aplikasi Praktis Injeksi Ketergantungan di AngularJS
Cara melihat angular2
Dibandingkan dengan Angular1.x, Angular2 telah membuat perubahan besar dan hampir merupakan kerangka kerja baru.
Berdasarkan TypeScript (yang dapat dikembangkan menggunakan TypeScript), jenis bahasa yang kuat lebih bermanfaat ketika tim proyek skala besar berkolaborasi.
Komponen meningkatkan efisiensi pengembangan dan pemeliharaan.
Ada juga modul yang mendukung pemuatan dinamis, router baru, dukungan asli untuk janji, dll.
Ini melayani standar di masa depan dan menyerap keuntungan dari kerangka kerja lain, yang layak dinanti -nantikan, tetapi ada juga lebih banyak hal untuk dipelajari (ES NEXT, TS, RX, dll.).
Di atas adalah kompilasi informasi untuk pertanyaan wawancara AngularJS. Kami akan terus menambahkan informasi yang relevan di masa mendatang. Terima kasih atas dukungan Anda untuk situs web ini!