A logo showing the text blog.marcnuri.com
English
Inicio»Front-end»AngularJS: Cómo compartir datos entre controladores (Controllers) empleando servicios (Services)

Entradas Recientes

  • Fabric8 Kubernetes Client 7.2.0 está disponible!
  • Conectarse a un servidor MCP con JavaScript y AI SDK
  • Conectarse a un servidor MCP con JavaScript y LangChain.js
  • El Futuro de las Herramientas para Desarrolladores en la era de la IA
  • Conectarse a un servidor Model Context Protocol (MCP) con Java y LangChain4j

Categorías

  • Antiguo
  • Front-end
  • Go
  • Herramientas
  • Industria y negocios
  • Inteligencia Artificial
  • Java
  • JavaScript
  • Operaciones
  • Personal
  • Proyectos personales

Archivos

  • mayo 2025
  • abril 2025
  • marzo 2025
  • febrero 2025
  • enero 2025
  • diciembre 2024
  • noviembre 2024
  • agosto 2024
  • junio 2024
  • mayo 2024
  • abril 2024
  • marzo 2024
  • febrero 2024
  • enero 2024
  • diciembre 2023
  • noviembre 2023
  • octubre 2023
  • septiembre 2023
  • agosto 2023
  • julio 2023
  • junio 2023
  • mayo 2023
  • abril 2023
  • marzo 2023
  • febrero 2023
  • enero 2023
  • diciembre 2022
  • noviembre 2022
  • octubre 2022
  • agosto 2022
  • julio 2022
  • mayo 2022
  • marzo 2022
  • febrero 2022
  • enero 2022
  • diciembre 2021
  • noviembre 2021
  • octubre 2021
  • septiembre 2021
  • agosto 2021
  • julio 2021
  • diciembre 2020
  • octubre 2020
  • agosto 2020
  • junio 2020
  • mayo 2020
  • marzo 2020
  • febrero 2020
  • enero 2020
  • noviembre 2019
  • octubre 2019
  • julio 2019
  • diciembre 2018
  • agosto 2018
  • julio 2018
  • junio 2018
  • mayo 2018
  • marzo 2018
  • febrero 2018
  • noviembre 2017
  • octubre 2017
  • agosto 2017
  • julio 2017
  • enero 2017
  • julio 2016
  • enero 2016
  • diciembre 2015
  • noviembre 2015
  • diciembre 2014
  • marzo 2014
  • febrero 2011
  • junio 2008
  • mayo 2008
  • abril 2008
  • enero 2008
  • junio 2007
  • mayo 2007
  • abril 2007
  • marzo 2007

AngularJS: Cómo compartir datos entre controladores (Controllers) empleando servicios (Services)

2016-01-04 en Front-end etiquetado Angular / AngularJS / Controlador / JavaScript / Servicio / Tutorial por Marc Nuri | Última actualización: 2021-03-04

AngularJS: servicios y controladores

Los servicios de AngularJS nos ofrecen una forma muy sencilla de compartir datos y funcionalidad entre controladores y otras partes de nuestra aplicación. El código completo de este tutorial se encuentra aquí https://jsfiddle.net/h6ut4djn/.

Vista HTML

Supongamos que partimos del siguiente código html, dónde hay dos controladores distintos, uno que permite editar los datos y variables y el otro que muestra los datos definitivos:

1<div ng-app="app">
2  <div ng-controller="controlador1">
3    <lable>Cambiar valor inicial:</lable> <input type="text" ng-model="servicio.datosCompartidos"/>
4    <form ng-submit="servicio.anadirElemento(nuevoElemento)">
5      <label>Añadir nuevo elemento (Intro):</label> <input type="text" ng-model="nuevoElemento"/>
6    </form>
7  </div>
8  <div ng-controller="controlador2">
9    <p>
10     {{servicio.datosCompartidos}}
11    </p>
12    <ul>
13      <li ng-repeat="elemento in servicio.listaCompartida track by $index">{{elemento}}</li>
14    </ul>
15    <button ng-click="servicio.limpiarLista()">Vacíar lista
16    </button>
17  </div>
18</div>

El primer controlador, "controlador1" se encarga de la edición de las distintas variables. Desde él, podemos cambiar el valor de una variable normal, pero también alterar una variable más compleja tipo array. En este caso, se ofrecen opciones para vaciar la lista por completo y para añadir nuevos elementos.

El segundo controlador, "controlador2" muestra los valores de las variables que pueden controlarse desde el otro controlador.

Javascript

Para conseguir lo expuesto anteriormente emplearemos el siguiente script:

1angular.module("app", [])
2.factory("servicio", function(){
3  var ret = function(){}
4  ret.datosCompartidos = "Valor inicial";
5  ret.listaCompartida =["Elemento 1"];
6  ret.anadirElemento = function(nuevoElemento){
7    ret.listaCompartida.push(nuevoElemento);
8  }
9  ret.limpiarLista = function(){
10    ret.listaCompartida = [];
11  }
12  return ret;
13})
14.controller("controlador1", function($scope, servicio){
15  $scope.servicio = servicio;
16})
17.controller("controlador2", function($scope, servicio){
18  $scope.servicio = servicio;
19});

Servicio

Lo primero que se muestra es la creación del servicio que alojará las distintas variables y las funciones de acceso a la lista.

Tenemos una variable normal "datosCompartidos" y una variable tipo array "listaCompartida". Ambas se inician con algunos datos para que la página los cargue en un primero momento.

Además se incluyen dos funciones. La primera "anadirElemento" permite añadir un nuevo elemento a la lista. La otra "limpiarLista" limpia la lista por completo.

Controladores

Lo siguiente que se muestra en el script es la creación de los controladores, dónde se vincula el servicio (que se inyecta en la función) a una variable dentro del $scope denominada "servicio".

De este modo, desde la vista podemos llamar a las funciones del servicio y mostrar los datos vinculados.

Importancia de vincular el servicio y no las variables dentro del servicio

Tal como se muestra en el ejemplo, cada controlador crea una variable dentro del $scope que vincula al servicio completo y no a las variables dentro de éste. Esto es muy importante.

El modo de trabajar de angular hace que si lo hiciésemos de otro modo, la variable creada dentro del $scope del controlador crearía una copia de la variable del servicio en lugar de vincularla. Por lo que los cambios dentro del servicio no se verían afectados en el controlador ni en su modelo.

Twitter iconFacebook iconLinkedIn iconPinterest iconEmail icon

Navegador de artículos
Docker: Accediendo al shell (SSH) de docker-machineSpring Data JPA + EclipseLink: Configurando Spring-Boot para usar EclipseLink como proveedor de JPA
© 2007 - 2025 Marc Nuri