AngularJS: compartir datos entre controladores empleando servicios

http://blog.marcnuri.com/angularjs-compartir-datos-entre-controladores-empleando-servicios

HTML

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<div ng-app="app">
  <div ng-controller="controlador1">
    <lable>Cambiar valor inicial:</lable> <input type="text" ng-model="servicio.datosCompartidos"/>
    <form ng-submit="servicio.anadirElemento(nuevoElemento)">
      <label>Añadir nuevo elemento (Intro):</label> <input type="text" ng-model="nuevoElemento"/>
    </form>
  </div>
  <div ng-controller="controlador2">
    <p>
     {{servicio.datosCompartidos}}
    </p>
    <ul>
      <li ng-repeat="elemento in servicio.listaCompartida track by $index">{{elemento}}</li>
    </ul>
    <button ng-click="servicio.limpiarLista()">Vacíar lista
    </button>
  </div>
</div>

JavaScript

angular.module("app", [])
.factory("servicio", function(){
	var ret = function(){}
  ret.datosCompartidos = "Valor inicial";
  ret.listaCompartida =["Elemento 1"];
  ret.anadirElemento = function(nuevoElemento){
  	ret.listaCompartida.push(nuevoElemento);
  }
  ret.limpiarLista = function(){
  	ret.listaCompartida = [];
  }
  return ret;
})
.controller("controlador1", function($scope, servicio){
	$scope.servicio = servicio;
})
.controller("controlador2", function($scope, servicio){
	$scope.servicio = servicio;
});