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>