/ / AngularJS: Jak uzyskać dane http w różnych kontrolerach - angularjs, angularjs-scope, angularjs-service, angularjs-controller

AngularJS: Jak uzyskać dane http w różnych kontrolerach - angularjs, angularjs-scope, angularjs-service, angularjs-controller

kiedy przesyłam formularz, mam kontroler, którykomunikuje się z usługą, która pobiera dane z serwera i zwraca te dane do kontrolera. Tymczasem zmieniam widok za pomocą akcji formularza. Mój problem polega na tym, że potrzebuję danych odpowiedzi serwera w drugim widoku (który ma inny kontroler), ale są one niezdefiniowane. Jak mogę naprawić ten problem?

Ps. Przepraszam za mój angielski

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

Odpowiedzi:

0 dla odpowiedzi № 1

Użyć service za to.
Controllers shouldn "t trzymaj stan.
Dwa controllers może komunikować się za pośrednictwem service( service również będzie utrzymywał stan).

Dodaj zmienną firmy do magistrali service i dodaj rębacz więc inne controllers może pobrać dane z magistrali.

Przykład:

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.