如何访问同一工厂中不同javascript函数中的变量
how can i access variables in different javascript functions on the same factory?
我试图用ionic框架构建一个instagram提要应用程序,我创建了一个工厂来处理我的html请求,这样我就可以在我的控制器上使用它们,问题是,通过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;
});
}
}
});
我想使用nextUrl=response.data.pagination.next_url从GetFeed函数获取nextUrl,并在GetOldPhotos函数上使用它,该函数将使用nextUrl加载旧照片,我认为我不能从同一函数返回2个值,我认为$scope在工厂中不是一个选项。
我知道实现这一点的方法可能不止一种,但我刚开始使用ionic、angular和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="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>
您可以从GetFeed()返回一个同时具有以下两个值的对象:
return {items: items,
nextUrl = response.data.pagination.next_url
};
或者一个数组:
return [items, response.data.pagination.next_url];
然后将其作为参数传递回GetOldPhotos。我会让来电者保持状态。
你是说当你在GetFeed中设置nextUrl变量时,它在getOldPhotos函数中不可用吗?这让我很惊讶。它应该起作用。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 正在全局范围中查找JavaScript函数
- 如何将输入(type=text)从html表单传递到javascript函数
- 如何调用这个匿名 JavaScript 函数
- 通过Ajax将JavaScript函数传递给PHP文件
- 在javascript函数中设置全局变量
- 如何在执行此特定onclick事件时执行JavaScript函数
- 使用javascript函数在页面初始化后加载jquery
- javascript函数同步
- 如何将一个JavaScript函数回调为多个函数
- 在javascript函数中使用php变量
- 代码背后调用一个JavaScript函数的按钮点击-C#
- 将JavaScript函数与HTML分离
- 组合两个javascript函数
- 在 Java 中的 JavaScript 函数中插入 Wicket 值
- javascript函数内部的代码用逗号而不是分号分隔
- href属性内的javascript函数
- 使用html表单中的参数调用JavaScript函数
- 分析Javascript函数中的多个对象
- javascript函数的:和=之间的区别