簡體   English   中英

如何在同一工廠的不同javascript函數中訪問變量?

[英]how can i access variables in different javascript functions on the same factory?

我試圖用離子框架構建一個instagram feed應用程序,我創建了一個工廠來處理我的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函數獲取next_url並在將使用nextUrl加載舊照片的GetOldPhotos函數上使用它,我不認為我可以從同一函數返回2個值,並且我認為$ scope在工廠不是一個選項。

我知道可以有多種方法來實現這一目標,但我只是從離子,角度和javascript入手,我真的被困在這里,如果可以得到一些“指導”,那將是非常棒的:D對不起,任何語法,語法或這篇文章中的其他任何錯誤,請先謝謝!

您可以從GetFeed()返回具有兩個值的對象:

return {items: items,
 nextUrl = response.data.pagination.next_url
};

或數組:

return [items, response.data.pagination.next_url];

然后將其作為參數傳遞回GetOldPhotos。 我會讓呼叫者保持狀態。

您是說在GetFeed中設置nextUrl變量時,在getOldPhotos函數中不可用該變量嗎? 這讓我感到驚訝。 它應該工作。

您可以在工廠中為私有變量賦值,而無需返回。

 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> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM