
Bu yazımda sizlere $http servisinin kullanımını göstermek istiyorum.
AngularJS’de amaç JSON olarak datayı almak ve DOM’da neler olacağını belirlemektir.
Örneğin jQuery’de get metodu nasıldı önce kullanımını bir hatırlayalım;
$.get('/request-url', function(response){
console.log(response);
}, 'json');
AngularJS’de de mantık aynı sonuçta. Ancak bunu controllerımın içinde $scope gibi $http parametresini aldıktan sonra yapacağım.
İlk olarak html yapımıza bir göz atalım;
<div ng-app="github">
<div ng-controller="getUserInfo">
<img src="{{ user.avatar_url }}" alt="" title="{{ user.name }}" /><br />
Ad: {{ user.name }}<br />
E-posta: {{ user.email }}<br />
Lokasyon: {{ user.location }}
</div>
</div>
Evet şimdi github adında modülümüzü oluşturalım. Sonra getUserInfoadında bir controller tanımlayıp $http servisi ile github’a bir get request yapalım. Gelen değeride user data modeline aktaralım.
var github = angular.module('github', []);
github.controller('getUserInfo', ['$scope', '$http', function($scope, $http){
$http.get('https://api.github.com/users/tayfunerbilen').then(function(response){
$scope.user = response.data;
});
}]);
Aslında böyle çok okunaklı değil. Örneğin hata aldığında 2. bir fonksiyonda bunu anlıyoruz ancak böyle iç içe yazmak sağlıklı olmuyor. Bunu daha okunaklı bir hale getirelim;
var github = angular.module('github', []);
github.controller('getUserInfo', ['$scope', '$http', function($scope, $http){
var onComplete = function(response){
$scope.user = response.data;
};
var onError = function(response){
$scope.error = 'Github kullanıcısı bulunamadı!';
};
$http.get('https://api.github.com/users/tayfunerbilen')
.then(onComplete, onError);
}]);
Şimdi ng-show ve ng-hide direktifleri ile html çıktımızı daha mantıklı hale getirelim.
Yani error var ise hatayı gösterip kullanıcı bilgilerini gizleyelim, tam tersi ise kullanıcı bilgilerini gösterip hatayı gizleyelim.
<div ng-app="github">
<div ng-controller="getUserInfo">
<div class="error" ng-show="error">
{{ error }}
</div>
<div ng-hide="error">
<img src="{{ user.avatar_url }}" alt="" title="{{ user.name }}" /><br />
Ad: {{ user.name }}<br />
E-posta: {{ user.email }}<br />
Lokasyon: {{ user.location }}
</div>
</div>
</div>