Compartir una variable entre controladores en angular.js

Soy nuevo en angular y me pregunto cómo puedo compartir una variable entre controladores en angular. Estoy usando los siguientes guiones:

En Main.js:

function MainCntl($scope) { ---code } function SearchCtrl($scope, $http) { $scope.url = 'http://10.0.0.13:9000/processAdHoc'; $scope.errorM = "No results"; $scope.search = function() { $http.post($scope.url, { "data" : $scope.keywords}). success(function(data, status) { $scope.status = status; $scope.data = data; $scope.result = data; alert('yes'); }) . error(function(data, status) { $scope.data = data || "Request failed"; $scope.status = status; alert('no'); $scope.result = "failed"; }); }; } 

En Index.html

  ---code 
---code

{{result}}

Todo funciona bien con el ajax Estoy enviando datos y recibiendo una respuesta, mi pregunta es la siguiente:

En la función SearchCtrl tengo una variable llamada $ scope.result a la que luego se hace referencia en Index.html. Si inserto el código html que contiene esa variable en el controlador SearchCtrl funciona bien, pero si está en el controlador MainCtrl no funciona. ¿Cómo puedo compartir esta variable entre los controladores?

Gracias por delante

Use un servicio e inyéctelo a ambos controladores y remita sus variables de scope a la variable de servicios.

Ejemplo:

 angular.module("yourAppName", []).factory("myService", function(){ return {sharedObject: {data: null } } }); function MainCtrl($scope, myService) { $scope.myVar = myService.sharedObject; } function SearchCtrl($scope, $http, myService) { $scope.myVar = myService.sharedObject; } 

En tu plantilla haz:

 {{myVar.data}} 

Vea un ejemplo Usos Angulares v1.1.5

La razón por la que lo pones en un objeto interno es preservar tus referencias, si lo mantienes sin un “objeto compartido” y cambias ese objeto, tu enlace apuntará a la referencia anterior y no mostrará nada en la plantilla.