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 № 1Wydaje 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.