Я создаю одностраничное веб-приложение AngularJS. Мое приложение должно иметь возможность запрашивать серверную службу, чтобы получить некоторую информацию о состоянии пользователя, и эта информация о состоянии должна быть доступна для различных частей одностраничного приложения. Я создал службу для управления этой функциональностью, но у меня возникли проблемы с подключением таким образом, который мне кажется разумным.
Изначально у меня было так настроено...
<service.js>
...
var url = 'www.my-backend.com';
this.val = [
{
name: 'undefined',
isValid: false
}
];
$http.get(url, {})
.success (function (data) {
this.val = data;
})
.error (function () {
this.val = [
{
name: 'error',
isValid: false
}
];
});
...
А потом в моем контроллере...
<controller.js>
...
$scope.val = service.val
...
Однако это не сработало (val.name
было «неопределенным»), предположительно потому, что service.val
был привязан к $scope контроллера до того, как запрос get
успел завершиться. Однако это, похоже, противоречит тому, что я прочитал здесь.
Следующее, что я сделал, это...
<service.js>
...
var url = 'www.my-backend.com';
this.valPromise = $http.get(url, {});
...
А потом в моем контроллере...
<controller.js>
...
$scope.val = [
{
name: 'undefined',
isValid: false
}
];
service.valPromise
.success (function (data) {
$scope.val = data;
})
.error (function () {
$scope.val = [
{
name: 'error',
isValid: false
}
];
});
...
Это сработало, но мне это не понравилось. Я чувствую, что эта логика принадлежит сервису.
Итак, следующее, что я сделал, это проработал различные предложения, которые я нашел здесь, хотя ни один из них, казалось, не имел желаемого эффекта. Я также видел это, но это кажется излишним и не совсем применимым к моей проблеме.
В идеале я действительно хотел бы выяснить, как заставить мою первую попытку работать (жестко привязать мою служебную переменную к моей области действия контроллера по ссылке), но если это не то, что действительно можно сделать в рамках Angular, я буду рад использовать какое-то watch
поведение. Может ли кто-нибудь определить, что я делаю неправильно или почему моя служебная переменная не подключается должным образом к моему контроллеру?
$http
обратных вызовахthis
это не служба. - person a better oliver   schedule 17.09.2014