Rumah >hujung hadapan web >tutorial js >Mewujudkan modal yang berkesudahan di sudut angular dengan penghala ui sudut
3
Terdapat beberapa cara untuk mendekati pelaksanaan modal dalam aplikasi AngularJS, termasuk perkhidmatan-perkhidmatan dialog yang popular dan modal bootstrap Angular-UI rasmi. Dalam artikel ini saya akan berkongsi bagaimana saya suka mengendalikan modal dalam sudut, menggunakan perkhidmatan angular-UI yang lain, ui-router.
Modal
Penghala UI Angular boleh digunakan untuk membuat modal negara dalam aplikasi AngularJS. Ini melibatkan memasang penghala UI, menambahkannya ke aplikasi sudut, dan menentukan keadaan untuk setiap modal.
mari kita simpan mudah untuk bermula dengan. Pertama, kami akan memasang UI-Router dan menambahkannya ke aplikasi Angular kami.
1. Buat halaman HTML yang mudah
jQuery telah dimasukkan untuk beberapa kerja DOM di kemudian hari.
2. Buat aplikasi sudut anda
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Fail app.js sangat mudah pada ketika ini. Kami hanya membuat modul untuk ModalApp kami dan kemudian menambah UI.Router sebagai kebergantungan:
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Sebelum kita boleh membuka modal, kita memerlukan UI untuk pengguna berinteraksi. Dalam contoh ini saya menyimpan perkara yang mudah dengan "tambah ke butang kereta" dalam index.html:
angular<span>.module("modalApp", ["ui.router"])</span>
Kami akan menentukan beberapa negeri untuk setiap modal kami, tetapi terdapat sedikit persediaan yang perlu kami lakukan terlebih dahulu. Oleh kerana kemungkinan kita ingin berkongsi tingkah laku antara modal yang berbeza, mari kita buat keadaan modal induk bahawa modal individu kita kemudiannya boleh mewarisi dari. Kod berikut tergolong dalam js/app.js:
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Kami telah menentukan keadaan yang dipanggil "modal". Ia adalah keadaan abstrak yang bermaksud ia tidak boleh secara langsung beralih ke. Ia hanya berfungsi sebagai ibu bapa kepada negara -negara kanak -kanak itu untuk menawarkan fungsi bersama. Kami juga menentukan templat untuk pandangan bernama (juga dipanggil modal). Menamakan pandangan anda adalah idea yang baik untuk mengelakkan negara-negara yang salah memuat ke tempat yang salah dalam aplikasi anda, terutama jika anda menggunakan router UI untuk negara-negara lain dalam aplikasi anda.
5. Tentukan Arahan U-View untuk modal kami untuk dimuatkan ke
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span><span>});</span>Oleh kerana kita menamakan pandangan kita "modal", kita perlu lulus ini ke Arahan juga. Tetapan autoscroll = "palsu" menghalang router UI daripada cuba menatal modal ke dalam pandangan.
6. Membuat modal sebenar pertama kami
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>mudah seperti itu. Kami menentukan keadaan Confirmaddtocart baru sebagai anak modal menggunakan notasi titik penghala. Kami juga menetapkan templat untuk modal baru kami.
Oleh kerana modal ConfirmaddTocart adalah anak dari keadaan modal, router UI akan mencari arahan UI-View dalam template modal (modal.html) untuk menjadikan templat mengesahkan. Mari buat kedua -dua templat ini seterusnya.
7. Buat Templat Negeri Modal Asas
Berikut adalah beberapa gaya asas yang tergolong dalam css/app.css:
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span> $stateProvider<span>.state("Modal.confirmAddToCart", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modals/confirm.html" </span> <span>} </span> <span>} </span> <span>}); </span><span>});</span>
8. Buat Templat Sahkan Modal
<span><span><span><div</span> class<span>="Modal-backdrop"</span>></span><span><span></div</span>></span> </span><span><span><span><div</span> class<span>="Modal-holder"</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span></span>
Styling untuk Modal-Box:
<span>* </span><span>{ </span> <span>box-sizing: border-box; </span><span>} </span> <span><span>.Modal-backdrop</span> </span><span>{ </span> <span>position: fixed; </span> <span>top: 0px; </span> <span>left: 0px; </span> <span>height:100%; </span> <span>width:100%; </span> <span>background: #000; </span> <span>z-index: 1; </span> <span>opacity: 0.5; </span><span>} </span> <span><span>.Modal-holder</span> </span><span>{ </span> <span>position: fixed; </span> <span>top: 0px; </span> <span>left: 0px; </span> <span>height:100%; </span> <span>width:100%; </span> <span>background: transparent; </span> <span>z-index: 2; </span> <span>padding: 30px 15px; </span><span>}</span>
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Sekarang kita mempunyai keadaan modal induk dengan negara kanak -kanak, dan kedua -dua templat mereka, semua yang tersisa untuk dilakukan sebenarnya mencetuskan modal. UI-ROUTER memberikan kita arahan yang dipanggil UI-SREF yang berkelakuan sama dengan atribut HREF dari tag utama. Ia pada dasarnya akan menghubungkan kami dengan nama negeri yang kami sediakan.
angular<span>.module("modalApp", ["ui.router"])</span>
Sekarang, apabila kita mengklik butang, penghala akan menavigasi kami ke keadaan modal.confirmaddtocart. Templat Modal Negeri akan dimuatkan terlebih dahulu ke dalam arahan U-View di Index.html. Ini akan menunjukkan latar belakang kami dan menyediakan pemegangnya. Kemudian, dialog Pengesahan Putih akan dimuatkan ke dalam arahan UI-View dalam templat modal induk dan Hey Presto! Kami mempunyai modal!
Perkara pertama yang mungkin anda perhatikan, adalah bahawa anda tidak boleh menutup modal. Mari kita selesaikan itu.
Angularui Router menyediakan kami dengan panggilan balik OneNenter dan Onexit yang memadamkan ketika memasuki dan meninggalkan negeri. Kami akan menggunakan panggilan balik OneNenter untuk menubuhkan beberapa pendengar acara yang akan menutup modal. Tetapi itu menimbulkan persoalan: bagaimana kita sebenarnya menutupnya? Menutup modal berasaskan negeri hanyalah soal peralihan ke keadaan yang berbeza. Sama ada keadaan modal berasal dari atau hanya beberapa lalai, keadaan tidak terpulang kepada anda. Buat masa ini, mari buat keadaan lalai kosong dan gunakannya untuk menavigasi dari keadaan modal kami.
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Acara -acara yang kami sediakan agak remeh. Kami hanya perlu mendengar kunci ESC, dan juga untuk sebarang klik pada latar belakang. Selain itu, panggilan e.stoppropagation () telah ditambah untuk mengelakkan klik di dalam modal yang menggelegak ke latar belakang dan menutup modal secara tidak sengaja.
pergi ke hadapan dan uji keluar.
Sekarang kita boleh membuka dan menutup modal, kita dapat melihat kekuatan sebenar pendekatan ini. Bukan sahaja bersih dan bermakna untuk mempunyai setiap modal yang diwakili oleh negara, tetapi ia membolehkan kita melintasi negara -negara dalam modal tersebut.
kami mula meminta pengguna mengesahkan pembelian mereka. Sekarang, mari kita tunjukkan mesej kejayaan mereka dalam modal lain. Sekali lagi, kita hanya akan menentukan keadaan baru dan templat yang berkaitan:
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span><span>});</span>
<span><span><!doctype html></span> </span><span><span><span><html</span> ng-app<span>="modalApp"</span>></span> </span> <span><span><span><head</span>></span> </span> <span><span><span><title</span>></span>Modals with Angular and Ui-Router<span><span></title</span>></span> </span> <span><span><span><link</span> rel<span>="stylesheet"</span> href<span>="css/app.css"</span> /></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/jquery.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/angular-ui-router.min.js"</span>></span><span><span></script</span>></span> </span> <span><span><span><script</span> type<span>="text/javascript"</span> src<span>="js/app.js"</span>></span><span><span></script</span>></span> </span> <span><span><span></head</span>></span> </span> <span><span><span><body</span>></span> </span> <span><span><span><h3</span>></span>Pusheen Hoodie<span><span></h3</span>></span> </span> <span><span><span><p</span>></span>Now you too can look like Pusheen!<span><span></p</span>></span> </span> <span><span><span><button</span>></span>Add to cart<span><span></button</span>></span> </span> <span><span><span><div</span> ui-view<span>="modal"</span> autoscroll<span>="false"</span>></span><span><span></div</span>></span> </span> <span><span><span></body</span>></span> </span><span><span><span></html</span>></span></span>
Sekarang, semua yang perlu dilakukan adalah menghubungkan butang "ya" dari modal mengesahkan, ke keadaan kejayaan baru. Walaupun kami berada di sana, kami boleh menambah butang "tidak" yang menghubungkan ke keadaan lalai kami untuk menutup modal.
angular<span>.module("modalApp", ["ui.router"]).config(function($stateProvider) { </span> $stateProvider<span>.state("Modal", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modal.html" </span> <span>} </span> <span>}, </span> <span>abstract: true </span> <span>}); </span> $stateProvider<span>.state("Modal.confirmAddToCart", { </span> <span>views:{ </span> <span>"modal": { </span> <span>templateUrl: "modals/confirm.html" </span> <span>} </span> <span>} </span> <span>}); </span><span>});</span>
dan di sana anda memilikinya! Modal berasaskan negara, dilayari. Saya mendapati bahawa merawat modal sebagai negeri adalah cara api yang pasti untuk memastikan pengguna anda mempunyai pengalaman yang lancar apabila menggunakan modal dalam aplikasi anda.
Oleh kerana modal hanya menyatakan, anda mendapat semua manfaat tambahan yang lain dari penghala UI sudut, termasuk:
Semua kod dari artikel ini boleh didapati di GitHub. Saya ingin mendengar maklum balas anda mengenai pendekatan ini untuk modal di AngularJS jadi sila, tinggalkan komen :)
Atas ialah kandungan terperinci Mewujudkan modal yang berkesudahan di sudut angular dengan penghala ui sudut. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!