# - 9.AngularJS
# - 9.AngularJS
JS]
İÇİNDEKİLER
ANGULAR
JS
............................................................................................................................................................
2
AngularJS
Çalışma
Yapısı
ve
Çalışma
Ortamı
..........................................................................................................
2
AngularJS
ve
JQuery
Karşılaştırması
.........................................................................................................................
3
AngularJS
Expression
.........................................................................................................................................
3
AngularJS
Moduler
Yapısı
.................................................................................................................................
4
AngularJS
Controller
...........................................................................................................................................
5
AngularJS
Directives
...........................................................................................................................................
6
NG-‐
Directive
......................................................................................................................................................................
7
Custom
Directive
..............................................................................................................................................................
8
AngularJS
Filters
(AngularJS
Filtreleri)
....................................................................................................
11
AngularJS
Animation
.......................................................................................................................................
13
AngularJS
Route
................................................................................................................................................
17
AngularJS
CRUD
.................................................................................................................................................
19
[ANGULAR
JS]
ANGULAR JS
Google tarafından javascript dili üzerine MVC/MVVM yapısında geliştirilen, Single Page Application yaklaşımını
benimseyen ve client side çalışan javascript frameworküdür.
Günümüz web yazılım geliştirme mantalitesi artık server dan olabildiğince uzaklaşıp tüm işlemleri kullanıcı(Client)
tarafında yani bilgisayarımızda kullandığımız browserlar üzerinde yaptırmak istemektedir. Bunu sağlayan yapı
javascript olduğu için hem daha hızlı hem de daha kolay javascript yazabilmek için farklı frameworkler vardır.
AngularJS ise MVC altyapısı ile hazırlanmış ve günümüzde popülaritesi gittikçe artan ve kuvvetli bir javascript
frameworküdür. Temel yapısı module, directive, controller, service ve filterlardan oluşmaktadır.
JQuery ile karşılaştırmak gerekir ise ikisinin de temelde çalışma yapısı javascript üzerinedir. JQuery bugüne kadar
daha çok sayfa üzerindeki html elementlere ulaşma ve bilgilerini style bilgilerini düzenlemeyi ve aynı zamanda
JSON gibi veriyi nesneye dayalı bir şekilde yapıları taşımaya yarayan özellikleri kullanmamızı sağlar.
AngularJS JQuery ile aynı özelliklere ve daha fazlasına sahip olmasına rağmen hem JQuery den daha
performanslı hem de kolay yazılabilir olması avantajları arasındadır.
$scope controller içerisinde oluşturulan dinamik değişkenler ile view(sayfa)’a değerleri gönderir.
[ANGULAR
JS]
Dependency Injection
Extension to HTML
AJAX/JSONP
Form Validation
AngularJS Expression
AngularJS sayfalarda verileri göstermek için ‘two a way binding’ yapısını yani ‘iki yönlü bağlamayı’ kullanır. Bu
kullanım verileri daha hızlı işlemeye yarar ve veri ile model arasında ki köprü kopana dek veri iletimi sürekli
sağlanır.
AngularJs Expression ise “{{ }}” süslü parantezlerdir. Verileri temsil eden modelleri ya da verini kendini yazarak
DOM üzerine veriyi ekleriz.
[Link] [Link]
<div>
10
<label>Değer</label>
<div>
<label>{{5+5}}</label>
</div>
</div>
[Link] İ[Link]
Modüller; controller, değişkenler, servisler, direktifler vb. yapıları içinde barındıran ve yöneten ana kod kısımlarıdır.
Bağımlılıkları (Dependency) tanımlar ve yönetir, tekrar tekrar kullanılır. Tanımlanırken dikkat edilmesi gereken bir
husus ise isim verirken ilk harf küçük sonraki kelimelerin ilk harfleri büyük yani lowerCamelCase olacaktır
[Link]
<script>
var
app=[Link](‘modulAdi’,[]);
[Link](YapilandirmaAyarlari);
[Link](CalismaKodlari);
</script>
AngularJS module Single Page Applicationlar için önemlidir. Tek sayfada uygulama yapabilmek için projenizi bir
merkezden yönetmeniz gerekir ve module tam olarak bu işi yapar. Oluşturulan module içerisinde barındırdığı diğer
modüleri kontrol edebilir ve onların çalışmasını sağlayabilir.
[ANGULAR
JS]
AngularJS Controller
Controllerlar AngularJS içerisinde önemli bir yere sahiptir.
Controllerlar için view ile bağlantı kurar diyebiliriz fakat bu tanım
sade ve biraz basit olacaktır.
Tanımda söylediğim gibi sayfa ile veri arasındaki bağlantıyı kurar fakat burada [Link] MVC den ayrılan özelliği
MVC Controllerlar tek başına çalışabilirken, AngularJS Contollerlar bir module ile ayağa kalkar ve module
üzerinden çalışır. Anlamak için bir yapıya benzetilecek ise [Link] MVC de controller içerisinde kullanılan Actionlar
daha anlamlı bir örnek olacaktır.
İsimlendirirken dikkat etmemiz gereken durum ise isimde geçen tüm kelimelerin ilk harfi büyük olacaktır.
[Link]
<script>
var
app=[Link](‘modulAdi’,[]);
[Link](‘Selamla’,SelamVer);
SelamVer.$inject=[‘$scope’]
function
SelamVer($scope)
{
$[Link]=’Hello
World’
}
</script>
[ANGULAR
JS]
[Link] [Link]
Controllerlarda inject yöntemi ile bağımlılık vermenin dışında daha temiz bir kod yazımı için VM mantığını
kullanabilirsiniz.
Vm olarak tanımlanan değişkene controllerın kendisi yani this değeri verilerek gerçekleştirilen işlemde $scope
bağımlılığı ortadan kalkarken html içerisinde controller’ı tanımlanan değişkene cast etmemiz gerekmektedir.
[Link]
<script>
var
app=[Link](‘modulAdi’,[]);
[Link](‘Selamla’,SelamVer);
function
SelamVer($scope)
{
var
vm
=this;
[Link]=’Hello
World’
return
vm;
}
</script>
[Link] [Link]
AngularJS Directives
Direktif HTML'ye yeni tagler öğretmenin bir yoludur. Html static yapıda bir işaretleme dilidir, içerisinde tagler ile
yapılar oluşturulur ve bu taglerin iç özelliklerine de attribute denir. AngularJS directive ise ng ile kullanılan birçok
özellik ve custom directive olmak üzere 2 ye ayrılır.
1. Ng-Directive : AngularJs framework yapısında hazırlanan ve html tagleri içerisinde kullanılan arka planda
tanımlanan işleri çalıştırmak için hazırlanan hazır directivelerdir.
2. Custom Directiveler: AngularJs framework’ünü kullanarak biz geliştiriciler tarafından hazırlanan ve tag,
attribute, class ya da comment olarak kullanılan directivelerdir.
[ANGULAR
JS]
NG- Directive
Ng-app AngularJS framework’ün başlaması için gerekli olan attributedur. AngularJs sayfa render aşamasında ng-
app i arar ve ng-app i gördüğü yerde çalışmaya başlar bu işlem sayfanın farklı kısımlarında uygulanabilir.
§ Html tag: Html tag içerisinde uygulanan ng-app sayfanın tamamında geçerli olma anlamını taşır.
§ Body tag: Sadece body bloğunda çalışmasını istediğimiz durumlarda yazarız.
§ Custom: Bu kısımda sayfamızda element bazlı çalıştıracağımız AngularJS yapısını gerçekleştiririz genelde
farklı modülleri tek sayfada kullanmak için bu yönteme başvurulur.
ng-app="module_Adı" kullanımı ise tüm framework değilde tanımlı olan bir module uzerinden AngularJS framework
u çalıştırılacak anlamına gelir.
ng directiveleri içerisinde sıklıkla kullanılanlara göz atmak gerekirse;
• ng-model: Giriş alanının değerini uygulama değişken adıyla ilişkilendirir.
• ng-bind: Html taglerinin innerHtml özelliklerine ng-model uzerindeki değeri yazar.
• ng-init: Eğer projemizde controllerlardan bir veri almayacaksak ama değer tanımlaması yapılmış bir
değişken, dizi ya da nesneye ihtiyacımız var ise ng-init değişken ve değer tanımlaması yapmamız için bize
yardımcı olur.
• ng-show: Verilen HTML öğesini ngShow özniteliğine verilen ifadeye dayanarak gösterir veya gizler.(true-
false)
• ng-hide: Verilen ifadeye dayanarak verilen HTML öğesini gösterir veya gizler.(true-false)
• ng-swicth: Şartlı olarak bir kapsam ifadesine dayalı olarak şablonunuzda DOM yapısını değiştirmek için
kullanılır. Bir anlamda c# da ki switch-case yapısı diyebiliriz.
• ng-if: {expression} temelli DOM ağacının bir bölümünü kaldırır veya yeniden oluşturur. Ng-If'e atanan
expression yanlış bir değer olarak değerlendirilirse öğe DOM'dan kaldırılır, aksi takdirde öğenin bir klonu
DOM'a yeniden yerleştirilir.
• ng-class: Static halde tanımlanan classlar yerine dinamik şekilde ng-model üzerinden hazırlayabileceğimiz
classlar sunarlar.
• ng-checked: içindeki ifade mantıksal ise, işaretli özniteliği eleman üzerinde ayarlar. Bir nevi birden fazla
seçimli listede hepsini seç ya da tüm seçimleri kaldır olarak adlandırılabilir.
• ng-value: Verilen ifadeyi öğenin değerine bağlar.
Dikkat: Daha detaylı bilgi ve daha fazla directive için [Link] adresine bakabilirsiniz.
ng-model örnek:
[Link]
Yukarıdaki ng-model örneğimizde sayfamıza ek açıklama girme istediğine göre açılıp kapanan bir text alanı ekledik
bu alanın ek açıklama girmek isteyen kullanıcılar tarafından açılması halinde istedikleri açıklamayı girebilecekleri
bir text alanı karşılarına gelecektir.
Bu işlemi gerçekleştirmek için AngularJS ng- direktiflerinden ng-model ve n-show kullandık. Ng-model kullanıldığı
input’un bize vermiş olduğu değeri karşılar. Aynı zaman da ng-model e verilen değişken üzerine değer alabilen ve
ng-model ile verildiği input üzerinde değeri değiştirebilen bir direktiftir.
[ANGULAR
JS]
ng-bind örnek:
[Link]
<p>
<input
type="text"
ng-‐model="sayi"
/>
<label
ng-‐bind=”sayi”></label>
</p>
ng-init örnek:
[Link]
<div
ng-‐init=”sayi=5”>
<p>
Atanan
Değer:<label
ng-‐bind=”sayi”></label>
</p>
</div>
Custom Directive
Html içerisinde sürekli kullandığımız blokları directive olarak oluşturarak hem bunları tekrar yazmaktan hem de aynı
işlemleri farklı controllerlar içerisinde oluşturmaktan kurtuluruz.
Çünkü sayfada kullandığımız her bir blok değerleri controllerlardan çekmelidir. Tekrarlanan alanlarda directiveler
kurtarıcı olarak karşımıza çıkar. Oluştururken directive’in nasıl hizmet vereceğini belirleriz. Bunlar 4 çeşittir;
1. Element à E
2. Attribute à A
3. Class à C
4. Comment à M
Directive’i oluştururken restiric özelliğine bu 4 kısaltmadan kullanmak istediğimizi yazarak oluşturduğumuz hazır
html bloğu ister element ister attribute(öz nitelik), ister class ya da yorum satırı olarak kullanabiliriz.
[Link]
<script>
var
myapp
=
[Link]("myApp",
[]);
[Link]("bilgeadamelement",DirectiveOlustur
)
function
DirectiveOlustur()
{
return
{
restrict:
'E',
template:'<h4>
Bilge
Adam
AngularJS</h4>'
}
})
</script>
Yukarıdaki örneğimizde gördüğünüz gibi element kullanımı olan custom directive oluşturuldu ve sayfa üzerinde
nasıl çağırıldığı gösterildi.
Direktif oluştururken önce module oluşturmak gerekir. AngularJS de yapı module üzerinden ayağa kalkar. Eğer
direktif içerisinde bağımlılık isteyen bir yapı kullanılacak ise bu modülde mutlaka belirtilmelidir. Sonrasında module
üzerinden directive ayağa kaldırılır. Directive oluştururken isim vermek önemlidir kullanırken de önemlidir. Bunun
sebebi oluştururken verilen isim CamelCase, kullanılırken verilen isim lowercase olmalıdır.
İsimlendirme yaptıktan sonra function ismi belirlenir ve function oluşturularak directive hazır hale getirilir.
Directiveler bize template sunduğu için return snytaxı içinde yazılır.
Template : Directivin oluşturacağı görseli belirler ki burada templatei oluşturmak biz yazılımcılara bağlıdır.
Attribute kullanımı :
[Link]
</script>
Class Kullanımı :
[Link]
TemplateUrl Kullanımı:
[Link]
<
<div
class="col-‐lg-‐4">
<div
bilgeadamurltemplate></div>
</div>
</div>
<script>
[Link]("bilgeadamurltemplate",
function
()
{
return
{
templateUrl:
'myDirective'
}
})
</script>
[ANGULAR
JS]
[Link]
TemplateUrl kullanımı ise directive içerisinde ki template urli verilen sayfadan gelmektedir. Burada önemli olan
template adresini(url) doğru vermektir.
Aklımıza şöyle bir soru gelebilir sayfanın html yapısı mı? Yoksa html içeriği mi? Bu sorunun cevabı sadece render
işlemidir. Yani tarayıcıda ne görüyor isek o bize template olarak gelecektir.
[Link]
</div>
</div>
<script>
var
myapp
=
[Link]("myApplication",
[])
[Link]("KategoriController",
function
($scope)
{
$[Link]
=
jsondeger;
})
var
jsondeger
=
[{
ProductID:
1,
ProductName:
"Coca
Cola",
Price:
2.5
},
{
ProductID:
2,
ProductName:
"Iphone
7",
Price:
5000
},
{
ProductID:
3,
ProductName:
"Samsung",
Price:
4500
}]
</script>
Yukarıdaki kod bloğunda currency filter uygulanan fiyat kolonu 2.500 rakamının başına $ işaretini getimiştir.
İnput içerisinde tanımlanan model ise tr bloğunda filter değeri olarak kullanıldığında dinamik bir search işlemine
sahip oluruz ve aranan kelimelere uygun değerler gösterilirken diğer değerler saklanır. Arama alanı temizlendiğinde
tüm değerler tekrar gösterilir.
[ANGULAR
JS]
AngularJS Animation
AngularJS ile JQuery de olduğu gibi animasyonlar yapmak mümkün. Biraz farklı bir yol izleminiz gerekse de
animasyonları oluşturmak ve kullanmak, hızlı ve kolay bir iş.
1. Css kodlama
2. Ng-Directiveleri
Aşağıda gördüğünüz örneğimizde oluşturulan listemizde search işlemi yaptığımızda listeden kaldırılan veriler css
dosyasında tanımlanan özelliklere göre hareket etmektedir. Alışılanın aksine bu css değerlerini class ile değil
ng-animate ile izliyoruz.
Ng-animate tanımlanan css fonksiyonlarını dinler ve içerisinde bulunduğu blokta bu fonksiyonları gerçekleştiren
yapılar var ise harekete geçer ve kodları çalıştırır. Class attribute ise dinleme yapmadan render aşamasında
tanımlanan css işlemlerini gerçekleştirir. Bu özelliği ile AngularJs sadece sayfalarda verileri dinamik olarak kontrol
etmiyor neredeyse erişimi olan her alanda dinamik dinleme ve izleme yaparak olayları daha az kod bloğu ile daha
hızlı gerçekleştirmektedir.
[Link]
<body
ng-‐app=""
ng-‐init="names=['Igor
Minar',
'Brad
Green',
'Dave
Geddes',
'Naomi
Black',
'Greg
Weber',
'Dean
Sofer',
'Wes
Alvaro',
'John
Scott',
'Daniel
Nadasi'];">
<div
class="well"
style="margin-‐top:
30px;
width:
200px;
overflow:
hidden;">
<form
class="form-‐search">
<div
class="input-‐append">
<input
type="text"
ng-‐model="search"
class="search-‐query"
style="width:
80px">
<button
type="submit"
class="btn">Search</button>
</div>
<ul
class="nav
nav-‐pills
nav-‐stacked">
<li
ng-‐animate="'deger'"
ng-‐repeat="name
in
names
|
filter:search">
<a
href="#">
{{name}}
</a>
</li>
</ul>
</form>
</div>
</body>
[Link]
.deger-‐enter,
.deger-‐leave
{
-‐webkit-‐transition:
800ms
cubic-‐bezier(0.250,
0.250,
0.750,
0.750)
all;
-‐moz-‐transition:
800ms
cubic-‐bezier(0.250,
0.250,
0.750,
0.750)
all;
-‐ms-‐transition:
800ms
cubic-‐bezier(0.250,
0.250,
0.750,
0.750)
all;
[ANGULAR
JS]
Ng-directiveleri ile yapılan animasyonlarda ise kilit unsur model ilişkisidir. Bir checkbox yardımı ile sayfada bulunan
divi aç-kapa yapmak istediğimiz zaman ki bunu JQuery de yapmak isteseydik eğer önce checkbox kontrolünü
yakalayıp sonra onun değerine göre div etiketini yakalatıp show özelliğini hide ya da tam tersi bir işlem yapacaktık.
AngularJS ise ‘two a way binding’i sadece model-bind ilişkisini için değil üzerine değer alabilen tüm directiveler için
geçerli kıldığından checkbox’ın geriye döndüğü değeri yani true ya da false’u yakaladığımızda ve bunu aç-kapa
yapmak istediğimiz bir tag’in ng-show veya ng-hide özelliğine tanımlamamız yeterlidir. Bir model eklemek bu işi
çözmek için yeterlidir.
[Link]
<head>
<title></title>
<script
src="Scripts/[Link]"></script>
<style>
.content-‐area
{
border:
1px
solid
black;
margin-‐top:
10px;
padding:
10px;
}
.sample-‐show-‐hide
{
transition:
all
linear
0.5s;
[ANGULAR
JS]
}
.sample-‐show-‐[Link]-‐hide
{
opacity:
0;
}
</style>
</head>
<body
ng-‐app="">
<div
ng-‐init="checked
=
true">
<label>
<input
type="checkbox"
ng-‐model="checked"
/>
Is
visible
</label>
<div
class="content-‐area
sample-‐show-‐hide"
ng-‐show="checked">
Content...
</div>
</div>
</body>
AngularJS Service
1. Factory servisler
2. Services servisler
[ANGULAR
JS]
Factory servisler: Projemize dışarıdan veri almak istediğimizde kullanmamız önerilen servislerdir. Temelde verinin
nereden geldiği önemli değildir. Başka bir proje ya da bir servis veri kaynağı olabilir. Önemli olan verinin geldiği tip
burada Json kullanmak önemlidir.
Services servisler: Projemizde bulunan diğer controllerlar aracılığı ile veri çekmek için kullanılan yapılardır.
İki servis yapısı da içinde $http directive’ini kullanır. $http servislerin istenilen URL yada data kaynağına gitmesini
sağlayan framework directivedir.
$http ile istek yapılan adres den gelen cevaplar izlenir bu durumlar işlem tamamlanması ya da hata çıkması gibi
cevaplardır. İstek yapmak için $[Link](adres) metodu kullanılır. Eğer işlemimiz hatasız bir şekilde çalıştıysa
$[Link](adres).then(cevap) ile cevap karşılanır ve ya $[Link](adres).then(cevap).error(hata) ile hata dinlenebilir.
Her iki yöntem de Ajax işlemleriniz için kullanılabilir yalnız geliştiriciler web api gibi restfull çalışan servisler de
Factory servisleri önermektedir.
[Link]
<script>
[Link]('KategoriyeGoreMakale',
function
($scope,
kategoriyegoregetir)
{
[Link](function
(x)
{
$[Link]
=
x;
})
})
[Link]('kategoriyegoregetir',
function
($http,
$routeParams)
{
return
{
list:
function
(x)
{
$[Link]("/Home/CategoryArticles/"
+
$[Link]).success(x);
}
[ANGULAR
JS]
};
});
</script>
AngularJS Route
AngularJS Route uygulamamızda ki viewler ile kullanıcının gitmek istediği sayfalar arasında ilişki kurarak istenilen
sayfaların yönlendirilmesini gerçekleştirir. Bunu yaparken işlem Asynchronous(Asenkron) gerçekleşir.
Angular Route AngularJS içinde gömülü halde bulunmadığı için mutlaka inject (yerleştirmek) edilmelidir bu işlem
aşağıdaki gibi yapılmaktadır.
İ[Link]
<script>
var
app
=
[Link]('myApp',
['ngRoute']);
</script>
Yukarıda gördüğümüz işlem AngularJs de Dependency Injection dediğimiz yöntemdir. Module Route yapısını
kullanabilmek için ngRoute u injecte etmektedir.
Bu işlem tamamlandıktan sonra angularjs module yapısının içinde route ayarları tanımlanır. Bu işlem module yapısı
içinde Config bloğunda gerçekleşir.
$routeProvider yönlendirmeleri yapdığımız provider yapısıdır. $locationProvider ise sayfalara nasıl
yönlendirileceğimizi belirler ve kısaca örneklemek gerekirse angularda route yönlendirmesinde urlde # işareti
görünür bu işareti kaldırmak istersek $locationProviderı kullanırız.
Bu iki providerı önce inject etmemiz gerekmektedir bu işlem aşağıdaki gibi olur.
[ANGULAR
JS]
[Link]
<script>
var
app
=
[Link]('myApp',
['ngRoute']);
[Link](RouteOlustur);
RouteOlustur.$inject
=
["$routeProvider",
"$locationProvider"];
</script>
Artık sıra yönlendirme işlemlerini gerçekleştirmeye geldi bu işlemler RouteOlustur functionı içinde gerçekleştirilir.
[Link]
<script>
var
app
=
[Link]('myApp',
['ngRoute']);
[Link](RouteOlustur);
RouteOlustur.$inject
=
["$routeProvider",
"$locationProvider"];
function
RouteOlustur($routeProvider,$locationProvider)
{
$routeProvider
.when("/",
{
templateUrl:
"[Link]",
controller:
"IntroController"
})
.when("/about",
{
templateUrl:
"[Link]",
controller:
"AboutController"
})
.otherwise({
redirectTo:
"/"
})
$locationProvider.html5Mode({
enabled:
true,
requireBase:
false
});
}
</script>
Yukarıda bulunan örnekte RouteOlustur functionı içinde $routeProvider ın when metodu ile yönlendirme ayarları
yapılır.
When metodunun ilk parametresi yapılan isteğin urlini temsil eder. İkinci parametresi ise urlin nereye
yönlendirileceğini ve sayfanın gerekliliklerini belirlediğimiz alandır.
templateUrl: Yönlendirme yapılacak olan sayfa yolu.
Controller: Yönlendirme yapılan sayfada tanımlı bulunan controllerın yönlendirme işleminde çalışması için kullanılır.
Eğer kullanıcı sayfada yanlış bir yönlendirme yaptıysa bu sefer de otherwise seçeneğine yönlendirilir ve bu
aşamada genelde yol olarak başlangıç sayfamız verilir.
$locationProvider.html5Mode metodu parametre olarak true değerini aldığında yönlendirme yapılan urlde #
işaretinin olmamasını sağlar ve yönlendirme daha başarılı gerçekleştirilir.
[ANGULAR
JS]
AngularJS CRUD
AngularJS de Create Read Update Delete işlemlerini gerçekleştirirken $http servisini kullanırız. Bu servis üzerinden
kullanılan komutlar ile ekleme silme güncelleme ve listeleme işlemleri gerçekleştirilir.
Bu komutlar ekleme işlemleri için post, update işlemleri için put, silme işlemleri için delete ve listeleme işlemleri için
get olarak adlandırabiliriz.
Post a bir parantez açmak gerekirse ;
Post aslında post requestden gelir ve amacı elde edilen verinin başka bir yöne doğru yönlendirilmesidir. İnsert
işleminde ise bize daha önce gelen sayfa üzerinde bilgileri doldurarak veriyi tekrar server a gönderdiğimiz için bu
işlemi ekleme mekanizması içinde kullanırız.
Şimdi kısa örneklerle nasıl kullanıldıkları hakkında örnekler yapalım. Örneğimize geçmeden önce AngularJs server
side bir dil olmadığı için veri tabanı kullanımı Rest servisler ile karşılarız. Bu örneklerimizde kullandığımız servis
Northwind veri tabanında bulunan Categories tablosunun crud işlemlerini içeren bir servistir.
[Link]
[Link]
<script>
var
app=
[Link]('myapp',
[]);
[Link]("KategoriGonderFactory",
KategoriGonder);
KategoriGonder.$inject
=
['$http'];
function
KategoriGonder
($http)
{
var
Post
=
{};
Post
=
$[Link]("[Link]
category);
return
Post;
}
[ANGULAR
JS]
[Link]('InsertController',
InsertController);
InsertController.$inject
=
['$http',
'KategoriGetirFactory'];
function
InsertController($http,
KategoriGetirFactory)
{
var
vm
=
this;
[Link]
=
{};
[Link]
=
function
(category)
{
[Link](Success);
};
function
Success(response)
{
alert("Ekleme
İşlemi
Gerçekleştirilmiştir!");
}
[Link]
=
function
()
{
[Link]
=
{};
};
return
vm;
}
</script>
Güncelleme işlemi ise put ile kullanır ve ama bu işlemde önce bir kategori seçilmelidir. Bu işlem için [Link]
kullanılacaktır.
Aşağıdaki örnekte hem get hem de put işlemi birlikte yapılacaktır.
[Link]
<body>
<div
ng-‐controller="InsertController
as
vm">
<div
>
<div
class="col-‐md-‐6">
<table
class="table
table-‐hover">
<thead>
<tr>
<th>
CategoryID
</th>
<th>
CategoryName
</th>
<th>
Description
</th>
<th>
Duzenle
</th>
</tr>
</thead>
<tbody>
<tr
ng-‐repeat="category
in
[Link]">
<td>
{{[Link]}}
</td>
<td>
{{[Link]}}
[ANGULAR
JS]
</td>
<td>
{{[Link]}}
</td>
<td>
<input
type="button"
value="Guncelle"
class="btn
btn-‐success"
ng-‐
click="[Link]([Link])"
/>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div>
<form
novalidate
class="simple-‐form">
<input
type="hidden"
name="name"
ng-‐model="[Link]"
/>
<label>CategoryName:
<input
type="text"
ng-‐model="[Link]"
/></label><br
/>
<label>Description:
<input
type="text"
ng-‐model="[Link]"
/></label><br
/>
<br
/>
<input
type="button"
ng-‐click="[Link]()"
value="Temizle"
class="btn
btn-‐
warning"
/>
<input
type="button"
ng-‐click="[Link]([Link])"
value="Güncelle"
class="btn
btn-‐success"
/>
</form>
</div>
</div>
</body>
Güncelleme işlemlerinde önce güncellenecek olan kategori seçilir ve inputlara değerler atanır. Burada dikkat
edilmesi gereken durum bir kategoriyi güncellemek için onun kim olduğunu veri tabanına söyleyebilmek adına
hidden bilgi içinde ID değeri saklanır ve ng-model kullanılan inputlar üzerinde ki bilgiler servis aracılığı ile veri
tabanına iletilir.
Bu işlemler aşağıda bulunan kod blokları ile gerçekleş[Link]ın önce güncellemek istenen değer veri
tabanından alınır sonra üzerinde tekrar değişiklik yapılarak veri tabanına gönderilir.
[Link]
<script>
var
app=
[Link]('myapp',
[]);
[Link]("KategoriGetirFactory",
KategoriGetir);
KategoriGetir.$inject
=
['$http'];
function
KategoriGetir
($http)
{
var
Get
=
{};
Get
=$[Link]("[Link]
return
Get;
}
[Link]('InsertController',
InsertController);
[ANGULAR
JS]
InsertController.$inject
=
['$http',
'KategoriGetirFactory'];
function
InsertController($http,
KategoriGetirFactory)
{
var
vm
=
this;
[Link]
=
{};
[Link]
=
{};
[Link](
function
(response)
{
[Link]
=
[Link];
});
[Link]
=
function
()
{
[Link]
=
{};
};
[Link]();
[Link]
=
function
(category)
{
$[Link]("[Link]
category).then(SuccessUpdate);
function
SuccessUpdate(response)
{
[Link]
=
[Link];
alert("Update
İşlemi
Gerçekleştirilmiştir!");
}
}
[Link]
=
function
(CategoryID)
{
$[Link]("[Link]
+
CategoryID).then(SuccessGetId);
function
SuccessGetId(response)
{
[Link]
=
[Link];
}
}
return
vm;
}
</script>
Yukarıdaki örneğimizde tabloda Güncelle butonuna basıldığında güncellemek istenilen değer script içerisinde ki
[Link] functionı ile veritabanından alınarak inputlara gönderilir. Sonrasında ise değiştirilen değerler form içinde
bulunan güncelle butonu ile script kodları içerisinde ki update functionına [Link] önemli olan değeri nesne
halinde göndermektir. Bunun nedeni api bizden class yani nesne beklemektedir. Değerler nasıl birbirleri ile
haberleşiyor diye merak ediyorsanız burada devreye JSON [Link] olarak gönderdiğimiz değer serialize
edilerek class a dönüşür ve bizde c# içerisinde istediğimiz yerde kullanabiliriz.
Son olarak delete işlemini kullanırsak burada yine aynı işlemler gerçekleşir ve bu işlemlerde delete functionına
değeri temsil eden id göndermek [Link]ımı ise;
[ANGULAR
JS]
[Link]
<script>
var
app=
[Link]('myapp',
[]);
[Link]("KategoriGetirFactory",
KategoriGetir);
KategoriGetir.$inject
=
['$http'];
function
KategoriGetir
($http)
{
var
Get
=
{};
Get
=$[Link]("[Link]
return
Get;
}
[Link]('InsertController',
InsertController);
InsertController.$inject
=
['$http',
'KategoriGetirFactory'];
function
InsertController($http,
KategoriGetirFactory)
{
var
vm
=
this;
[Link]
=
{};
[Link]
=
{};
[Link](
function
(response)
{
[Link]
=
[Link];
});
[Link]
=
function
(CategoryID)
{
$[Link]("[Link]
+
CategoryID).then(SuccessDelete);
function
SuccessDelete(response)
{
[Link]
=
[Link];
alert("Silme
İşlemi
Gerçekleştirilmitir!")
}
};
return
vm;
}
</script>
AngularJS CRUD işlemleri için gerekli olan bir api yada herhangi bir Rest servistir. Eğer servis üzerinde bulunan
kodlar hatasız ise angularjs sadece adreslerini kullanarak ve doğru parametre vererek işlemlerini
gerçekleştirmektedir. Burada $http servisinin özelliklerini kullanmak önemlidir. Eğer biz $[Link]() yerine
$[Link]() kullanırsak evet değer gidecektir ama api bu değeri post işlemi olarak algılar ve silme işlemini yapmaz.
Sonuç olarak $[Link]() bizim yapmak istediğimiz işleri simgeler ve servis adreslerini buna göre yönlendirir.