// A little bit of data needed to get jsfiddle to fake an ajax request var fiddleResponse = 'json=' + encodeURIComponent(angular.toJson({ name: "Dave" })); var fiddleHeaders = { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }; var app = angular.module('app', []); app.factory('NameService', function($http, $q) { // Create a class that represents our name service. function NameService() { var self = this; // getName returns a promise which when fulfilled returns the name. self.getName = function() { // Use jsfiddles 'echo' to simulate an ajax request that // returns 'dave'. This is '/api/my/name' in the example code. return $http.post('/echo/json/', fiddleResponse, fiddleHeaders); }; } return new NameService(); }); app.controller('MainController', function ($scope, NameService) { // We have a name on the code, but it's initially empty... $scope.name = ""; // We have a function on the scope that can update the name. $scope.updateName = function() { NameService.getName() .success(function(result) { $scope.name = result.name; }) .error(function(response, status) { console.log("Failed to get the name, response is " + response + " and status is " + status); }); }; });
<div ng-app="app"> <div ng-controller="MainController"> <p><strong>Name:</strong> {{name}}</p> <a href ng-click="updateName()">Update Name</a> </div> </div>