Angular sharing and binding async data

A demo on sharing and updating async data.

HTML

<div ng-controller='gg'>
    {{user}}
</div>
<div ng-controller='aa'>
    <input ng-model='user.name' type="text">
</div>

JavaScript

var app = angular.module('app', [])
app.factory('usr', function($timeout, $q){
    defer = $q.defer();
    defer.resolve({name:'jon'});
    return {
        get: function(e){
            var self = this;
            console.log(self);
            defer.promise.then(function(data){
                self.cached = data;
            }); 
            return defer.promise;
        },
        cached: {}
    }
});
app.controller('gg', function(usr, $scope){
    usr.get().then(function(data){
        $scope.user = usr.cached;
            console.log(e);
    })
});
app.controller('aa', function(usr, $scope){
    usr.get().then(function(data){
        $scope.user = usr.cached;
            console.log(usr.cached);
    })
});
angular.bootstrap(document.body, ['app'])