我有这个功能
$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/