javascript - 我如何访问同一工厂的不同 javascript 函数中的变量?

标签 javascript angularjs ionic-framework

我正在尝试使用 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/

相关文章:

javascript - 当数组中的函数之一不返回 Promise 时,我可以使用 $q.all 吗?

javascript - 使用 jquery 获取存储在 block 中的图像源

angularjs - NodeJS和AngularJS : Download file $http. get()并保存到文件夹

angularjs - 如何设置选择选项的value属性?

javascript - 如何访问Angular服务文件之间的依赖文件?

ionic-framework - 弹出窗口和模态关闭后,Ionic 应用程序卡住或停止工作

javascript - jQuery mobile - 将页面拆分为不同的文件

javascript - 如何在 Angular 中执行带有请求 header 的 ajax post

javascript - js代码获取动态生成的div ID

ionic-framework - 当您使用 map 靠近特定地点时,如何接收推送通知?