AngularJS, ağırlıklı olarak Google vasıtasıyla sürdürülen ve çeşitli geliştirici grupları ve şirketler tarafından desteklenen, Javascript tabanlı, açık kaynak kodlu bir web uygulaması geliştirme çatısıdır (framework). Sunumda AngularJS'nin de temel aldığı ModelViewController/ModelViewViewModel uygulama mimarileri ve prensipleri ile birlikte temel AngularJS bileşenleri üzerinde kısaca durulmakta ve tek sayfa web uygulamaları geliştirme üzerine örnekler verilmektedir.
2. MVC, MVVM, MVP ve MVW/MV* nedir?
● Model–View–Controller (MVC) kullanıcı arayüzleri geliştirmek için bir mimari kalıp.
● MVC UI geliştirmede yeni ufuklar açmıştır. Kendi sorumlulukları (single responsibility) üzerinden
yazılım yapıları oluşturma ve tanımlama yaklaşımlarının ilklerinden biridir.
3. Single Page Application nedir?
● Tüm uygulama dosyaları (HTML, JavaScript ve CSS) kullanıcı tarafına tek bir seferde yüklenir.
● Aslında bir tane uygulama dosyası vardır. Diğer html şablonları ve datalar, dinamik olarak,
gerektikçe bu ana dosyaya gömülür.
● Amaç daha akıcı bir kullanıcı deneyimi sunmaktır.
● Masaüstü uygulaması gibi hızlı çalışan web uygulamaları geliştirilebilir.
4. Neden adı AngularJS? Neden kullanılan namespace “ng”?
● Çünkü HTML’de açısal parantezler (“<” ve “>” kullanılır)
● “ng”nin telaffuzu “Angular”a benzer
5. AngularJS nedir?
● Bir JavaScript kütüphanesi değildir. Direk çağırıp kullanabileceğimiz metodlar sunmaz. (angular
global objesi ve sunduğu birkaç metot dışında)
● jQuery gibi bir DOM manipülasyon kütüphanesi (jQLite adında küçültülüp özelleştirilmiş bir jQuery
kütüphanesi kullansa da) değildir
● Web uygulamalarında daha çok HTML tarafına odaklanır
● MVC, MVVM, MVP ve MVW/MV* (Model View Whatever) mimari kalıplarına uyar
● Single Page Application (SPA) geliştirilir
● Bir Javascript Web Çatısıdır (Framework)
● AngularJS, web uygulamasının farklı bileşenlerini birbirine bağlarken ve kullanıcı arayüzleri
geliştiriyorken, deklaratif kodun imperatif koddan daha iyi olduğu felsefesi etrafında geliştirilmiştir
6. Neden AngularJS?
● Direktifler, yeni tag’ler, ifadeler, özellikler, HTML şablonları ile HTML’i geliştirir
● TDD’ye teşvik eder
● MVC/MVVM mimari tasarım kalıplarına teşvik eder
● Kod yeniden kullanılırlığı (reusability) sağlar
● Single Page Application geliştirmeye uygundur
● Bir çok yenilikçi ve kolaylaştırıcı özelliği vardır
7. Öne çıkan özellikleri
● Deklaratif HTML yaklaşımı
● Kolay uygulanabilen iki taraflı data-binding
● Yeniden kullanılabilir bileşenler
● Dependency injection
● Unit test ve End ro End Entegrasyon testi
yazmak kolaydır
● Gelişmiş yönlendirme (routing) desteği
● Şablon (templating) desteği
● Modules
● Servisler
● Filtreler
● Direktifler
● Form doğrulaması
● Çoklu dil desteği
8. HTML Derleyicisi
Geliştirici, browser’a yeni HTML söz dizimleri öğretebilir, herhangi bir HTML elemanına yeni davranışlar,
özellikler tanımlayabilir.
Derleyivi, DOM’u baştan sona tarayan bir AngularJS servisidir. Derleme iki fazda yapılır:
1. Derleme (compile): Tüm DOM taranır ve direktiflerin hepsi toparlanır.
2. Bağlama (link): Her direktif bir scope ile bağlanır.
10. Direktifler
Günümüzün HTML bileşenleridirler. HTML’i genişletirler.
Direktifler HTML’de:
1. HTML elemanı, <messages />
2. HTML elemanı özelliği <div draggable></div>,
3. class adı <div class=”list-class”></div>.
olarak tanımlanabilir.
15. Kısmi Görünümler
Sayfanız Single Page Application olduğu için buna ihtiyacınız olacaktır.
Yönlendirmeler (routing) ile bağladığınız her bir sayfanız için farklı HTML şablonları gösterebilirsiniz.
<body>
<div class=”container”>
<div ng-view></div>
</div>
</body>
16. Modüller
Uygulamanızın yapısını oluşturur.
Her modülü aşağıdaki gibi tanımlayabilirsiniz:
var angularJSModule = angular.module(‘MyModule, []);
Modüllerin içinde:
● controller’lar
● service’ler
● filter’lar
● directive’ler
tanımlayabilirsiniz
17. ng-app
Angular’a, uygulamanın bir parçasının bir modül tarafından yönetileceğini söylemek için ngApp kullanın:
app.js içinde:
var angularJSModule = angular.module(‘MyModule, []);
index.html içinde:
<body ng-app=”MyModule”>
<div class=”container”>
<div ng-view></div>
</div>
</body>
18. Test edilebilir ve yönetilebilir bir uygulama geliştirin.
Aşağıda gibi, modülünüze routing tanımlamaları yapabilmeniz için routeProvider’ı enjekte edin:
var angularJSModule = angular.module(‘MyModule, []);
angularJSModule.config(function ($routeProvider) {
});
ya da
angularJSModule.config([‘$routeProvider’, function ($routeProvider) {
}]);
Dependency Injection
19. Uygulamanıza yönlendirmeler tanımlamak için modülünüzü konfigüre edin.
angularJSModule.config([‘$routeProvider’, function ($routeProvider) {
$routeProvider.when(’/users’, {)
templateUrl: ’views/users.html’
controller: ’UsersCtrl’
});
$routeProvider.otherwise({
templateUrl: ’common/404.html’
});
}]);
Burada “http://localhost/#/users” sayfasını ziyaret ettiğiniz zaman view’deki ng-view direktifinin tanımlı
olduğu elemana “views/users.html” sayfası yerleştirilecektir.
Modüllerinizi konfigüre edin
20. View’leriniz için veri sağlayıcılardır.
angularJSModule.controller(‘UsersCtrl’, [‘$scope’, function ($scope) {
$scope.users = [{
id: 123,
name: ‘Okan’,
dateOfBirth: ...,
description: ...
}];
}]);
View’de:
<div ng-repeat=”user in users”>
<div><a href=”u#/user/{{ user.id }}”>{{ user.name }}</a></div>
<div>{{ user.description }}</div>
</div>
Controller’lar
21. View’lerinizin omurgasını oluşturur.
Bir controller ile scope’a veri veya fonksiyon tanımlayabilirsiniz ve view’den bunlara erişebilirsiniz.
Her direktifin kendi özel izole scope’u olabilir.
Scope
22. Uygulamanız için çeşitli araç metodlar tanımlayabilirsiniz.
angularJSModule.factory(‘UsersService’, [‘$scope’, function() {
return {
getAllUsers: {
return [{ id: 123, name: ‘Okan’,
dateOfBirth: ‘1981-01-01’, description: ‘Software Developer’ }];
}
};
}]);
Bu service’leri controller’larınıza veya diğer service’lere veya filter’lara enjekte edebilirsiniz.
angularJSModule.controller(‘UsersCtrl’, [‘$scope, UsersService’, function($scope, UsersService) {
$scope.users = UsersService.getAllUsers();
}]);
Service’ler