/ / AngularJS: Como obter dados http em diferentes controladores - angularjs, angularjs-scope, angularjs-service, angularjs-controller

AngularJS: Como obter dados http em diferentes controladores - angularjs, angularjs-scope, angularjs-service, angularjs-controller

quando eu enviar um formulário eu tenho um controlador quecomunica-se com um serviço, que obtém dados de um servidor e retorna esses dados ao controlador. Enquanto isso, mudo a visão com a ação do formulário. Meu problema é que eu precisaria dos dados de resposta do servidor na segunda exibição (que tem um outro controlador), mas estes são indefinidos. Como posso corrigir esse problema?

Ps. Me desculpe pelo meu Inglês

// code...
.state("app.search", {
url: "/search",
views: {
"menuContent" :{
templateUrl: "templates/search.html",
controller: "SearchCtrl"
}
}
})

.state("app.result", {
url: "/result",
views: {
"menuContent" :{
templateUrl: "templates/result.html",
controller: "ResultCtrl",
}
}
})
// code...

<form name="search_form" ng-submit="searchLines()" action="#/app/result" novalidate>
// code...
</form>

.factory("Bus", function($http){
return{
get: function(callback){
$http({
method: "POST",
url: "someUrl",
headers: {"Content-Type": "application/x-www-form-urlencoded"},
data: {someData from the form}
})
.success(function(data) {
callback(data);
})
.error(function(data, status, error) {
console.log(data, status, error);
});
}
}
});

.controller("SearchCtrl", function($scope, Bus){
$scope.searchLines = function(){
Bus.get(function(data){
$scope.company = data.company; // this is ok
});
};
})

.controller("ResultCtrl", function($scope, Bus){
// I"d like to have $scope.company here
})

Respostas:

0 para resposta № 1

Use um service por isso.
Controllers não deveria manter o estado.
Dois controllers pode se comunicar através de um service(a service vai manter o estado também).

Adicionar uma variável da empresa no barramento service e adicione um getter então outro controllers pode buscar os dados do Bus.

Exemplo:

HTML:

<div ng-app="app">
<div ng-controller="aCtrl">{{model.stateA}}</div>
<div ng-controller="bCtrl">{{model.stateB}}</div>
</div>

JS:

var app = angular.module("app", []);

app.service("myService", function ($q) {
var state = "12312";

this.getStateFromServer = function () {
return $q.when(state);
}

this.getRealState = function(){
return state;
};
});

app.controller("aCtrl", function ($scope, myService) {
myService.getStateFromServer().then(function (res) {
$scope.model = {
stateA: "A" + myService.getRealState()
};
});
});


app.controller("bCtrl", function ($scope, myService) {
$scope.model = {stateB: "B" + myService.getRealState()};
});

JSFIDDLE.