Я очень новичок в этой связи. Я использую версию Angular 1.5.X, и я использую фабрику для обмена данными между компонентами. Я столкнулся с одной проблемой, когда значение Async Service Variable обновляется через определенное время.Angularjs 1.5 - Компонентная связь с использованием сервиса - манипуляция переменной Async?
Я понимаю, что одним из решений является установка наблюдателя на переменную, не относящуюся к сфере видимости, но я думаю, что мне не хватает чего-то важного здесь. Можете ли вы, ребята, поделиться мнениями?
Это код Service.js
Service.$inject = ['$http','$q'];
function Service($http,$q) {
this.$http = $http;
this.$q = $q;
};
Service.prototype.getTileCount = 0;
Service.prototype.getTileData = function(Url){
var deferred = this.$q.defer();
this.$http.get(Url)
.success(function(response){
Service.prototype.getTileCount = response.data.length;
console.log('data length :', Service.prototype.getTileCount);
deferred.resolve(response);
});
return deferred.promise;
};
Это код компонента 1 Контроллер
function Component1Controller(Service) {
this.tileData ={};
var self = this;
var promise = Service.getTileData(this.sourceUrl);
promise.then(function(data) {
self.tileData = data;
Service.getTileCount = data.length;
console.log('This is tileData : '+ Service.getTileCount);
});
};
Это код компонента 2 Контроллер
function Component2Controller(Service) {
var self = this;
console.log(Service.getTileCount);
// getting getTileCount = 0; After setting timeout function of 5 second I am able to get getTileCount value
};
Спасибо за ваш вклад. Я пробовал тот же подход, но из обоих вызовов службы компонента я получаю this._tileData службы как null. поэтому я думаю, что мы не можем сохранить значение this._tileData, поэтому при следующем вызове мы снова получаем null. поэтому в основном мы нажимаем $ http service дважды, что не является хорошим решением. – Samir
Конечно, нет, точка моего решения заключается в том, что вы никогда не делаете больше одного запроса (данные кэширования служб), и независимо от того, из какого компонента вы запрашиваете 'getTileData', вы всегда будете получать данные предсказуемым образом. – dfsq
Я, однако, нашел ошибку в своем коде, ознакомьтесь с обновленной версией, которая была бы лучше для вашей ситуации. – dfsq