【问题标题】:Ionic Angular Closure for trying to return json data用于尝试返回 json 数据的 Ionic Angular Closure
【发布时间】:2015-06-23 15:58:09
【问题描述】:

我有一个 Ionic 应用程序,我试图从闭包内返回数据。控制台正在正确显示所有内容,但我似乎无法让数据正确返回。我尝试了几种不同的变体,但都没有成功。

$scope.callbackMethod = function (query) {
 //var ritems= new Array();

  var ritems;

  Inventory.search(query, $scope.currentUser.token, $scope.currentUser.user_id, function(response) {
 //console.log(JSON.stringify(response));
 if(response.success == true)
 {
    $ionicLoading.hide();
    $scope.requestmodal.hide();            
    console.log(response.items);
    ritems= response.items;    
  }
    else
  {
    $ionicLoading.hide();
    //console.log(response.message);
    return $scope.errorMessage = response.message;
   } 
  });

console.log(ritems);
return ritems;

};

还有这个:

 $scope.callbackMethod = function (query) {
 //var ritems= new Array();

  var ritems =  Inventory.search(query, $scope.currentUser.token, $scope.currentUser.user_id, function(response) {
     //console.log(JSON.stringify(response));
     if(response.success == true)
     {
        $ionicLoading.hide();
        $scope.requestmodal.hide();

        console.log(response.items);
        return response.items;

      }
        else
      {
         $ionicLoading.hide();
         //console.log(response.message);
         return $scope.errorMessage = response.message;
       } 
    });

console.log(ritems);
return ritems;

};

返回给脚本的json是:

{"success":true,"items":[{"id":"1","0":"1","name":"Product 1","1":"Product 1","ref_id":"","2":""},{"id":"2","0":"2","name":"Product 2","1":"Product 2","ref_id":"","2":""}],"message":""}

有什么想法吗?非常感谢!

【问题讨论】:

  • 也请分享您的库存代码
  • 你是不是在 ritems 中没有定义
  • @Mohit 我添加了 json 响应。谢谢!
  • @Mohit 在第二个例子中我没有定义
  • 这两种情况都没有定义,因为它是一个异步调用,console.log 在响应实际到来之前运行

标签: javascript angularjs closures ionic


【解决方案1】:

你可以按照这个方法来解决你的问题

var cbm = function (query) {
  var defer = $q.defer();
  Inventory.search(query, $scope.currentUser.token,$scope.currentUser.user_id, function(response) {
  if(response.success == true)
  {
    $ionicLoading.hide();
    $scope.requestmodal.hide();            
    defer.resolve(response.items) ;   
  }
  else
  {
    $ionicLoading.hide();
    defer.reject(response.message);
  } 
});
 return defer.promise;
};

在调用时你可以调用你的回调方法

$scope.callbackMethod = function (query){ 
   return cbm(query).then(function(data){ return data;}); 
}

【讨论】:

  • 现在测试。我在正确的轨道上吗?: $scope.cbm= function (query) { var ritems; var defer = $q.defer(); Inventory.search(query, $scope.currentUser.token,$scope.currentUser.user_id, function(response) { if(response.success == true) { $ionicLoading.hide(); $scope.requestmodal.hide() ; defer.resolve(response.items) ; } else { $ionicLoading.hide(); defer.reject(response.message); } });返回 defer.promise; }; $scope.callbackMethod = cbm.then(function(data){ $scope.data = data });
  • 它应该可以工作。但是,这个“callbackMethod”在哪里调用?
  • $scope.callbackMethod 应该是它的调用
  • 是的..我在问你在 html 中的什么地方使用它?
  • this 放在 Angular 脚本的控制器中,但在前端
猜你喜欢
  • 2020-02-09
  • 2023-04-02
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2020-06-20
  • 1970-01-01
相关资源
最近更新 更多