MongoDB için Azure Cosmos DB API'siyle Angular uygulaması oluşturma - Angular ile kullanıcı arabirimi oluşturma
ŞUNLAR IÇIN GEÇERLIDIR: MongoDB
Bu çok bölümlü öğreticide Express ve Angular ile Node.js yazılmış yeni bir uygulamanın nasıl oluşturulacağı ve ardından MongoDB için Azure Cosmos DB API'siyle yapılandırılan Azure Cosmos DB hesabınıza nasıl bağlanacağı gösterilmektedir.
Öğreticinin 3. bölümünde 2. bölümdeki konular genişletilir ve aşağıdaki görevler yer alır:
- Angular Kullanıcı Arabirimini oluşturma
- Görünümü ayarlamak için CSS kullanma
- Uygulamayı yerel olarak test etme
Görüntülü kılavuz
Önkoşullar
Öğreticinin bu bölümüne başlamadan önce öğreticinin 2. bölümündeki adımları tamamladığınızdan emin olun.
İpucu
Bu öğretici, uygulamanızı adım adım oluşturmanızı sağlayacak adımlarla size yol gösterir. Tamamlanmış projeyi indirmek isterseniz, tamamlanmış uygulamayı github'daki angular-cosmosdb deposundan alabilirsiniz.
Kullanıcı Arabirimini oluşturma
Visual Studio Code'da, Node uygulamasını durdurmak için Durdur düğmesine tıklayın.
Windows Komut İstemi veya Mac Terminal penceresinde bir heroes bileşeni oluşturmak için aşağıdaki komutu girin. Bu kodda g=oluştur, c=bileşen, heroes=bileşen adıdır ve düz dosya yapısı kullanılmıştır (--flat). Alt klasör oluşturulmamıştır.
ng g c heroes --flat
Terminal penceresi yeni bileşenlerin onayını görüntüler.
Oluşturulan ve güncelleştirilen dosyalara bir göz atalım.
Visual Studio Code'daki Explorer bölmesinde, yeni src\app klasörüne gidin ve uygulama klasörünün içinde oluşturulan yeni heroes.component.ts dosyasını açın. Bu TypeScript bileşen dosyası önceki komut tarafından oluşturulmuştur.
İpucu
Visual Studio Code’da uygulama klasörü görünmüyorsa, Mac bilgisayarlarda CMD + SHIFT P tuşlarına, Windows çalıştıran bilgisayarlarda Ctrl + Shift + P tuşlarına basarak Komut Paletini açın ve ardından Reload Window yazarak sistem değişikliğini alın.
Aynı klasörde app.module.ts dosyasını açın. 5. ve 10. satırdaki bildirimlere
HeroesComponent
bileşeninin eklendiğine dikkat edin.heroes.component.html dosyasına dönün ve bu kodları kopyalayın.
<div>
, tüm sayfaya yönelik kapsayıcıdır. Kapsayıcı içinde, oluşturmamız gereken hero'ların bir listesi vardır. Kullanıcı arabiriminde bunları tıklayarak seçebilir, düzenleyebilir veya silebilirsiniz. HTML'de hangisinin seçili olduğunu anlayabilmeniz için bazı stil farklılıkları vardır. Ayrıca yeni hero’yu eklemenizi veya mevcut bir hero’yu düzenlemenizi sağlayan bir düzenleme alanı bulunur.<div> <ul class="heroes"> <li *ngFor="let hero of heroes" (click)="onSelect(hero)" [class.selected]="hero === selectedHero"> <button class="delete-button" (click)="deleteHero(hero)">Delete</button> <div class="hero-element"> <div class="badge">{{hero.id}}</div> <div class="name">{{hero.name}}</div> <div class="saying">{{hero.saying}}</div> </div> </li> </ul> <div class="editarea"> <button (click)="enableAddMode()">Add New Hero</button> <div *ngIf="selectedHero"> <div class="editfields"> <div> <label>id: </label> <input [(ngModel)]="selectedHero.id" placeholder="id" *ngIf="addingHero" /> <label *ngIf="!addingHero" class="value">{{selectedHero.id}}</label> </div> <div> <label>name: </label> <input [(ngModel)]="selectedHero.name" placeholder="name" /> </div> <div> <label>saying: </label> <input [(ngModel)]="selectedHero.saying" placeholder="saying" /> </div> </div> <button (click)="cancel()">Cancel</button> <button (click)="save()">Save</button> </div> </div> </div>
HTML’yi oluşturduğumuza göre artık şablonla etkileşim kurmasını sağlamak için heroes.component.ts dosyasına eklememiz gerekiyor. Aşağıdaki kod, şablonu bileşen dosyanıza ekler. Bazı hero’ları alan ve tüm verileri almak için hero hizmet bileşenini başlatan bir oluşturucu eklendi. Bu kod ayrıca, kullanıcı arabirimindeki olayları işleyebilmek için gerekli tüm yöntemleri ekler. heroes.component.ts’deki mevcut kodun üzerine aşağıdaki kodu kopyalayabilirsiniz. Hero ve HeroService alanlarında hataları görmeyi bekleyebilirsiniz çünkü bunlara karşılık gelen bileşenler henüz içeri aktarılmamıştır; bu hataları sonraki bölümde düzelteceksiniz.
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'app-heroes', templateUrl: './heroes.component.html', styleUrls: ['./heroes.component.scss'] }) export class HeroesComponent implements OnInit { addingHero = false; heroes: any = []; selectedHero: Hero; constructor(private heroService: HeroService) {} ngOnInit() { this.getHeroes(); } cancel() { this.addingHero = false; this.selectedHero = null; } deleteHero(hero: Hero) { this.heroService.deleteHero(hero).subscribe(res => { this.heroes = this.heroes.filter(h => h !== hero); if (this.selectedHero === hero) { this.selectedHero = null; } }); } getHeroes() { return this.heroService.getHeroes().subscribe(heroes => { this.heroes = heroes; }); } enableAddMode() { this.addingHero = true; this.selectedHero = new Hero(); } onSelect(hero: Hero) { this.addingHero = false; this.selectedHero = hero; } save() { if (this.addingHero) { this.heroService.addHero(this.selectedHero).subscribe(hero => { this.addingHero = false; this.selectedHero = null; this.heroes.push(hero); }); } else { this.heroService.updateHero(this.selectedHero).subscribe(hero => { this.addingHero = false; this.selectedHero = null; }); } } }
Explorer’da app/app.module.ts dosyasını açın ve
FormsModule
’e yönelik içeri aktarma eklemek için imports bölümünü güncelleştirin. Import bölümü artık şöyle görünmelidir:imports: [ BrowserModule, FormsModule ],
app/app.module.ts dosyasına 3. satırdaki yeni FormsModule modülüne yönelik içeri aktarma ekleyin.
import { BrowserModule } from '@angular/platform-browser'; import { NgModule } from '@angular/core'; import { FormsModule } from '@angular/forms';
Görünümü ayarlamak için CSS kullanma
Explorer sekmesinden, src/styles.scss dosyasını açın.
Aşağıdaki kodu styles.scss dosyasına kopyalayarak dosyanın mevcut içeriğini değiştirin.
/* You can add global styles to this file, and also import other style files */ * { font-family: Arial; } h2 { color: #444; font-weight: lighter; } body { margin: 2em; } body, input[text], button { color: #888; // font-family: Cambria, Georgia; } button { font-size: 14px; font-family: Arial; background-color: #eee; border: none; padding: 5px 10px; border-radius: 4px; cursor: pointer; cursor: hand; &:hover { background-color: #cfd8dc; } &.delete-button { float: right; background-color: gray !important; background-color: rgb(216, 59, 1) !important; color: white; padding: 4px; position: relative; font-size: 12px; } } div { margin: .1em; } .selected { background-color: #cfd8dc !important; background-color: rgb(0, 120, 215) !important; color: white; } .heroes { float: left; margin: 0 0 2em 0; list-style-type: none; padding: 0; li { cursor: pointer; position: relative; left: 0; background-color: #eee; margin: .5em; padding: .5em; height: 3.0em; border-radius: 4px; width: 17em; &:hover { color: #607d8b; color: rgb(0, 120, 215); background-color: #ddd; left: .1em; } &.selected:hover { /*background-color: #BBD8DC !important;*/ color: white; } } .text { position: relative; top: -3px; } .saying { margin: 5px 0; } .name { font-weight: bold; } .badge { /* display: inline-block; */ float: left; font-size: small; color: white; padding: 0.7em 0.7em 0 0.5em; background-color: #607d8b; background-color: rgb(0, 120, 215); background-color:rgb(134, 183, 221); line-height: 1em; position: relative; left: -1px; top: -4px; height: 3.0em; margin-right: .8em; border-radius: 4px 0 0 4px; width: 1.2em; } } .header-bar { background-color: rgb(0, 120, 215); height: 4px; margin-top: 10px; margin-bottom: 10px; } label { display: inline-block; width: 4em; margin: .5em 0; color: #888; &.value { margin-left: 10px; font-size: 14px; } } input { height: 2em; font-size: 1em; padding-left: .4em; &::placeholder { color: lightgray; font-weight: normal; font-size: 12px; letter-spacing: 3px; } } .editarea { float: left; input { margin: 4px; height: 20px; color: rgb(0, 120, 215); } button { margin: 8px; } .editfields { margin-left: 12px; } }
Dosyayı kaydedin.
Bileşeni görüntüleme
Şu an bileşenimiz var, peki ekranda görünmesini nasıl sağlarız? app.component.ts dosyasındaki varsayılan bileşenleri değiştirelim.
Explorer bölmesinde /app/app.component.ts'yi açın, başlığı Heroes olarak değiştirin, ardından heroes.components.ts (app-heroes) dosyasında oluşturduğumuz bileşenin adını, yeni bileşene başvurmak üzere ekleyin. Dosyanın içeriği şimdi aşağıdaki gibi görünmelidir:
import { Component } from '@angular/core'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.scss'], template: ` <h1>Heroes</h1> <div class="header-bar"></div> <app-heroes></app-heroes> ` }) export class AppComponent { title = 'app'; }
heroes.components.ts dosyasında Hero bileşeni gibi başvurduğumuz diğer bileşenler de bulunduğu için bunu da oluşturmamız gerekir. Angular CLI komut isteminde g=oluştur, cl=sınıf ve hero=sınıf adı olmak üzere bir hero modeli ve hero.ts adlı bir dosya oluşturmak için aşağıdaki komutu kullanın.
ng g cl hero
Explorer bölmesinden src\app\hero.ts dosyasını açın. hero.ts dosyasının içeriğini, bir kimlik, ad ve söze sahip bir Hero sınıfı ekleyen aşağıdaki kodla değiştirin.
export class Hero { id: number; name: string; saying: string; }
heroes.components.ts dosyasına geri dönün ve
selectedHero: Hero;
satırındaki (10. satır)Hero
’nun altında kırmızı bir çizgi olduğuna dikkat edin.Hero
terimine sol tıkladığınızda Visual Studio, kod bloğunun sol tarafında bir ampul simgesi görüntüler.Ampule tıklayın ve ardından "/app/hero" dosyasından Hero İçeri Aktar'a tıklayın veya "./hero" dosyasından Hero İçeri Aktar'a tıklayın. (İleti, kurulumunuza bağlı olarak değişir)
2. satırda yeni bir kod satırı görünür. 2. satır /app/hero’ya başvuruyorsa, yerel klasördeki (./hero) hero dosyasına başvurması için bu satırı değiştirin. 2. satır şu şekilde görünmelidir:
import { Hero } from "./hero";
Bu kısım, modeli belirler ancak hizmeti oluşturmamız gerekir.
Hizmeti Oluşturma
Angular CLI komut isteminde g=oluştur, s=hizmet, hero=sınıf adı ve m=app.module’e koy olmak üzere app.module.ts dosyasında bir hero hizmeti oluşturmak için aşağıdaki komutu girin.
ng g s hero -m app.module
Visual Studio Code’da heroes.components.ts dosyasına geri dönün.
constructor(private heroService: HeroService) {}
satırında (13. satır),HeroService
altında kırmızı bir çizgi vardır.HeroService
’e tıkladığınızda kod bloğunun sol tarafında bir ampul görünür. Ampule tıklayın ve ardından "./hero.service " içinden HeroService İçeri Aktar'a tıklayın. veya "/app/hero.service " içinden HeroService'i içeri aktarın.Ampule tıkladığınızda 2. satıra yeni bir kod satırı eklenir. 2. satır /app/hero.service klasörüne başvuruda bulunursa, yerel klasörden (./hero.service) hero dosyasına başvuracak şekilde değiştirin. 2. satır şu şekilde görünmelidir:
import { HeroService } from "./hero.service"
Visual Studio Code'da hero.service.ts dosyasını açın ve dosyanın içeriğinin yerine aşağıdaki kodu kopyalayın.
import { Injectable } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { Hero } from './hero'; const api = '/api'; @Injectable() export class HeroService { constructor(private http: HttpClient) {} getHeroes() { return this.http.get<Array<Hero>>(`${api}/heroes`) } deleteHero(hero: Hero) { return this.http.delete(`${api}/hero/${hero.id}`); } addHero(hero: Hero) { return this.http.post<Hero>(`${api}/hero/`, hero); } updateHero(hero: Hero) { return this.http.put<Hero>(`${api}/hero/${hero.id}`, hero); } }
Bu kod, sağlamanız gereken bir modül olan ve Angular’ın en yeni sürümünü sunduğu HttpClient'ı kullanır. Şimdi bunu yapacağız.
Visual Studio Code'da app.module.ts dosyasını açın ve içeri aktarma bölümünü HttpClientModule’ü içerecek şekilde güncelleştirerek HttpClientModule’ü içeri aktarın.
imports: [ BrowserModule, FormsModule, HttpClientModule ],
app.module.ts dosyasında içeri aktarma listesine HttpClientModule içeri aktarma deyimini ekleyin.
import { HttpClientModule } from '@angular/common/http';
Visual Studio Code’daki tüm dosyaları kaydedin.
Uygulamayı oluşturma
Angular uygulamasını oluşturmak için komut isteminde aşağıdaki komutu girin.
ng b
Bir sorun oluşursa, terminal penceresi düzeltilecek dosyalarla ilgili bilgileri görüntüler. Oluşturma işlemi tamamlandığında, yeni dosyalar dist klasörüne gider. Dilerseniz dist klasöründeki yeni dosyaları gözden geçirebilirsiniz.
Şimdi uygulamayı çalıştıralım.
Visual Studio Code sol taraftaki Hata Ayıkla düğmesine ve ardından Hata Ayıklamayı Başlat düğmesine tıklayın.
Şimdi bir İnternet tarayıcısı açın ve localhost:3000 adresine giderek yerel olarak çalışan uygulamayı görüntüleyin.
Sonraki adımlar
Öğreticinin bu bölümünde aşağıdakileri yaptınız:
- Angular kullanıcı arabirimi oluşturuldu
- Uygulama yerel olarak test edildi
Azure Cosmos DB hesabı oluşturmak için öğreticinin sonraki bölümüne geçebilirsiniz.
Azure Cosmos DB'ye geçiş için kapasite planlaması yapmaya mı çalışıyorsunuz? Kapasite planlaması için mevcut veritabanı kümeniz hakkındaki bilgileri kullanabilirsiniz.
- Tüm bildiğiniz mevcut veritabanı kümenizdeki sanal çekirdek ve sunucu sayısıysa, sanal çekirdek veya vCPU kullanarak istek birimlerini tahmin etme hakkında bilgi edinin
- Geçerli veritabanı iş yükünüz için tipik istek hızlarını biliyorsanız Azure Cosmos DB kapasite planlayıcısı kullanarak istek birimlerini tahmin etme hakkındaki bilgileri okuyun