app.controller('Ctrl1', function($scope, DataFactory) { // bind the controller property to the service collection this.items = DataFactory.items; // watch the collection for changes $scope.$watch(watchSource, function(current, previous){ this.items = current; }); function watchSource(){ return DataFactory.items; } }); app.factory('DataFactory', function($q, $timeout) { var svc = {}; svc.items = []; svc.getDataStream = function() { var fakeData = [ { id: 1, name: 'name 1' }, { id: 2, name: 'name 2' }, { id: 4, name: 'name 4' } ]; // using $q to fake async data grab return $q.when(fakeData) .then(function(data) { svc.items = data; }); }; return svc; });