я пытаюсь создать приложение для подачи instagram с ионной каркасом, и я создал фабрику для обработки моих запросов html, поэтому я могу использовать их на своих контроллерах, то есть с помощью API instagram, это значение для json-массива, называемого next_url, которое мне нужно загрузите Старые фотографии/сообщения так: Это моя фабрика:
app.factory('PersonService', function($http){
var BASE_URL = "https://api.instagram.com/v1/tags/sometag/media/recent?access_token=+++";
var items = [];
var nextUrl = 0;
return {
GetFeed: function(){
return $http.get(BASE_URL+'&count=10').then(function(response){
items = response.data.data;
**nextUrl = response.data.pagination.next_url;**
return items;
});
},
GetNewPhotos: function(){
return $http.get(BASE_URL+'&count=2').then(function(response){
items = response.data.data;
return items;
});
},
GetOldPhotos: function(){
return $http.get(**nextUrl**).then(function(response){
items = response.data.data;
return items;
});
}
}
});
Я хочу использовать nextUrl = response.data.pagination.next_url; из функции GetFeed, чтобы получить next_url и использовать его в функции GetOldPhotos, которая будет использовать nextUrl для загрузки старых фотографий, я не думаю, что могу вернуть 2 значения из одной и той же функции, и я думаю, что $ scope не является опцией на фабрике.
Я знаю, что может быть более одного способа достичь этого, но я только начал с ионного, угловатого и javascript, и я действительно застрял здесь, и было бы здорово, если бы я мог получить некоторое "руководство": D Извините за любую грамматику, синтаксис или любая другая ошибка в этом посте и спасибо заранее!
Вы можете присвоить значение частным переменным на своем заводе, не возвращаясь.
var app = angular.module('test', []);
app.factory('PersonService', function($http) {
var BASE_URL = "https://api.instagram.com/v1/tags/sometag/media/recent?access_token=+++";
var items = [];
var nextUrl = 0;
return {
GetFeed: function() {
return $http.get1(BASE_URL + '&count=10').then(function(response) {
items = response.data.data;
nextUrl = response.data.pagination.next_url;
});
},
GetNewPhotos: function() {
return $http.get1(BASE_URL + '&count=2').then(function(response) {
items = response.data.data;
});
},
GetOldPhotos: function() {
return $http.get1(nextUrl).then(function(response) {
items = response.data.data;
});
}
}
});
app.controller('Test', function($scope, $http, $q, $timeout, PersonService) {
// DO NOT COPY
// adding function in $http for demo purpose only
$http.get1 = function(url) {
var d = $q.defer();
$scope.status = "requesting URL " + url + " (fake)...";
$timeout(function() {
d.resolve({
data: {
data: ["data 1", "data 2"],
pagination: {
next_url: "this is next url"
}
}
});
}, 1000);
return d.promise;
}
// END DO NOT COPY
$scope.person = PersonService;
});
<script src="/angular.min.js"></script>
<div ng-app='test' ng-controller='Test'>
<button type="button" ng-click="person.GetFeed()">GetFeed</button>
<button type="button" ng-click="person.GetNewPhotos()">GetNewPhotos</button>
<button type="button" ng-click="person.GetOldPhotos()">GetOldPhotos</button>
<br>{{status}}
</div>
Вы можете вернуть объект из GetFeed() с обоими значениями:
return {items: items,
nextUrl = response.data.pagination.next_url
};
Или массив:
return [items, response.data.pagination.next_url];
И затем передайте это обратно в GetOldPhotos в качестве параметра. Я бы позвонил вызывающему абоненту.
Вы говорите, что когда вы устанавливаете переменную nextUrl в GetFeed, она недоступна в функции getOldPhotos? Это меня удивляет. Он должен работать.