我正在尝试使用 ionic 框架构建一个 instagram feed 应用程序,并且创建了一个工厂来处理我的 html 请求,以便我可以在我的 Controller 上使用它们,事情是,使用 instagram API,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;
});
}
}
});
我想使用 GetFeed 函数中的 nextUrl = response.data.pagination.next_url; 来获取 next_url 并将其用于 GetOldPhotos 函数,该函数将使用 nextUrl 加载旧照片,我不认为我可以从同一个函数返回 2 个值,并且我认为 $scope 不是工厂中的一个选项。
我知道可能有不止一种方法可以实现这一目标,但我刚刚开始使用 ionic 、 Angular 和 javascript,我真的被困在这里,如果我能得到一些“指导”那就太好了:D 对于本文中的任何语法、句法或任何其他错误,我们深表歉意,并提前感谢您!
最佳答案
您可以为工厂中的私有(private)变量赋值,而无需返回。
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="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/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>
关于javascript - 我如何访问同一工厂的不同 javascript 函数中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31151611/