我有这个功能

$scope.updateValue = function(key, selectedProductname, numberUsed){

var selectedKey = key;
var selectedProductname = selectedProductname;
var numberUsed = numberUsed;

var useageRef = ref.child('/useage/');
var updateObj = $firebase(useageRef);

var myData = {
    productName : selectedProductname,
    numberUsed : numberUsed
}

var decrementLocation = inventoryRef.child(key + '/amount')

updateObj.$push(myData).then(

    decrementLocation.transaction(function (current_value, numberUsed) {
           console.log(numberUsed);
          return (current_value || 0) - 1;

})

    );
}


我将“ numberUsed”传递到$ scope.updateValue中,并在myData中使用它,然后将其推送到服务器,这没有问题,但是当我在这一行使用它时,“ decrementLocation.transaction(function(current_value,numberUsed){”然后我尝试console.log(numberUsed);控制台说未定义。为什么?以及如何在此行“ decrementLocation.transaction(function(current_value,numberUsed){”中使用numberUsed?如何成功编码?

最佳答案

这里发生了很多事情。

首先,在下面的代码中:

    decrementLocation.transaction(function (current_value, numberUsed) {
       console.log(numberUsed);
      return (current_value || 0) - 1;
    })


您正在重新声明numberUsed作为.transaction()回调函数的第二个参数。因此,此小功能之外的numberUsed都无关紧要。如果要使用周围函数中的var,则需要执行以下操作:

    decrementLocation.transaction(function (current_value) {
       console.log(numberUsed);
      return (current_value || 0) - 1;
    })


第二,您的;函数没有关闭.transaction()。我认为这不会严重影响您在此处的操作,但不能确定。这应该通过jslint / jshint运行。

第三,您要在整个周围的numberUsed函数内部重新声明$scope.updateValue()

$scope.updateValue = function(key, selectedProductname, numberUsed){
    var numberUsed = numberUsed;


因此,您要声明一个新变量numberUsed,其值将是numberUsed,但这是一个新的var,因此应将其设置为undefined。如果将其设置为任何值,那将是令人惊讶的。如果您需要var,则应该执行以下操作:

$scope.updateValue = function(key, selectedProductname, numberUsed){
    var nu2 = numberUsed;


或类似的东西。但是即使如此,为什么还要重新声明var?无论如何,它都是按值复制的。

一个好的短毛猫会抓住任何这一切。

关于javascript - 为什么我不能将参数传递给.then函数(AngularJS)?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27187495/

10-09 00:35