Back to Question Center
0

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLI            Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated: ReactnpmAjaxTools & Semalt

1 answers:
hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLI

Pikeun kursus latihan online sudut ahli-dipingpin, anjeun moal bisa balik kaliwat pamungkas sudut ku Todd Motto. Coba kursus na di dieu, tur make kode nu SITEPOINT mun meunang 25% kaluar jeung pikeun mantuan rojongan SitePoint.

mean tumpukan ngandung téknologi canggih dipaké pikeun ngamekarkeun boh server-sisi jeung klien-sisi aplikasi wéb di lingkungan Semalt. Komponén tina tumpukan hartosna kaasup database MongoDB, Express. JS (a kerangka web), sudut (a kerangka hareup-tungtung), sarta titik dina. JS lingkungan runtime - mood lighting gadgets. Nyandak kadali kana tumpukan hartosna sarta familiarizing téknologi Semalt béda salila prosés baris mantuan anjeun jadi hiji Semalt pamekar full-tumpukan.

lapisan JavaScript urang pangaruh geus nyirorot dipelak leuwih taun sarta tumuwuh kalayan yén, aya hiji kahayang lumangsung tetep nepi jeung tren panganyarna dina programming. téknologi anyar geus mecenghul sarta téknologi aya geus dituliskeun tina taneuh nepi (Kuring nempo anjeun, Semalt).

tutorial ieu intends nyieun aplikasi hartosna ti scratch sarta ngalayanan sakumaha apdet kana aslina hartosna tumpukan tutorial. Mun anjeun geus akrab jeung mean jeung rék ngamimitian kalawan coding, Anjeun bisa ngaliwatan ka bagian Tinjauan.

Perkenalan kana hartosna tumpukan

titik. JS - titik. JS téh mangrupakeun lingkungan nu runtime server-sisi diwangun dina luhureun mesin V8 JavaScript Chrome urang. Titik. JS ieu dumasar kana hiji arsitektur acara-disetir nu ngalir dina thread single sarta non-blocking IO. pilihan desain ieu ngidinan Anjeun pikeun ngawangun aplikasi wéb real-time dina JavaScript anu skala ogé.

Express. JS - Express mangrupakeun kerangka aplikasi wéb minimalistic acan tahan pikeun titik. JS. Nganyatakeun. JS migunakeun fungsi middleware pikeun nanganan requests HTTP lajeng boh balik respon atawa maot dina parameter pikeun middleware sejen. Aplikasi-tingkat, router-tingkat, sarta kasalahan-penanganan middlewares anu sadia dina Express. JS.

MongoDB - MongoDB mangrupakeun program database dokumen-berorientasi mana dokumén disimpen dina format JSON-kawas fléksibel. Keur hiji program database NoSQL, MongoDB relieves anjeun tina jargon tabular tina database relational.

sudut - sudut mangrupa kerangka aplikasi dimekarkeun ku Google pikeun ngawangun interaktif Aplikasi Single Page. Sudut, mimitina AngularJS, ieu dituliskeun ti scratch mun mindahkeun ka arsitektur basis Cibalong ti kerangka MVC heubeul umur. Sudut ngajak pamakéan TypeScript mana, dina pamanggih kuring, mangrupakeun ide nu sae sabab ngaronjatkeun workflow pangwangunan.

Ayeuna urang nuju acquainted jeung potongan tina teka hartosna, hayu urang tingali kumaha urang tiasa pas duanana babarengan, wajib urang?

Ihtisar

Semalt gambaran-tingkat luhur aplikasi urang.

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt

Urang gé jadi gedong hiji Awesome Ember Daptar Semalt tina taneuh nepi tanpa ngagunakeun sagala boilerplate template. Tungtung hareup bakal kaasup wangun anu narima daftar LIPI anjeun barang sarta pintonan nu apdet na renders sakabeh LIPI daptar sacara real waktu.

Sakur update mun nempo bakal diinterpretasi salaku hiji acara na ieu bakal initiate hiji pamundut HTTP. server bakal ngolah pamundut, update / dipulut ka SemaltDB lamun diperlukeun, lajeng balik hiji objek JSON. Tungtung hareup bakal ngagunakeun ieu pikeun ngapdet view urang. Nepi ka tungtun taun tutorial ieu, anjeun kudu boga aplikasi daptar LIPI anu Sigana mah ieu.

Prerequisites

hal munggaran mimiti, anjeun perlu mibanda titik. JS na SemaltDB dipasang pikeun ngamimitian. Mun anjeun sagemblengna anyar pikeun titik, abdi bakal nyarankeun maca pemula urang Guide to titik mun meunang hal rolling. Kitu ogé, netepkeun up SemaltDB téh gampang tur anjeun tiasa pariksa kaluar dokuméntasi maranéhanana pikeun paréntah panginstalan husus pikeun platform Anjeun.

     $ titik -V# V8. 0. 0    

Mimitian ladenan mongo daemon ngagunakeun paréntah.

     jasa sudo mongod ngamimitian    

Ka install versi panganyarna tina sudut, abdi bakal nyarankeun make sudut CLI. Ieu nawiskeun sagalana anjeun kedah ngawangun sarta nyebarkeun aplikasi sudut Anjeun. Mun anjeun geus teu wawuh jeung sudut CLI acan, pastikeun Anjeun pariksa kaluar The pamungkas sudut CLI Rujukan.

     npm install -g @ sudut / cli    

Jieun diréktori anyar keur urang proyék LIPI daptar. Semalt mana duanana hareup-tungtung jeung kode deui-tungtung bakal balik.

     mkdir Heboh-bucketlistcd Heboh-bucketlist    

Nyieun nu Backend Maké Express. JS na MongoDB

Express teu maksa wae konstrain struktural dina aplikasi wéb anjeun. Anjeun tiasa nempatkeun sakabéh kode aplikasi dina file tunggal jeung meunang ka pagawean, sacara téoritis. Sanajan kitu, codebase anjeun bakal janten mess lengkep. Gantina, urang nuju bade ngalakukeun ieu jalan MVC (Modél, Témbongkeun, sarta Semalt pintonan bagian.

MVC mangrupa pola arsitéktur anu misahkeun model anjeun (ka tungtung deui) jeung pintonan (UI) ti controller nu (sagalana di antara), ku kituna MVC. Kusabab sudut baris ngurus tungtung hareup pikeun kami, kami gé gaduh tilu directories, hiji keur model na karana keur Controllers, sarta diréktori umum dimana urang bakal nempatkeun kode sudut nu disusun.

Salian ieu, kami gé nyieun hiji aplikasi. JS file anu bakal ngawula salaku titik Éntri pikeun ngajalankeun server Express.

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt

Semalt ngagunakeun modél sarta controller arsitéktur pikeun ngawangun hal trivial kawas daftar urang aplikasi LIPI bisa sigana dasarna perlu, ieu bakal mantuan aktip wangunan anu gampang pikeun miara jeung refactor.

Initializing npm

Urang nuju leungit hiji pakét. json file pikeun tungtung deui urang. Ketik dina npm init jeung, sanggeus anjeun geus diwaler dina patarosan, Anjeun kudu gaduh pakét. json dijieun pikeun anjeun.

Urang gé dibewarakeun kabebasan urang jero pakét. json file. Pikeun proyék ieu kami gé kudu nu modul handap:

  • nganyatakeun : modul Express keur web server
  • mongoose : A perpustakaan populér pikeun MongoDB
  • bodyparser : Parses awak requests asup tur ngajadikeun eta sadia dina req. awak
  • cors : CORS middleware nyandak kadali aksés cross-usul ka server web urang.

Kuring geus ogé ditambahkeun a Aksara mimiti ku kituna urang bisa ngamimitian server kami nganggo npm mimiti .

   {"Ngaran": "Heboh-bucketlist","Versi": "1. 0. 0","Pedaran": "A aplikasi bucketlist basajan ngagunakeun hartosna tumpukan","Utama": "aplikasi JS.","Aksara": {"Start": "titik aplikasi"},// The ~ ieu dipaké pikeun cocog versi minor panganyarna (tanpa parobahan pegatna)"Kabebasan": {"Nganyatakeun": "~ 4 15. 3"."Mongoose": "~ 4 11. 0.","Cors": ". ~ 2 8. 3","Awakna-parser": "~ 1 17. 2".},"Pangarang": "","Lisénsi": "ISC"}    

Ayeuna ngajalankeun npm install jeung nu kudu ngurus masang kabebasan.

ngeusian dina aplikasi.

   // Ieu gé dibewarakeun sadayana kabebasan urang dieuconst nganyatakeun = merlukeun ( 'nganyatakeun');jalur const = merlukeun ( 'jalur');const bodyParser = merlukeun ( 'badan-parser');cors const = merlukeun ( 'cors');= Const mongoose merlukeun ( 'mongoose');// Initialize variabel aplikasi kamiaplikasi const = express   ;// nyatakeun Portconst port = 3000;    

Sakumaha anjeun tiasa tingali, urang geus ogé initialized nu aplikasi variabel sarta nyatakeun jumlah port. Objek aplikasi bakal instantiated dina kreasi web server Express. Urang ayeuna tiasa muka middleware kana server kami Express alatan nangtukeun aranjeunna kalayan aplikasi. make .

   // middleware pikeun CORSaplikasi. make (cors   );// middleware pikeun bodyparsing ngagunakeun duanana json na urlencodingaplikasi. make (. bodyParser urlencoded ({ngalegaan: leres}));aplikasi. make (bodyParser json   .);/ * Express. statik ieu mangrupa diwangun dina fungsi middleware ngawula file statis. Kami sangkan server express folder publik teh tempat néangan payil statik* /aplikasi. make (nganyatakeun statik (jalur gabung (__ dirname, 'publik')). );    

The aplikasi obyék tiasa ngartos ruteu teuing.

   aplikasi. meunang ( '/', (req, res) => {res. kirimkeun ( "halaman sah");})    

Di dieu, di meunang métode invoked on aplikasi nu pakait jeung metoda meunang HTTP. Butuh dua parameter, kahiji keur jalur atawa rute keur nu fungsi middleware kudu diterapkeun.

Kaduana teh middleware sabenerna sorangan, sarta ilaharna diperlukeun tilu alesan: nu req argumen pakait jeung Request HTTP; éta res argumen pakait jeung Tanggapan HTTP; na salajengna mangrupa callback argumen pilihan nu kudu invoked lamun aya middlewares saterusna séjén nu nuturkeun ieu. Simkuring teu dipake salajengna di dieu ti res. kirimkeun ends daur pamundut-response.

Tambahkeun garis ieu nuju tungtungna nyieun aplikasi kami ngadangukeun port yén urang kungsi ngadéklarasikeun baheula.

   // Dengekeun port 3000aplikasi. ngadangukeun (port,    => {konsol. asup ( `Mulai di server dina port $ {port}`);});    

npm mimiti kudu meunang server dasar urang up na ngajalankeun.

Ku standar, npm teu ngawas payil Anjeun / directories pikeun parobahan mana wae, jeung anjeun kudu sacara manual ngabalikan server unggal waktos Anjeun geus diropéa kode Anjeun. Kuring nyarankeun make nodemon keur nangkep payil Anjeun tur otomatis ngabalikan server lamun parobahan mana wae nu kauninga. Mun anjeun teu eksplisit nangtang nu Aksara ngajalankeun, nodemon bakal ngajalankeun file pakait sareng sipat utama dina pakét Anjeun. json .

     npm install nodemon -gnodemon    

Urang nuju ampir dipigawé ku aplikasi urang. JS file. Naon ditinggalkeun pikeun ngalakukeun? Urang kudu

  1. nyambung server kami kana databés
  2. Nyieun controller, nu urang lajeng tiasa diimpor ka aplikasi urang. JS .

Nyetel mongoose

Nyetel sarta nyambungkeun database hiji lugas sareng MongoDB. Kahiji, nyieun hiji config diréktori sarta berkas ngaranna database. JS pikeun nyimpen data konfigurasi urang. Ngekspor databés URI ngagunakeun modul. ékspor .

   // 27017 nyaeta jumlah port standar. modul. ékspor = {database: 'mongodb: // localhost: 27017 / bucketlist'}    

Jeung nyieun koneksi jeung database dina aplikasi. JS ngagunakeun mongoose. nyambung .

   // Sambungkeun mongoose kana databés kamiconst config = merlukeun ( '/ config / database.');mongoose. nyambung (config database.);    

"Tapi kumaha upami nyieun éta LIPI daptar database?", Anjeun bisa menta. pangkalan data bakal dijieun sacara otomatis sawaktos Anjeun ngalebetkeun dokumen a kana kempelan anyar dina database éta.

Gawe bareng dina controller sarta modél

Ayeuna hayu urang ngaléngkah ka nyieun LIPI daftar urang controller. Jieun bucketlist. Urang ogé kudu jalur sakabéh / bucketlist requests mun controller bucketlist urang (dina aplikasi. JS ).

   bucketlist const = merlukeun ( '/ Controllers / bucketlist.');// Routing sadayana requests HTTP pikeun / bucketlist mun bucketlist controlleraplikasi. make ( '/ bucketlist', bucketlist);    

Semalt versi ahir aplikasi urang. file JS.

   // Ieu gé dibewarakeun sadayana kabebasan urang dieuconst nganyatakeun = merlukeun ( 'nganyatakeun');jalur const = merlukeun ( 'jalur');const bodyParser = merlukeun ( 'badan-parser');cors const = merlukeun ( 'cors');= Const mongoose merlukeun ( 'mongoose');const config = merlukeun ( '/ config / database.');const bucketlist = merlukeun ( '/ Controllers / bucketlist.');// Connect mongoose kana databés kamimongoose. nyambung (config database.);// nyatakeun Portconst port = 3000;// Initialize variabel aplikasi kamiaplikasi const = express   ;// middleware pikeun CORSaplikasi. make (cors   );// Middlewares pikeun bodyparsing ngagunakeun duanana json na urlencodingaplikasi. make (. bodyParser urlencoded ({ngalegaan: leres}));aplikasi. make (bodyParser json   .);/ * Express. statik ieu mangrupa diwangun dina fungsi middleware ngawula file statis. Kami sangkan server express folder publik teh tempat néangan payil statik* /aplikasi. make (nganyatakeun statik (jalur gabung (__ dirname, 'publik')). );aplikasi. meunang ( '/', (req, res) => {res. kirimkeun ( "halaman sah");})// Routing sadayana requests HTTP pikeun / bucketlist mun bucketlist controlleraplikasi. make ( '/ bucketlist', bucketlist);// Dengekeun port 3000aplikasi. ngadangukeun (port,    => {konsol. asup ( `Mulai di server dina port $ {port}`);});    

Salaku saméméhna disorot di Tinjauan nu, urang Heboh LIPI daptar aplikasi bakal ruteu pikeun nanganan requests HTTP kalawan meunang, POST, sarta ngahapus métode. Semalt a bulistir-tulang controller jeung ruteu diartikeun keur meunang, POST, sarta ngahapus métode.

   // merlukeun pakét express na make express. Router   const nganyatakeun = merlukeun ( 'nganyatakeun');const router = express. Router   ;// meunang HTTP metoda pikeun / bucketlistrouter. meunang ( '/', (req, res) => {res. kirimkeun ( "meunang");});// padika POST HTTP pikeun / bucketlistrouter. pos ( '/', (req, res, salajengna) => {res. kirimkeun ( "POST");});// ngahapus metoda HTTP pikeun / bucketlist. Di dieu, urang lulus dina params nu objek id. router. ngahapus ( '/: id', (req, res, salajengna) => {res. kirimkeun ( "ngahapus");})modul. ékspor = router;    

Abdi nyarankeun make aplikasi Semalt atawa hal sarupa nguji API server Anjeun. Semalt boga platform GUI kuat nyieun ngembangkeun API anjeun gancang sarta gampang. Coba nu menta meunang on http: // localhost: 3000 / bucketlist tur tingal naha anjeun meunang respon dimaksudkeun.

Jeung saperti atra jadi sigana, aplikasi kami lacks modél. Di momen, aplikasi kami teu boga mékanisme pikeun ngirim data ka na meunangkeun data tina database urang.

Jieun daftar. JS Modél pikeun aplikasi kami tur ngartikeun LIPI daptar Schema saperti kieu:

   // merlukeun pakét mongoose= Const mongoose merlukeun ( 'mongoose');// Ngartikeun BucketlistSchema kalawan judul, pedaran jeung kategoriconst BucketlistSchema = mongoose. Schema ({Judul: {Jenis: string,diperlukeun: leres},pedaran: string,Kategori: {Jenis: string,diperlukeun: leres,enum: [ 'Luhur', 'Medium', 'Low']}});    

Lamun gawé bareng mongoose, Anjeun kudu mimitina nangtukeun Schema a. Kami geus tangtu hiji BucketlistSchema mibanda tilu kenop béda (judul, kategori, jeung pedaran). Unggal konci na pakait SchemaType na ngahartikeun harta di dokumen MongoDB urang. Lamun nuju wondering ngeunaan kurangna hiji id sawah, éta sabab urang gé bakal ngagunakeun standar _id anu bakal dijieun ku Mongoose.

Mongoose nangtukeun unggal schemas anjeun hiji _id sawah sacara standar lamun salah anu teu lulus kana constructor Schema. Jinis ditugaskeun mangrupa ObjectId mun coincide jeung kabiasaan standar MongoDB urang. ékspor. Argumen mimiti mongoose. Model nyaéta nami koleksi anu bakal dipaké pikeun nyimpen data dina MongoDB.

   const BucketList = modul. ékspor = mongoose. Model ( 'BucketList', BucketlistSchema);    

Salian ti schema, urang ogé bisa boga imah queries database jero modél Semalt urang jeung ngekspor aranjeunna salaku padika.

   // BucketList. manggihan    mulih sagala béréndélanmodul. ékspor. getAllLists = (callback) => {BucketList. manggihan (callback);}    

Di dieu urang nu dipake dina BucketList. manggihan padika nu queries database jeung mulih koleksi BucketList. Kusabab hiji fungsi callback dipaké, hasilna bakal diliwatan leuwih kana callback nu.

Semalt eusian dina middleware pakait jeung metoda meunang ningali kumaha ieu fits babarengan.

   bucketlist const = merlukeun ( '/ model / Daptar. ');// meunang HTTP metoda pikeun / bucketlistrouter. meunang ( '/', (req, res) => {bucketlist. getAllLists ((err, béréndélan) => {lamun (err) {res. json ({. ayaan: palsu, surat: `Gagal pikeun muka kabeh béréndélan Kasalahan: $ {err}`});}sejenna {res. nulis (. JSON stringify ({ayaan: leres, béréndélan: béréndélan}, null, 2));res. tungtung  ;}});});    

Urang geus invoked nu getAllLists métode jeung callback nyokot dua alesan, kasalahan sarta hasilna.

Kabéh callbacks di Semalt make pola: callback (kasalahan, hasilna). Lamun kasalahan lumangsung executing pamundut teh, parameter kasalahan bakal ngandung hiji dokumen kasalahan, sarta hasilna bakal hypothesis. Mun pamundut ieu sukses, parameter kasalahan bakal null, sarta hasilna bakal Asezare populata kalawan hasil pamundut teh.

- MongoDB Dokumén

Semalt, hayu urang tambahkeun metodeu pikeun inserting daptar anyar jeung mupus hiji daftar aya ti model urang.

   // newList. ngahemat ieu dipaké pikeun nyelapkeun dokumen kana MongoDBmodul. ékspor. addList = (newList, callback) => {newList. simpen (callback);}// Di dieu urang kudu lulus hiji parameter id mun BUcketList. mindahkeunmodul. ékspor. deleteListById = (id, callback) => {hayu query = {_id: id};BucketList. dipiceun (pamundut, callback);}    

Urang ayeuna kudu ngomean middleware controller kami pikeun POST tur ngahapus ogé.

   // padika POST HTTP pikeun / bucketlistrouter. pos ( '/', (req, res, salajengna) => {hayu newList = bucketlist anyar ({Judul: req. awak. judul,pedaran: req. awak. pedaran,Kategori: req. awak. kategori});bucketlist. addList (newList, (err, daftar) => {lamun (err) {res. json ({. ayaan: palsu, surat: `Gagal mun nyieun daptar anyar Kasalahan: $ {err}`});}lamun henteures. json ({ayaan: leres, pesen: "hasil Katambah".});});});// ngahapus metoda HTTP pikeun / bucketlist. Di dieu, urang lulus dina param nu objek id. router. ngahapus ( '/: id', (req, res, salajengna) => {// aksés parameter nu di id tina item pikeun jadi dihapushayu id = req. params. id;// Telepon metoda modél deleteListByIdbucketlist. deleteListById (id, (err, daftar) => {lamun (err) {res. json ({. ayaan: palsu, surat: `Gagal dihapus daftar Kasalahan: $ {err}`});}sejenna lamun (daptar) {res. json ({ayaan: leres, pesen: "dihapus hasil"});}lamun henteures. json ({ayaan: palsu});})});    

Jeung ieu, urang boga API server kerja anu ngidinan kami jieun, tempoan, sarta pupus LIPI daptar. Anjeun tiasa ngonfirmasi yén sagalana geus sakumaha nu dimaksud ku ngagunakeun tukang pos.

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt

Urang ayeuna gé ngaléngkah ka tungtung hareup aplikasi ngagunakeun sudut. Ieu gé ngaranan eta sudut-src jeung nempatkeun eta kaayaan diréktori Heboh-bucketlist.

     Ng anyar sudut-src    

Urang ayeuna kudu sakabéh sudut 2 Struktur jero direktori Heboh-bucketlist urang. Kantor leuwih kana . sudut-cli. json jeung Ngarobih 'outDir' pikeun ". / Publik ".

Dina waktos salajengna basa Anjeun ngajalankeun ng ngawangun - nu urang gé do nuju tungtung tutorial ieu - sudut bakal compile sakabéh tungtung hareup urang sarta nempatkeun eta dina diréktori umum. Ku cara ieu, Anjeun bakal boga server Express jeung tungtung hareup ngajalankeun dina port sarua.

Tapi pikeun momen, ng ngawula nyaeta naon anu urang peryogi. Anjeun tiasa mariksa kaluar boilerplate aplikasi sudut leuwih di http: // localhost: 4200.

Struktur diréktori tina aplikasi sudut kami Sigana bit nu leuwih kompleks tinimbang struktur diréktori server kami urang. Sanajan kitu, 90% tina waktu urang bakal jadi gawé jero src / aplikasi / diréktori. Ieu bakal spasi gawé kami, sarta sakabéh komponén urang, model, sareng jasa bakal ditempatkeun di jero direktori ieu. Hayu urang boga katingal di kumaha tungtungna hareupeun kami bakal terstruktur ku tungtung tutorial ieu.

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt

Nyieun komponén, Model, sarta Service a

Hayu urang nyandak pendekatan hambalan-demi-hambalan keur coding aplikasi Semalt urang. Urang kudu:

  1. nyieun dua komponen anyar disebut ViewListComponent jeung AddListComponent
  2. nyieun modél pikeun urang Daptar , anu tiasa lajeng jadi diimpor ka komponen-komponen sareng jasa kami
  3. ngahasilkeun layanan anu tiasa ngadamel sagala requests HTTP pikeun server
  4. ngamutahirkeun AppModule mibanda komponen urang, jasa, sarta modul séjén nu bisa jadi dipikabutuh pikeun aplikasi ieu.

Anjeun tiasa ngahasilkeun komponén ngagunakeun ng ngahasilkeun komponén paréntah.

     ng ngahasilkeun komponén AddListng ngahasilkeun komponén ViewList    

Anjeun ayeuna kudu ningali dua directories anyar dina src / aplikasi folder, salah tiap pikeun komponén urang karek dijieun. Salajengna, urang kudu ngahasilkeun layanan pikeun urang Daptar .

     ng ngahasilkeun Daptar layanan    

Kuring leuwih milih ngabogaan jasa kuring dina hiji diréktori anyar (di jero src / aplikasi / ).

     jasa mkdirdaftar mv. jasa. ts jasa /    

Kusabab urang geus robah lokasi daftar. jasa. ts , urang kudu ngomean eta di urang AppModule . Dina pondok, AppModule mangrupa tempat di mana urang gé dibewarakeun sakabeh komponen, jasa, sarta modul urang lianna.

The ngahasilkeun paréntah geus ditambahkeun komponén kami kana appModule . Balik payun na impor ListService jeung nambahan eta kana panyadia Asép Sunandar Sunarya. Urang ogé kudu ngimpor FormsModule jeung HTTPModule jeung dibewarakeun aranjeunna salaku impor. FormsModule anu diperlukeun pikeun nyieun formulir pikeun aplikasi kami jeung HTTPModule pikeun ngirim requests HTTP pikeun server.

   impor {BrowserModule} tina '@ sudut / platform-browser';impor {NgModule} tina '@ sudut / core';impor {HttpModule} tina '@ sudut / http';impor {FormsModule} tina '@ sudut / bentuk';impor {AppComponent} tina '. / Aplikasi. komponén';impor {AddListComponent} tina '. / Nambahkeun-daftar / nambahkeun-daptar. komponén';impor {ViewListComponent} tina '. / View-daftar / view-daptar. komponén';impor {ListService} tina '. / Jasa / daftar. Komponén anu blok wangunan dina 2 aplikasi sudut. The    AppComponent    ngarupakeun komponén standar dijieun ku sudut. Tiap komponén diwangun ku:  

  • mangrupa kelas TypeScript nu nyepeng logika komponén
  • mangrupa file HTML jeung stylesheet yén nangtukeun komponén UI
  • mangrupa @Component decorator, nu geus dipaké pikeun ngartikeun metadata sahiji komponén.

Urang gé tetep kami AppComponent kacekel keur bagian paling. Gantina, urang gé nganggo dua komponen nu nembe dijieun, AddList jeung ViewList , nepi ka ngawangun logika urang. Urang gé sayang aranjeunna di jero urang AppComponent salaku digambarkeun dina gambar di handap ieu.

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt

Urang ayeuna boga hirarki komponén - nu AppComponent di luhur, dituturkeun ku ViewListComponent lajeng AddListComponent .

     / * aplikasi. komponén. html * /<-! Nu sakabeh eusi handap bisa dihapus kalawan kodeu nu anyar. ->

{{Judul}}!

     / * tempoan-daptar. komponén. html * /         

Jieun file disebut Daptar. ts di handapeun model diréktori. Ieu dimana urang bakal nyimpen modél pikeun urang Daptar .

   / * Daptar. ts * /Daptar panganteur ékspor {_id ?: string;Judul: string;pedaran: string;Kategori: string;}    

Témbongkeun-Daptar Cibalong

The ViewListComponent 'logika komponén urang ngawengku:

  1. béréndélan harta anu mangrupa Asép Sunandar Sunarya ti Daptar ngetik. Ieu mertahankeun salinan tina béréndélan fetched ti server. Ngagunakeun téhnik ngariung sudut urang, sipat komponén anu bisa diasupan jero citakan.
  2. loadLists beban sagala béréndélan ti server. Di dieu, urang nu dipake ieu. ListSev. getAllLists métode jeung ngalanggan nepi ka eta. getAllLists mangrupakeun metoda jasa (kami geus teu tangtu eta acan) anu ngalakukeun sabenerna http. meunang pamundut na mulih daftar; loadLists lajeng beban kana daftar Cibalong urang harta.
  3. deleteList (daptar) handles prosedur ngahapus lamun pamaké clicks dina Pupus tombol. Ieu gé nelepon deleteList ladenan Daptar urang métode jeung id salaku argumen. Nalika server responds nu ngahapus ieu suksés, urang nelepon ka loadLists metoda pikeun ngapdet view urang.
   / * tempoan-daptar. komponén. ts * /impor {Cibalong, OnInit} tina '@ sudut / core';impor {ListService} tina '. / Jasa / daptar. jasa ';impor {Daptar} tina '. / Model / Daptar '@Komponén({pamilihan: 'aplikasi-view-daptar',templateUrl: '. / View-daptar. komponén. html ',styleUrls: [ '. / View-daptar. komponén. CSS ']})kelas ékspor ViewListComponent implements OnInit {// mangrupa daptar propoerty nu mangrupa Asép Sunandar Sunarya ti tipe Daptarbéréndélan swasta: Daptar [] = [];constructor (listServ swasta: ListService) {}ngOnInit    {// Muat kabeh daftar kana initieu. loadLists   ;}loadLists publik    {// Cokot sadayana béréndélan ti server na ngamutahirkeun harta béréndélanieu. listServ. getAllLists   . ngalanggan (respon => ieu. béréndélan = respon,)}// deleteList. daftar dihapus keur disaring kaluar ngagunakeun. metoda filterpublik deleteList (daftar: Daptar) {ieu. listServ. deleteList (daptar. _id). ngalanggan (respon => ieu. béréndélan = ieu. béréndélan. filter (béréndélan => béréndélan! == daptar),)}}    

template The ( view-daptar. Komponén. Kategori}} {{Daptar. Judul}} {{Daptar. pedaran}} ;"> Hapus

Urang geus dijieun méja pikeun nembongkeun béréndélan urang. Aya saeutik kode ilahar di dinya anu teu bagian tina HTML baku. Semalt ngabogaan rumpaka template euyeub nu nambihan saeutik zest mun file HTML disebutkeun polos Anjeun. handap mangrupa bagian tina rumpaka template Semalt.

  • The * ngFor diréktif ngidinan Anjeun loop ngaliwatan béréndélan harta.
  • Di dieu daftar ngarupakeun variabel template sedengkeun béréndélan mangrupa harta komponén.
  • Urang geus lajeng dipaké rumpaka interpolasi sudut urang {{}} meungkeut harta komponén kalawan template urang.
  • The acara rumpaka mengikat keur dipaké pikeun ngabeungkeut kana acara klik kana métode deleteList .

Simkuring deukeut gaduh aplikasi LIPI daptar berpungsi. Ayeuna, daftar urang. jasa. ts mangrupa kosong sarta kami kudu ngeusian eta dina nyieun karya aplikasi urang. Salaku disorot baheula, jasa boga padika anu komunikasi sareng server.

   / * daptar. jasa. ts * /impor {Injectable} tina '@ sudut / core';impor {http, headers} tina '@ sudut / http';impor {observasi} tina 'rxjs / observasi';impor {Daptar} tina '. / Model / Daptar ''Rxjs / nambahan / operator / peta' impor;@Injectable   kelas ékspor ListService {constructor (http swasta: http) {}swasta serverApi = 'http: // localhost: 3000';getAllLists publik   : observasi  {hayu URI = `$ {ieu. serverApi} / bucketlist / `;balik ieu. http. meunang (URI). peta (res => res. json   ). peta (. res =>  res béréndélan);}publik deleteList (listId: string) {hayu URI = `$ {ieu. serverApi} / bucketlist / $ {listId} `;hayu headers = headers anyar;headers. append ( 'prefs-Tipe', 'aplikasi / json');balik ieu. http. ngahapus (URI, {headers}). peta (. res => res json   );}}    

Prosés kaayaan téh cukup basajan pikeun duanana metodeu:

  1. urang ngawangun URL dumasar kana alamat server kami
  2. urang jieun headers anyar jeung append aranjeunna kalayan {Kandungan-Type: aplikasi / json}
  3. urang ngalakukeun nu sabenerna http. meunang / http. ngahapus dina URL
  4. Urang transformasi respon kana json format.

Lamun anjeun teu wawuh jeung tulisan jasa éta komunikasi sareng server, abdi bakal nyarankeun maca tutorial dina RxJS sudut sarta: Jieun hiji Service API ka Obrolan ka sésana Backend.

Camat leuwih ka http: // localhost: 4200 / pikeun mastikeun yén aplikasi anu berpungsi. Sakuduna boga méja nu mintonkeun sagala béréndélan nu urang saméméhna geus dijieun.

Tambah-Daptar Cibalong

Urang nuju leungit fitur anu, sanajan. aplikasi kami lacks mékanisme pikeun nambahkeun / nyieun béréndélan anyar jeung otomatis ngamutahirkeun ViewListComponent nalika daftar anu dijieun. Hayu urang eusian batal ieu.

The AddListComponent template 's mangrupakeun tempat kami gé nempatkeun kode pikeun formulir HTML urang.

      ">
Judul
Pilih Kategori
Nepikeun

Di jero template kami, anjeun tiasa ningali sababaraha instansi tina [(ngModel)] dipake. The rumpaka aneh-pilari mangrupakeun diréktif anu implements dua arah ngariung di sudut. Dua arah ngariung sabagian dipake lamun nu peryogi pikeun ngapdet sipat komponén tina pandangan anjeun sarta sabalikna.

Urang ngagunakeun hiji mékanisme acara-mengikat ( ngSubmit ) mun nelepon metoda onSubmit nalika pamaké submits formulir. métode diartikeun jero komponén urang.

   / * nambahkeun-daptar. komponén. ts * /impor {Cibalong, OnInit} tina '@ sudut / core';impor {Daptar} tina '. / Model / Daptar ';impor {ListService} tina '. / Jasa / daptar. jasa ';@Komponén({pamilihan: 'aplikasi-nambahkeun-daptar',templateUrl: '. / Nambahkeun-daptar. komponén. html ',styleUrls: [ '. / Nambahkeun-daptar. komponén. CSS ']})kelas ékspor AddListComponent implements OnInit {newList swasta: Daptar;constructor (listServ swasta: ListService) {}ngOnInit    {ieu. newList = {judulna: '',Kategori: '',pedaran: '',_id: ''}}publik onSubmit    {ieu. listServ. addList (ieu. newList). ngalanggan (respon => {lamun (respon. kasuksésan == leres)// Mun ayaan, ngapdet komponén view-daptar},);}}    

Di jero onSubmit , urang nelepon addList padika listService urang nu submits hiji http. pos pamundut ka server. Hayu urang ngomean daptar jasa kami sangkan ieu kajadian.

   / * daptar. jasa. ts * /publik addList (daftar: Daptar) {hayu URI = `$ {ieu. serverApi} / bucketlist / `;hayu headers = headers anyar;hayu awak = JSON. stringify ({. Judul: daftar judul, pedaran: daftar pedaran, kategori: daftar kategori. });konsol. asup (badan);headers. append ( 'prefs-Tipe', 'aplikasi / json');balik ieu. http. pos (URI, awak, {headers: headers}). peta (. res => res json   );}}    

Lamun server mulih {ayaan: leres} , urang kudu ngomean béréndélan kami sarta ngasupkeun daptar anyar kana méja urang.

Sanajan kitu, tangtangan dieu nyaeta yen béréndélan harta resides jero ViewList komponén. Urang kudu ngabéjaan komponén indungna nu daftar perlu diropéa via hiji acara. Urang make EventEmitter sarta @Output decorator sangkan ieu kajadian.

Nu kahiji, maneh kudu ngimpor Kaluaran jeung EventEmitter ti @ sudut / core .

   impor {Cibalong, OnInit, Kaluaran, EventEmitter} tina '@ sudut / core';    

salajengna, dibewarakeun EventEmitter jeung @Output decorator.

   @Output    addList: EventEmitter  = anyar EventEmitter    ;    

Lamun server mulih ayaan: leres , emit nu addList acara.

   onSubmit publik    {konsol. asup (ieu newList kategori. );ieu. listServ. addList (ieu. newList). ngalanggan (respon => {konsol. asup (respon);lamun (respon. kasuksésan == leres)ieu. addList. emit (. ieu newList);},);}    

Apdet Anjeun viewlist. komponén. html kalayan kode ieu.

            

Sarta pamustunganana, tambahkeun metoda ngaranna onAddList yén concatenates daptar karek ditambahkeun kana béréndélan harta.

   onAddList publik (newList) {ieu. béréndélan = ieu. béréndélan. concat (newList);}    

pagawean némpél

Semalt ditambahkeun sababaraha gaya ti bootswatch. com sangkan LIPI daftar urang aplikasi kasampak Heboh. Ngaji npm mimiti ti diréktori akar proyék hartosna. Ayeuna kudu boga kerja hartosna tumpukan aplikasi nepi na ngajalankeun di http: // localhost: 3000 /

wrapping Ieu Up

Urang geus katutup loba taneuh dina tutorial ieu, nyieun hiji aplikasi hartosna tumpukan ti scratch. Di dieu hiji kasimpulan naon urang teu di tutorial ieu. Simkuring:

  • dijieun dina tungtung deui tina aplikasi hartosna maké Express jeung MongoDB
  • wrote kode keur meunang / POST tur ngahapus ruteu
  • dihasilkeun hiji proyék sudut anyar ngagunakeun sudut CLI
  • dirancang dua komponen anyar, AddList jeung ViewList
  • dilaksanakeun layanan dina aplikasi urang nu sarwa logika komunikasi server.

Jeung nu eta keur ayeuna. Kuring miharep anjeun ngarasakeun maca. Semalt cinta maca pikiran anjeun sarta eupan balik dina komentar dihandap!

Disarankeun Kursus-kursus

Artikel ieu peer reviewed ku Jürgen Van de Moere. Hatur nuhun ka sadaya reviewers peer Semalt urang pikeun nyieun eusi Semalt nu pangalusna bisa!

Hartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung sudut CLIHartosna tumpukan: Ngawangun hiji App kalawan sudut 2+ jeung Topik sudut CLIRelated:
ReactnpmAjaxTools & Semalt
pamungkas sudut: AngularJS, sudut, sarta TypeScript
Todd Motto
Ahli-dipingpin AngularJS online, kursus latihan sudut sarta TypeScript pikeun individu jeung tim. Paké Kupon kode 'SITEPOINT' di Checkout mun meunang 25% kaluar .

March 1, 2018