Angular Logo

Compartir data entre controladores AngularJS

Algo que sucede bastante mientras se esta usando AngularJS es querer que 2 controladores interactuen con la misma data, esto se puede hacer de varias maneras, o con un servicio o una factoría (La verdad es la misma forma de hacer digamos).

Ejemplo:

Digamos que tenemos un template con su app test con 2 controladores main y main2 y ambos estan pintando la variable service.message.

HTML

<div ng-app='test'>
    
    <div ng-controller='main'>
        
        {{ service.message }}
        
    </div>
    
    <div ng-controller='main2'>
        
        <p>{{ service.message }}</p>
        
        <input type="text" ng-model='service.message'/>
    </div>
    
</div>

JavaScript

    var app = angular.module('test',[])

    app.controller('main',function($scope,ServiceTest,serviceFactory){
        $scope.service = ServiceTest.data;
    })
    
    app.controller('main2',function($scope,ServiceTest,serviceFactory,){
        $scope.service = ServiceTest.data;
    })
    
    app.service('ServiceTest',function(){
        this.data = {
            message : "From service init"
        }
    })

    app.factory('serviceFactory',function(){
    
        return {
            message:"nice"
        } 
    });

Para ambas formas funcionara de la misma manera, una vez inyectemos el service o la factoría tendremos la referencia de la misma variable y si cambiamos el valor de dicha variable sera reflejado en ambos lugares por que es la misma referencia.

Referencia

Codigo completo