/ / AngularJS: Как да получите http данни в различни контролери - angularjs, angularjs-scope, angularjs-service, angularjs-controller

AngularJS: Как да получите http данни в различни контролери - angularjs, angularjs-scope, angularjs-service, angularjs-controller

когато подам формуляр имам администратор, чекомуникира със служба, която получава данни от сървър и връща тези данни на администратора. Междувременно променям изгледа с действието на формуляра. Проблемът ми е, че ще имам нужда от данни за отговор на сървъра във втория изглед (който има друг контролер), но те са неопределени. Как мога да отстраня този проблем?

Пс. Съжалявам за моя английски

// 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
})

Отговори:

0 за отговор № 1

Използвай service за това.
Controllers Не трябва "T задържане на състоянието.
две controllers могат да комуникират чрез a service(най- service ще държат и държавата).

Добавете фирмена променлива в автобуса service и добавете a разплодник така че други controllers може да извлече данните от Bus.

Пример:

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.