/ / Powiązanie danych Angularjs między kontrolerem a usługą - angularjs

Angularjs powiązanie danych między kontrolerem a usługą - angularjs

Nie mogę uzyskać powiązania danych międzydziałanie kontrolera i serwisu. Mam kontroler i fabrykę, która wykonuje wywołanie HTTP. Chciałbym móc wywołać metodę fabryczną z innych usług i zobaczyć, jak atrybuty kontrolera są aktualizowane. Wypróbowałem różne opcje, ale żadna z nich nie działa. Wszelkie pomysły będą mile widziane.

Zobacz kod tutaj:

http://plnkr.co/edit/d3c16z?p=preview

Oto kod javascript.

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

app.controller("MainCtrl", function($scope) {
$scope.name = "World";
});

app.controller("EventDetailCtrl", ["$http", "EventDetailSvc", "$scope",
function ($http, EventDetailSvc, $scope) {

this.event = EventDetailSvc.event;

EventDetailSvc.getEvent();
console.log(self.event);

$scope.$watch(angular.bind(this, function () {
console.log("under watch");
console.log(this.event);
return this.event;

}), function (newVal, oldVal) {
console.log("under watch2");
console.log(newVal);
this.event = newVal;
});

}])

.factory("EventDetailSvc", ["$http", function ($http) {

var event = {};
var factory =  {};

factory.getEvent =  function() {
$http.get("http://ip.jsontest.com")
.then(function (response) {
this.event = response.data;
console.log("http successful");
console.log(this.event);
return this.event;

}, function (errResponse) {
console.error("error while retrieving event");
})
};

factory.event = event;

return factory;

}]);

Odpowiedzi:

0 dla odpowiedzi № 1

Wydaje mi się, że zdarzenie zostało zagnieżdżoneobiekt wewnątrz obiektu fabrycznego. Powinieneś zwrócić zdarzenie bezpośrednio, zamiast umieszczać je w pliku factory. W obecnym stanie, aby uzyskać dostęp do obiektu, musisz wywołać EventDetailSvc.factory.event.