Я пытаюсь сделать общую функцию внутри контроллера, который дает мне данные из бэкэнд и присваивает эти данные переменной.
Я сделал этот код, но он работает неправильно.
self.getData = function(url){
var deferred = $q.defer();
$http.get(url)
.success(function(data){
deferred.resolve(data);
console.log("Total profiles: " + data.data.length);
})
.error(function(error){
//do something
});
return deferred.promise;
};
$scope.data = self.getData(ServiceURL.url[7]);
console.log("Total profiles inside function: " + $scope.data.length);
Вызов функции работает нормально и дает общее количество профилей правильно, но когда я пытаюсь присвоить эти данные $ scope.data, это не работает нормально, потому что когда я пытаюсь показать общее количество профилей с помощью console.log(" Всего профилей: "+ $ cope.data.data.length) У меня следующий выход:
Всего профилей вне функции: $ scope.data: undefined
Кроме того, выполнение не синхронизируется, потому что сначала попробуйте показать значение $ scope.data, а затем значение из бэкэнд.
Как я могу синхронизировать этот вызов и правильно назначить выход функции переменной $ scope.data?
Есть ли способ сделать то, что я хочу, с помощью службы? Я пытаюсь это сделать, но переменная $ q всегда была неопределенной, и я не знаю, как правильно пройти. У вас есть пример, который отлично работает?
ОДИН ВАРИАНТ
заключается в том, чтобы назначить ваши $ scope.data в вашем обратном вызове из self.getData(). Как это:
$http.get(url)
.success(function(data){
deferred.resolve(data);
$scope.data = self.getData(ServiceURL.url[7]); //Here is it.
console.log("Total profiles: " + data.data.length);
});
Не можете ли вы просто задать $ scope.data внутри функции, а затем вызвать функцию типа.
function getProfiles(){
$http.get(url).success(response){
$scope.data = response;
}
getProfiles();