Извинения, если это очевидно, я немного угловой \ Javascript noob. У меня есть следующие услуги:Javascript Angular function scope confusion
MyApp.service('ClientService', function ($http, $q, SharedData) {
this.get = function() {
var deferred = $q.defer();
$http.get("/api/Client/")
.success(function(data, status) {
deferred.resolve(data);
})
.error(function(data, status) {
deferred.reject(data);
});
return deferred.promise;
};
this.setCurrentClient = function (clientToSelect) {
var deferred = $q.defer();
var getCurrentClient = this.get();
$http({ method: "POST", url: "/api/Client", data: clientToSelect })
.success(function (data, status) {
//Get the full selected client and all its properties rather than the list version
getCurrentClient.then(
function (client) {
setCurrentClient(client);
setCurrentPeriod(client);
},
function (data) {
//uho something broke.
});
deferred.resolve(data);
})
.error(function (data, status) {
deferred.reject(data);
});
return deferred.promise;
}
.....
});
В функции this.setCurrentClient я сделать вызов бэкэнда через $ HTTP и его асинхронного успешного возвращения я вызываю функцию получить с помощью переменной getCurrentClient. Сначала я пытался напрямую вызвать get() или this.get() и не работал. Контекст в функции callback .success представляется глобальным контекстом окна, а не контекстом службы. Вышеприведенное решение кажется мне немного грязным. Есть ли лучший способ получить контекст службы и вызвать get(), а не устанавливать переменную с помощью метода (get getCurrentClient = this.get()), а затем вызвать его (getCurrentClient.then())? Немного потерянный с javascript \ угловой областью и контекстами ...
Вы смотрели на службу $ ресурсов? Похоже, это то, что вы действительно после? – Patrick
Это чистый обзор JavaScript. Ничего не связано с углом зрения. Вам необходимо сохранить ссылку на область видимости и получить доступ к методам из сохраненной ссылки. 'var self = this; self.setCurrentClient(); 'Else вы должны использовать https://docs.angularjs.org/api/ng/function/angular.bind –
У меня нет проблемы с вызовом бэкэнд-сервиса через $ http. Я полагаю, что использование ресурса $ resource примерно одинаково, но для служб RestFul, которые мы действительно не используем. Обратные вызовы Async одинаковы. @VigneswaranMarimuthu Я думаю, что это было в основном тем, что я закончил тем, что сохранил метод get() внешних областей в переменной для вызова во внутренней функции. Я не понимаю, почему я должен это делать? Почему я не могу получить доступ к внешней области? – sarin