Rumah >hujung hadapan web >tutorial js >Meningkatkan aplikasi anda ke Sudut 1.5 komponen dan seterusnya!
Artikel ini dikaji semula oleh Dan Prince dan Michaela Lehr. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk membuat kandungan SitePoint yang terbaik boleh!
Dengan setiap pelepasan baru AngularJS, pasukan pembangunan cuba merapatkan jurang antara AngularJS 1.x dan 2. Dengan pembebasan AngularJS 1.5, pemaju akan dapat menulis aplikasi yang sama dengan AngularJS 2.0.Dalam tutorial ini, kami akan membuat arahan grid di AngularJS 1.4. Kami kemudian akan berjalan melalui langkah -langkah untuk menaik tarafnya menjadi 1.5, dan kemudian melihat bagaimana kami dapat menukarnya untuk bekerja dengan versi 2.0.
Takeaways Key
Membuat arahan grid
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>Mari buat arahan grid mudah untuk memaparkan array JSON. Kami akan bermula dengan membuat modul AngularJS.
Mari buat arahan yang dipanggil MyGrid, yang akan kita gunakan untuk memaparkan array JSON di atas.
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
kami mahu menggunakan arahan melalui nama tag, seperti ini:
Jadi, kami akan menambah pilihan Had untuk menentukan bahawa:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>
Seterusnya kami mahu lulus data pekerja dari pandangan ke arahan. Jadi, kami akan menambahnya sebagai pengikatan:
<span><span><span><my-grid</span>></span><span><span></my-grid</span>></span> </span>
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Sekarang kita akan dapat lulus data pekerja ke Arahan sebagai atribut:
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
Terakhir tetapi tidak kurang, kita memerlukan templat HTML untuk memaparkan data:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>
tambahkan skrip template html berikut dalam badan index.html.
<span><span><span><my-grid</span>></span><span><span></my-grid</span>></span> </span>
seperti yang anda lihat dalam kod di atas, kami melelehkan harta maklumat dan memaparkan setiap item dalam senarai pekerja.
mari kita gunakan arahan MyGrid di dalam index.html. Tambahkan kod berikut:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E' </span> <span>} </span><span>}) </span>
kami telah menetapkan pengawal Homectrl dan di dalamnya menggunakan arahan kami. Simpan perubahan dan semak imbas ke halaman index.html. Berikut adalah demo grid data dalam tindakan:
Lihat pena AngularJS 1.4 demo oleh SitePoint (@SitePoint) pada codepen.
Setakat ini kami telah membuat arahan AngularJS menggunakan versi 1.4 dan ia berfungsi dengan baik. Sekarang, mari kita cuba menggunakan kod yang sama dengan AngularJS 1.5 dan lihat jika ada perkara yang pecah.
mari menggantikan rujukan skrip sedia ada dengan pautan CDN ke versi 1.5. Sekiranya anda mencuba menyegarkan halaman semuanya harus terus berfungsi dengan baik. Dengan pelepasan baris 1.x baru ini, rangka kerja semakin dekat dengan cara AngularJS 2.0 akan berfungsi, menggunakan komponen, dan kami dapat memanfaatkannya dalam kod kami yang membuat peralihan akhirnya ke versi 2.0 lebih mudah.
Dalam AngularJS 1.5, komponen adalah gula sintaks untuk arahan yang menjaga mungkir dan mempunyai konfigurasi yang lebih mudah. Mereka harus disukai sebagai pengganti, terutama bagi mereka yang ingin menaik taraf pada masa akan datang.
Apabila bekerja dengan AngularJS, pemaju umumnya cenderung untuk bekerja dengan pendekatan berasaskan pengawal, tetapi ini dapat menimbulkan banyak masalah ketika aplikasi mulai berkembang. Pendekatan berasaskan pengawal dan paparan membawa kepada NG-Controller/View yang berulang, tetapi pendekatan berasaskan komponen menyelesaikan masalah dengan membuat komponen yang boleh disusun menjadi komponen yang lebih besar tanpa mengulangi kod.
Mari cuba gunakan kaedah pembantu arahan komponen baru dan ubah suai kod sedia ada kami. Kami akan mulakan dengan membuat komponen:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E', </span> <span>scope: { </span> <span>info: '=info' </span> <span>} </span> <span>} </span><span>}) </span>
Tidak seperti kaedah arahan - yang mengambil fungsi - kaedah komponen mengambil objek. Kami akan lulus objek yang sama yang kami ada dalam arahan kami dengan templat yang berbeza. Inilah templat HTML:
<span><span><span><my-grid</span> info<span>="employees"</span>></span><span><span></my-grid</span>></span> </span>
Berikut adalah kod komponen yang diubah suai:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E', </span> <span>scope: { </span> <span>info: '=info' </span> <span>}, </span> <span>templateUrl : '/directiveGrid.html' </span> <span>} </span><span>}) </span>
Seperti yang dilihat dalam kod di atas, kami telah meluluskan semua pilihan yang kami ada dalam arahan lama kami.
Buat komponen yang dipanggil myComp dalam halaman index.html.
<span><span><span><script</span> type<span>="text/ng-template"</span> id<span>="/directiveGrid.html"</span>></span><span> </span></span><span><span> <span><div class="panel panel-primary"> </span></span></span><span><span> <span><div class="panel-heading">Site Point Directive Grid</div> </span></span></span><span><span> <span><table class="table"> </span></span></span><span><span> <span><thead> </span></span></span><span><span> <span><tr> </span></span></span><span><span> <span><th>FirstName</th> </span></span></span><span><span> <span><th>Last Name</th> </span></span></span><span><span> <span><th>Location</th> </span></span></span><span><span> <span></tr> </span></span></span><span><span> <span></thead> </span></span></span><span><span> <span><tbody> </span></span></span><span><span> <span><tr ng-repeat="employee in info"> </span></span></span><span><span> <span><td>{{ employee.firstName }}</td> </span></span></span><span><span> <span><td>{{ employee.lastName }}</td> </span></span></span><span><span> <span><td>{{ employee.location }}</td> </span></span></span><span><span> <span></tr> </span></span></span><span><span> <span></tbody> </span></span></span><span><span> <span></table> </span></span></span><span><span> <span></div> </span></span></span><span><span></span><span><span></script</span>></span> </span>
simpan perubahan dan menyegarkan halaman dan anda harus dapat melihat bahawa data tidak dipaparkan tetapi tidak ada kesilapan dalam konsol penyemak imbas sama ada.
Jika kita melihat carta perbandingan antara komponen dan arahan dari laman web rasmi, kita dapat melihat bahawa skop sentiasa mengasingkan dalam komponen.
inilah kod yang diubah suai:
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>Maklumat mengikat akan terikat kepada pengawal. Alias lalai untuk pengawal adalah $ ctrl dan di dalam templat kami akan menggunakannya untuk mengakses harta info:
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>Sekarang jika anda menyegarkan semula halaman, anda sepatutnya dapat melihat data yang dipaparkan menggunakan komponen MyComp.
Lihat pena angularjs 1.5 demo oleh sitepoint (@sitePoint) pada codepen.
menaik taraf ke 2.0
mari menggantikan versi AngularJS yang ada dalam aplikasi kami dengan pautan ke versi 2.0 dari CDN dan lihat jika ada yang pecah:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>selepas menyegarkan halaman tidak ada yang muncul di halaman dan jika kita menyemak konsol penyemak imbas kita dapat melihat beberapa kesilapan juga.
Seperti yang anda lihat, kod komponen kami tidak berfungsi dengan baik dengan Angular 2.0!
mari kita mulakan dari awal dan lihat bagaimana versi baru berfungsi, maka kami akan cuba untuk memasuki komponen kami.
sedangkan mungkin untuk memulakan dengan Angular 1.x dengan memasukkan rangka kerja dengan tag skrip tunggal, keadaan dengan Angular 2.0 telah berubah. Kami memerlukan beberapa perpustakaan lain untuk berfungsi. Semasa memuatkan ini secara berasingan melalui tag skrip adalah OK untuk pembangunan, mereka bertujuan untuk dibundel sebagai sebahagian daripada proses membina untuk pengeluaran.
Jika kita melihat panduan permulaan cepat rasmi, kita dapat melihat bahawa kita memerlukan beberapa perpustakaan dan kebergantungan pembangunan lain untuk memulakan dengan 2.0.
mari kita buat folder yang dipanggil AngularJS2.0ponent dan buat fail pakej.json seperti berikut:
Fail di atas menunjukkan semua kebergantungan yang diperlukan oleh aplikasi AngularJS 2.0. Simpan perubahan dan pasang kebergantungan yang diperlukan menggunakan NPM:
<span><span><span><my-grid</span>></span><span><span></my-grid</span>></span> </span>
Buat folder sub yang dipanggil aplikasi dan di dalam membuat fail yang dipanggil app.component.js dengan kod berikut:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E' </span> <span>} </span><span>}) </span>
Dalam kod di atas, kami menggunakan ruang nama teras sudut ng.core untuk membuat komponen. Kami telah menentukan pemilih untuk komponen kami sebagai my-comp. Kami menggunakan HTML, Grid.html yang sama, sebagai templat untuk aplikasi kami. Kami telah menentukan objek pekerja kami dalam pembina komponen.
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>restrict: 'E', </span> <span>scope: { </span> <span>info: '=info' </span> <span>} </span> <span>} </span><span>}) </span>
Buat fail yang dipanggil main.js dan tampal dalam kod berikut:
<span><span><!DOCTYPE html></span> </span><span><span><span><html</span> lang<span>="en"</span> ng-app<span>="myApp"</span> class<span>="no-js"</span>></span> </span><span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>My AngularJS App<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"</span>></span> </span><span><span><span></head</span>></span> </span><span><span><span><body</span>></span> </span> <span><span><span><script</span> src<span>="https://code.angularjs.org/1.4.10/angular.js"</span>></span><span><span></script</span>></span> </span><span><span><span></body</span>></span> </span><span><span><span></html</span>></span> </span>
Ini memberitahu Angular untuk memuatkan komponen yang baru saja kita buat.
Seterusnya, buat fail yang dipanggil index.html di luar folder aplikasi, dan tampal dalam kod berikut:
angular<span>.module('myApp', []) </span> <span>.constant('employees', [{ </span> <span>firstName: 'Rima', </span> <span>lastName: 'George', </span> <span>location: 'San Francisco' </span> <span>}, { </span> <span>firstName: 'Shaun', </span> <span>lastName: 'John', </span> <span>location: 'Germany' </span> <span>}, { </span> <span>firstName: 'Rahul', </span> <span>lastName: 'Kurup', </span> <span>location: 'Bangalore' </span> <span>}, { </span> <span>firstName: 'Samson', </span> <span>lastName: 'Davis', </span> <span>location: 'Canada' </span> <span>}, { </span> <span>firstName: 'Shilpa', </span> <span>lastName: 'Agarwal', </span> <span>location: 'Noida' </span> <span>}]) </span> <span>.controller('HomeCtrl', ['$scope', 'employees', function($scope<span>, employees</span>) { </span> $scope<span>.employees = employees; </span> <span>}]) </span>
Halaman index.html di atas adalah template starter untuk aplikasi AngularJS 2.0. Kami telah memasukkan semua kebergantungan yang diperlukan, dan dalam tag badan kami telah menggunakan komponen kami.
Simpan perubahan dan mulakan pelayan menggunakan NPM Mula. Perintah ini menjalankan pelayan pembangunan tempatan yang dipanggil Lite-Server yang memuat index.html dalam penyemak imbas.
tetapi masih data tidak muncul!
Dalam AngularJS 2.0 Sintaks untuk gelung agak berbeza. Ubah suai bahagian gelung dalam grid.html seperti yang ditunjukkan di bawah:
<span>.directive('myGrid', function() { </span> <span>return { </span> <span>} </span><span>}) </span>
simpan perubahan dan mulakan semula pelayan dan anda harus dapat melihat data pekerja yang dipaparkan dalam aplikasi.
Komponen adalah sebahagian besar daripada AngularJS 2.0 dan ia adalah tepat untuk mengatakan ia adalah rangka kerja berasaskan komponen. Dengan setiap pelepasan baru baris 1.x, kami bergerak lebih dekat dengan bagaimana aplikasi dibangunkan menggunakan versi 2.0.
Dalam tutorial ini, kami mencipta arahan AngularJS menggunakan Verison 1.4 rangka kerja. Kami refactored arahan untuk memanfaatkan sintaks komponen versi 1.5. Akhirnya, kami menaik tarafnya untuk bekerja dengan versi sudut 2.0.
Untuk melihat lebih mendalam mengenai memindahkan aplikasi AngularJS anda, pertimbangkan untuk membaca panduan penghijrahan rasmi. Kod Angular 2 juga boleh ditulis dalam TypeScript dan Dart, dan jika anda berminat, saya akan mengesyorkan membaca panduan rasmi untuk memulakan dengan AngularJS 2 dalam Typescript atau Dart masing -masing.
Kongsi pendapat dan cadangan anda dalam komen di bawah!Soalan Lazim (Soalan Lazim) Mengenai Peningkatan ke Komponen Angular
Bagaimana saya boleh menguji aplikasi sudut saya? membolehkan anda membuat persekitaran ujian dinamik untuk komponen anda. Anda juga boleh menggunakan Jasmine, rangka kerja pembangunan yang didorong oleh tingkah laku untuk menguji kod JavaScript, dan Karma, pelari ujian. Angular juga menyokong ujian end-to-end dengan protractor.
Atas ialah kandungan terperinci Meningkatkan aplikasi anda ke Sudut 1.5 komponen dan seterusnya!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!