Compartilhando uma variável entre controladores em angular.js

Eu sou novo em angular e estou querendo saber como eu posso compartilhar uma variável entre os controladores em angular. Eu estou usando os seguintes scripts –

Em 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"; }); }; } 

Em Index.html

  ---code 
---code

{{result}}

Tudo funciona bem com o ajax que estou enviando dados e recebendo uma resposta, minha pergunta é a seguinte:

Na function SearchCtrl eu tenho uma variável chamada $ scope.result que é posteriormente referida em Index.html. Se eu inserir o código html que contém essa variável no controlador SearchCtrl, ele funcionará bem, mas se estiver no controlador MainCtrl, ele não funcionará. Como posso compartilhar essa variável entre os controladores.

Obrigado pela frente

Use um serviço e injete-o em ambos os controladores e encaminhe seus escopos de escopo para a variável de serviços.

Exemplo:

 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; } 

Em seu modelo, faça:

 {{myVar.data}} 

Veja um exemplo Usa Angular v1.1.5

O motivo pelo qual você o coloca em um object interno é preservar suas referências, se você mantê-lo sem um “sharedObject” e alterar esse object, sua binding apontará para a referência antiga e não mostrará nada no modelo.