Bir Angular uygulaması nasıl oluşturulur?

Back4App Guide _ How to build an AngularJS application_
Back4App Guide _ How to build an AngularJS application_

Angular, dinamik, duyarlı ve karmaşık web uygulamaları oluşturmak için popüler bir açık kaynak çerçevesidir. Angular ilk olarak 2010 yılında Google tarafından “AngularJS” adı altında geliştirilmiştir.

Angular, temiz ve düzenli bir kod yapısına sahip dinamik, tek sayfalık uygulamalar oluşturmanıza olanak tanır.

Angular, JavaScript’in bir üst kümesi olan ve dile tür denetimi, arayüzler ve sınıflar gibi özellikler ekleyen TypeScript’i kullanır. Bu, Angular kodunu daha sürdürülebilir ve daha az hataya eğilimli hale getirir.

Angular ile web geliştirmeyi kolaylaştırmak için Back4app gibi bir Backend-as-a-Service (BaaS) çözümü kullanmak faydalı olacaktır.

Back4app, kimlik doğrulama, veri depolama ve sunucu tarafı mantığı gibi özelliklere sahip önceden oluşturulmuş bir arka uç altyapısı sağlar.

Bu, arka uç geliştirmenin karmaşıklıkları hakkında endişelenmeden uygulamalarınızın ön ucunu oluşturmaya odaklanmanıza olanak tanır.

Bu makalede, Angular’ı keşfedecek ve Angular ve Back4app kullanarak temel bir blog uygulaması oluşturacaksınız.

Angular’ın Avantajları

Angular, birçok avantajı nedeniyle geliştiriciler arasında popülerlik kazanmıştır. İşte Angular’ın başlıca avantajlarından bazıları:

İki Yönlü Veri Bağlama

İki yönlü veri bağlama, Angular uygulamalarının kalitesini artıran, zaman kazandıran ve üretkenliği artıran bir özelliktir. İki yönlü veri bağlama, modelde (verilerde) yapılan değişikliklerin otomatik olarak görünüme (UI) yansımasını sağlar.

Modelde yapılan herhangi bir değişiklik anında görünüme yansıtılır. Bu, karmaşık ve dinamik uygulamaların geliştirilmesini daha kolay ve hızlı hale getirerek model ve görünümü senkronize etmek için şablon kod yazma ihtiyacını ortadan kaldırır.

Bağımlılık Enjeksiyonu

Bağımlılık enjeksiyonu, Angular’ın bileşenler ve hizmetler arasındaki bağımlılıkları yönetmeyi kolaylaştıran çok önemli bir özelliğidir. Bağımlılık enjeksiyonu, Angular uygulamalarının güvenilirliğini, sürdürülebilirliğini ve test edilebilirliğini artıran güçlü bir özelliktir.

Angular’daki bağımlılık enjeksiyonu, bileşenlerin ve hizmetlerin diğer bileşenler ve hizmetler üzerindeki bağımlılıklarını bildirmelerini sağlar. Bağımlılık enjeksiyon sistemi daha sonra bu bağımlılıkları otomatik olarak oluşturma ve sağlama görevini üstlenir. Bu, bağımlılıkları manuel olarak oluşturma ve yönetme ihtiyacını ortadan kaldırarak hata riskini azaltır.

Angular’ın bağımlılık enjeksiyon sistemi, bağımlılıkları yönetmeyi kolaylaştırır ve yazmanız gereken kod miktarını azaltır.

Bileşen Tabanlı Mimari

Angular’ın bileşen tabanlı mimarisi, karmaşık kullanıcı arayüzlerini daha küçük, yeniden kullanılabilir bileşenlere ayırarak oluşturmayı kolaylaştırır.

Bileşenler farklı uygulama parçaları arasında kolayca yeniden kullanılabilir. Bileşenler bağımsız olarak geliştirilebilir, bu da birçok hareketli parçaya sahip karmaşık uygulamaların yönetimini kolaylaştırır. Bu mimari, bileşenler ayrı ayrı izole edilip test edilebildiğinden kodun test edilmesini ve hata ayıklanmasını da kolaylaştırır.

TypeScript

TypeScript, statik tip denetimi, arayüzler, sınıflar ve diğer özellikleri dile ekleyen bir JavaScript üst kümesidir. Microsoft tarafından sürdürülen açık kaynaklı bir dildir ve büyük ölçekli web uygulamaları geliştirmek için popüler bir seçimdir.

Angular, TypeScript ile yazılmıştır. Bu, daha iyi araçlar ve daha sağlam bir geliştirme deneyimi sağlar. TypeScript’in statik yazımı, geliştiricilerin hataları çalışma zamanı yerine derleme zamanında yakalamasına olanak tanıyarak kodun bakımını ve yeniden düzenlenmesini kolaylaştırır.

Büyük Topluluk

Angular, çeşitli nedenlerle inanılmaz derecede değerli olabilecek geniş ve aktif bir geliştirici topluluğuna sahiptir.

Büyük bir topluluk, öğreticiler, belgeler ve forumlar gibi birçok kaynak sunar. Bu kaynaklar, Angular’a yeni başlayan veya belirli sorunlara çözüm arayan geliştiriciler için inanılmaz derecede yararlı olabilir.

Geniş bir topluluk, birçok geliştiricinin Angular için üçüncü taraf eklentileri ve uzantıları oluşturup paylaşarak çerçeveyi geliştirmek için aktif olarak çalıştığı anlamına gelir. Projelerinize yeni işlevler eklemek için mevcut kodlardan yararlanabileceğiniz için bu size zaman ve emek kazandırabilir.

Angular’ın Sınırlamaları

Angular, web uygulamaları oluşturmak için güçlü ve popüler bir çerçeve olsa da, bilmeniz gereken bazı sınırlamaları vardır. Angular’ın bazı sınırlamaları aşağıdakileri içerir:

Dik Öğrenme Eğrisi

Angular, web geliştirmeye birçok yeni kavram ve yaklaşım getirmesi nedeniyle bazı geliştiriciler için öğrenmesi zor olabilir. Modüller, bileşenler, hizmetler, bağımlılık enjeksiyonu ve reaktif programlama hakkında bilgi edinmek için önemli bir zaman harcamanız gerekebilir.

Büyük Boy

Angular, diğer ön uç çerçevelerine kıyasla nispeten büyük bir çerçevedir. Angular’ın büyük boyutu, öncelikle form işleme, yönlendirme ve veri yönetimi gibi birçok yerleşik işlevi içeren kapsamlı özellik setinden kaynaklanmaktadır.

Angular’ın büyük boyutu, web uygulamaları için daha yavaş yükleme sürelerine neden olabilir ve bu da kullanıcı deneyimini olumsuz yönde etkileyebilir. Bu durum özellikle yavaş internet bağlantılarına sahip kullanıcılar için geçerlidir.

Angular’ın büyük boyutu, karmaşık projelerin geliştirilmesini ve sürdürülmesini daha zor hale getirebilir.

Sınırlı SEO

Angular’ın sınırlı SEO yetenekleri, öncelikle tek sayfalı bir uygulama (SPA) çerçevesi olmasından kaynaklanmaktadır. SPA’lar tamamen tarayıcıda çalışacak şekilde tasarlanmıştır, yani HTML kodu JavaScript kullanılarak dinamik olarak oluşturulur. Bu, arama motoru tarayıcılarının Angular destekli bir web sitesinin içeriğini doğru bir şekilde indekslemesini zorlaştırır.

Blog Uygulamasının Oluşturulması

Bir Angular uygulaması oluşturun ve adını “blog-application” koyun. Angular uygulamasını oluşturmak için terminalinizde projenizin dizininde aşağıdaki komutu çalıştırın:

ng new blog-application

Angular uygulamanızı oluşturduktan sonra iki bileşen oluşturacaksınız. Bu iki bileşen home ve post bileşenleri olacak. Bileşenleri oluşturduktan sonra bileşenleri yönlendireceksiniz.

Bileşenleri oluşturmak için aşağıdaki komutları çalıştırın:

cd blog-application
ng generate component home-component
ng generate component post-component

Bileşenleri oluşturduktan sonra, app-routing.module.ts dosyasında yönlendirmelerini yapılandırın.

Bu şekilde:

//app-routing.module.ts
import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { HomeComponentComponent } from './home-component/home-component.component';
import { PostComponentComponent } from './post-component/post-component.component';

const routes: Routes = [
  {path: '', component: HomeComponentComponent},
  {path: 'post', component: PostComponentComponent}
];

@NgModule({
  imports: [RouterModule.forRoot(routes)],
  exports: [RouterModule]
})

export class AppRoutingModule { }

Yukarıdaki kod bloğu, routes dizisinde iki rota tanımlar. HomeComponentComponent için rota boş bir yola sahiptir. Boş yol, HomeComponentComponent ‘in uygulamanızı oluşturur oluşturmaz görüntüleneceğini belirtir.

PostComponentComponent rotası ‘post’ yolu ile tanımlanmıştır, yani bu rotaya gittiğinizde PostComponentComponent oluşturulacak ve görünümde görüntülenecektir.

Belirtilen rotalara gitmek için uygulamanıza bir başlık ekleyeceksiniz. Başlığı app-component.html dosyasında oluşturacaksınız. Başlık, farklı rotalara giden öğeler içerecektir.

Örneğin:

<!--app.component.html-->
<div>

  <div class="header">
    <a routerLink=""><h2>Blog</h2></a>
  
    <a routerLink="post"><button>write</button></a>
  </div>

  <router-outlet></router-outlet>

</div>

Header div öğesi iki alt anchor öğesi içerir. Bağlantı öğeleri bir h2 öğesini ve bir düğme öğesini sarar. H2 öğesine tıklandığında varsayılan rotaya gidilirken, düğme öğesine tıklandığında post rotasına gidilir. Router-outlet, yönlendirilen bileşenleri header div altında görüntüler.

Başlığı oluşturduktan sonra, app-compnent.scss dosyasında başlığı şekillendirirsiniz:

/* app.component.scss*/
.header{
    display: flex;
    justify-content: space-between;
    padding: 1rem 0;
}

Back4App’i Entegre Etme

Back4app ile bir uygulama oluşturmaya başlamak için öncelikle bir hesabınız olduğundan emin olun. Bir Back4app hesabınız yoksa, verilen talimatları izleyin:

  1. Back4app web sitesine gidin.
  2. Ana sayfanın sağ üst bölümündeki Kaydol düğmesini bulun ve tıklayın.
  3. Kayıt formunu doldurun ve gönderin.

Başarılı bir şekilde kaydolduktan sonra Back4app hesabınıza giriş yapın ve aşağıdaki adımları izleyin:

  1. Sağ üst köşedeki YENİ UYGULAMA düğmesini bulun ve üzerine tıklayın.
  2. İstediğiniz uygulama adını gireceğiniz bir forma yönlendirileceksiniz.
  3. Uygulama adınızı girin ve uygulama oluşturma işleminizi başlatmak için OLUŞTUR düğmesini seçin.
Yeni Back4app uygulaması oluşturun

‘OLUŞTUR’ düğmesine tıkladıktan sonra başvurunuz oluşturulacak ve başvuru panosuna yönlendirileceksiniz.

Back4app gösterge tablosu

Uygulamanızı Back4app’e Bağlama

Angular uygulamanızı oluşturduğunuz Back4app uygulamasına bağlamak için Parse JavaScript SDK‘yı yüklemeniz gerekir.

Paket yöneticinize bağlı olarak aşağıdaki komutlardan birini çalıştırarak SDK’yı yükleyin:

#using npm
npm install parse
		or 
#using yarn
yarn add parse

Parse JavaScript SDK‘yı yükledikten sonra Uygulama Kimliğinizi ve JavaScript Anahtarınızı almalısınız. Angular uygulamanızı Back4app uygulamasına bağlamak için bunlara ihtiyacınız olacak.

Back4app’ten Uygulama Kimliği ve JavaScript Anahtarını almak için kontrol panelinden Uygulama Ayarları ‘nı seçerek Güvenlik ve Anahtarlar bölümüne gidin. Burada, Angular uygulamanızı Back4app’e bağlamak için gerekli anahtarlara kolayca erişebilirsiniz.

Uygulama Kimliğinizi ve JavaScript Anahtarınızı aldıktan sonra bunları uygulamanızda güvenli bir şekilde saklayın.

app.component.ts dosyanızda, Parse ‘ın küçültülmüş sürümünü parse‘dan içe aktarın. Ardından Parse üzerinde initialize yöntemini çağırın. Initialize metodu argüman olarak Uygulama Kimliği ve JavaScript Anahtarını alır. Son olarak, Parse üzerindeki serverURL ‘yi‘https://parseapi.back4app.com/’ olarak ayarlayın.

Bunu yaptıktan sonra app.component.ts dosyanız aşağıdaki gibi görünmelidir:

//app.component.ts
import { Component } from '@angular/core';
import * as  Parse from 'parse';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.scss']
})

export class AppComponent {

}

Parse.initialize(PARSE_APPLICATION_ID, PARSE_JAVASCRIPT_KEY);
(Parse as any).serverURL = "<https://parseapi.back4app.com/>";

Back4app Uygulamanıza Veri Ekleme

Back4App uygulamanıza veri eklemek için, bir kullanıcıdan veri almak üzere bir form oluşturacaksınız. Formu gönderirken bir handleSubmit fonksiyonu çalıştıracaksınız. handleSubmit işlevi, blog uygulamanızdan Back4app uygulamasına yeni bir gönderi ekleme mantığını içerecektir.

Bu şekilde:

// post-component.component.ts
import { Component } from '@angular/core';
import * as  Parse from 'parse';

@Component({
  selector: 'app-post-component',
  templateUrl: './post-component.component.html',
  styleUrls: ['./post-component.component.scss']
})
export class PostComponentComponent {

  data: postData = {
    title: '',
    body: '',
  }

  handleSubmit(){
    try {
      const Post = new Parse.Object("Post");
  
      Post.set("title", this.data.title);
      Post.set("body", this.data.body);
  
      Post.save().then(() => {
        console.log("New Post added successfully");
      });
    } catch (error) {
      console.log(error);
    }
  }

}

interface postData {
  title: string,
  body: string
}

Yukarıdaki kod bloğu post-component.component.ts dosyasıdır**.** handleSubmit fonksiyonu yeni bir Parse Post nesnesi oluşturur ve title özelliğini data.title özelliğinin değerine ve body özelliğini data.body özelliğine ayarlar. Son olarak, Post.save() işlevini kullanarak Post nesnesinin özelliklerini Parse sunucusuna kaydeder.

Veri özellikleri değerlerini bir form aracılığıyla kullanıcıdan alacaktır. Bunu yapmak için post-component.component.html dosyasında bir form oluşturacaksınız.

Bu şekilde:

<!-- post-component.component.html -->
<form class="post" (ngSubmit)="handleSubmit()">
    <input type="text" placeholder="Title..." name="title" [(ngModel)]="data.title" >

    <textarea name="body" placeholder="Body..."  cols="30" rows="10" [(ngModel)]="data.body"></textarea>

    <button type="submit">Post</button>
</form>

ngModel, title ve body giriş alanlarının değerlerini veri özelliklerine bağlar. ngSubmit, post-component.ts dosyasında bildirilen handleSubmit fonksiyonunu çağırarak form gönderme işlemini gerçekleştirir.

Ardından, bileşeninize stil vereceksiniz. Post-bileşeninin SCSS dosyasına aşağıdaki kodu girin:

/* post-component.component.scss */
.post{
    margin-block-start: 4rem;
    display: flex;
    flex-direction: column;
    gap: 1rem;
    align-items: center;
		
		input{
	    border: none;
			inline-size: 100%;
	    padding: 1rem;
	    border-radius: 7px;

			&::placeholder{
			  color: #e2e2e2;
			}

		textarea{
	    border: none;
	    inline-size: 100%;
	    padding: 1rem;

			&::placeholder{
		    color: #e2e2e2;
			}
		}
}

Back4app’ten Veri Getirme

Back4app uygulamanızdan veri almak için, veri almak istediğiniz sınıf için bir Parse sorgusu oluşturun. Sorgu ngOnInit yaşam döngüsü kancasında çalışacaktır.

Örneğin:

// home-component.component.ts
import { Component } from '@angular/core';
import * as  Parse from 'parse';

@Component({
  selector: 'app-home-component',
  templateUrl: './home-component.component.html',
  styleUrls: ['./home-component.component.scss']
})
export class HomeComponentComponent {

  data: postData[] = [];

  async ngOnInit() {

    try {
      const query = new Parse.Query("Post");

      const post = await query.find();

      this.data = post;

    } catch (error) {
      console.log(error);
    }
    
  }
  
}

interface postData {
  id: string,
  get: any,
} 

Yukarıdaki kod bloğu, Parse.Query() yöntemini kullanarak Back4app uygulamanızın veritabanından bir “Post” nesnesi arar. Ardından, Parse .Query() çağrısının sonucu üzerinde Parse SDK’nın find yöntemini çağırarak sorgunun sonuçlarını içeren bir dizi döndürür. Son olarak, döndürülen diziyi veri değişkenine atar.

Veri dizisini kullanarak HTML şablonunuzu oluşturacaksınız:

<!-- home-component.component.html -->
<div class="home">  
    
    <div class="post" *ngFor="let post of data">
        <h3>{{ post.get('title') }}</h3>
        <p>{{ post.get('body') }}</p>
        <button>Delete</button>
    </div>

</div>

ngFor yönergesi dizinin içinde dolaşır ve div’ine sarılmış HTML öğelerini oluşturur. post.get() yöntemi, Back4App veritabanınızdaki özniteliklerin title ve body özelliklerinin değerlerini alır.

Artık bileşenin SCSS dosyasına aşağıdaki kodu ekleyerek bileşeninize stil verebilirsiniz:

/* home-component.component.scss */
.home{
    display: flex;
    flex-direction: column;
    gap: 2rem;
    margin-block-start: 4rem;

    .post{
        border-radius: 12px;
        padding: 1rem;

        &:hover{
            box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1);
            background-color: #e2e2e2;
        }

        h3{
            text-transform: uppercase;
            margin-block-end: 0.4rem;
        }

        button{
            margin-block-start: 1rem;
        }
    }
}

Back4app Uygulamanızdan Veri Silme

Back4App uygulamanızdan veri silmek için, ilgili kayıt(lar)ı veritabanınızdan kaldırmak üzere destroy yöntemini kullanırsınız. home-component.component.ts dosyanızda bir deletePost fonksiyonu oluşturacaksınız. deletePost işlevi, belirli bir kimliğe dayalı olarak Back4app uygulamanızın veritabanından gönderileri silme mantığını içerecektir.

Bu şekilde:

// home-component.component.ts
async deletePost(id: string) {
    try {
      const Post = Parse.Object.extend("Post");
      const todo = new Post();
      todo.id = id;
      await todo.destroy();
      const newData = this.data.filter( (item: postData) => item.id !== id )
      this.data = newData;
    } catch (error) {
      console.log(error);
    }
  }

Yukarıdaki kod bloğu, Parse.Object.extend yöntemini kullanarak yeni bir Post nesnesi oluşturur. Ardından Post nesnesinin id özelliğini fonksiyona aktarılan id parametresine ayarlar.

Ardından, verilen ID’ye sahip gönderiyi Back4app veritabanından silmek için Post nesnesinin destroy yöntemini çağırır. Ardından veri dizisini filtreler ve silinen gönderi dışındaki tüm gönderileri içeren yeni bir newData dizisi döndürür. newData dizisi daha sonra data değişkenine atanır.

home-component.component.ts dosyasında deletePost fonksiyonunu tanımladıktan sonra, click olayını kullanarak fonksiyonu bileşenin HTML dosyasındaki silme düğmesine bağlayacaksınız.

home-component.component.html dosyanız aşağıdaki gibi görünmelidir:

<!-- home-component.component.html -->
<div class="home">  
    
    <div class="post" *ngFor="let post of data">
        <h3>{{ post.get('title') }}</h3>
        <p>{{ post.get('body') }}</p>
        <button (click)="deletePost(post.id)">Delete</button>
    </div>

</div>

Son olarak, styles.scss dosyanıza aşağıdaki kod bloğunu ekleyerek uygulamaya bazı global stiller ekleyin:

/* styles.scss */
*{
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body{
    inline-size: 50%;
    margin: 0 auto;
    background-color: #f2f2f2;
}

a{
    text-decoration: none;
    color: inherit;
}

button{
    border: 1px #333333 solid;
    padding: 0.3rem 0.5rem;
    border-radius: 0.4rem;
    background-color: inherit;
    inline-size: min-content;

		&:hover{
	    background-color: #333333;
	    color: #FFFFFF;
		}
}

Uygulamanın Test Edilmesi

Uygulamayı test etmek için projenizin terminalini açın ve aşağıdaki komutu çalıştırın:

ng serve

Yukarıdaki komut uygulamayı derler ve varsayılan olarak http://localhost:4200 adresindeki yerel bir sunucuda barındırır.

Uygulamanız başlatıldığında, aşağıdaki resimde gösterilen kullanıcı arayüzünü görmelisiniz:

Blog Uygulaması Ana Sayfası

Yaz düğmesine tıkladığınızda sizi yazı bileşenine yönlendirecektir. Yazı bileşeni, giriş alanları olan bir form ve bir düğme içerir.

Post-bileşen şu şekilde görünecektir:

Yeni blog ekle

Giriş alanlarını doldurduktan sonra, gönder düğmesine tıklamak giriş değerlerini Back4app veritabanına ekleyecektir. Bunu onaylamak için Back4app uygulama kontrol panelinizi kontrol edebilir veya uygulamanın ana sayfasına geri dönebilirsiniz.

Blogları getir

Sil düğmesine tıklandığında bir gönderi silinir. Örneğin, “Aslan nedir?” gönderisini sil düğmesine tıklayarak silin:

Blogu sil

Sonuç

Angular, ölçeklenebilir, sağlam web uygulamaları oluşturmak için güçlü bir çerçevedir. Modüler bir mimari, güçlü veri bağlama ve kapsamlı önceden oluşturulmuş bileşenlere sahiptir. Avantajları arasında geliştirici verimliliğinin artması, kolaylaştırılmış bir geliştirme süreci ve dinamik, duyarlı ve performanslı kullanıcı arayüzleri oluşturma yeteneği yer alır.

Hizmet olarak Backend çözümü olarak Back4app ile bir Angular uygulaması oluşturmak, geliştirmeyi büyük ölçüde basitleştirebilir ve hızlandırabilir. Back4app’in önceden oluşturulmuş altyapısıyla, kimlik doğrulama ve veri depolama gibi arka uç geliştirmenin karmaşıklıkları hakkında endişelenmeden uygulamanızın ön ucunu oluşturmaya odaklanabilirsiniz.


Leave a reply

Your email address will not be published.