将var传递给angular $ resource成功函数

时间:2014-06-04 03:24:09

标签: javascript angularjs angularjs-resource

我一直对此疯狂,我认为答案可能就在那里,但我不知道向Google询问问题的正确方法。

基本上我需要一种方法来进行$资源调用,并传入一些我想在成功函数中使用的数据。

app.controller('VariantListController', ['djResource', function(djResource){
    var Variants = djResource('/ship-builder/variants/?format=json');
    var Vehicle = djResource('/ship-builder/vehicles/:id', {id: '@id'});
    this.variants = Variants.query(function(variants){
        $(variants).each(function(){
            console.log(this);
            variantData = this;
            var vehicleData = Vehicle.get({id:this.baseVehicle}, function(){
                console.log(variantData);
            })
        })
    });

}]);

在上面的示例中,在最里面的成功函数中,' variantData'始终是上一级别的最后一个条目的值。这是有道理的,因为该值是在成功发生之前很久就由数组中的最后一项设置的。我需要一种方法来获得' variantData'的价值。当调用Vehicle.get()时,这是不合适的。

这有意义吗?我发现很难解释这个问题。

3 个答案:

答案 0 :(得分:2)

您需要创建一个闭包才能使其工作。像

这样的东西
this.variants = Variants.query(function(variants){
        $(variants).each(function(){
            getVehicleData(this);
        })
    });

function getVehicalData(variantData) {
   var vehicleData = Vehicle.get({id:variantData.vehicleId}, function(){
                console.log(variantData);
            })
}

答案 1 :(得分:0)

我绝不是$ resource服务的专家,但是使用$ promise.then方法代替成功回调也行。

$(variants).each(function(){
  console.log(this);
  variantData = this;

  Vehicle.get({id:this.baseVehicle}).$promise.then(function() {
    console.log(variantData);
  });
});

答案 2 :(得分:0)

由于variantData中的值可能在实际调用成功回调之前发生变化,因此您需要确保回调具有存储的原始值。

var vehicleData = Vehicle.get({id:this.baseVehicle}, function(vData){
     return function() {
          console.log(vData);
     }
}(variantData));

上面将创建一个新函数,其中variantData存储在闭包中。