我想根据输入的合同号更新一组字段,用户可以选择要更改的字段,并可以设置该值。我的代码没有改变记录,我不知道为什么。我猜原因可能是道具未定义。该应用程序是使用AngularFire的api构建的,我的代码如下:
<div class="container-fluid">
<div class="row">
<h3>Contract renewal & Group update other fields</h3>
<form class="form-horizontal" ng-submit="groupUpdate()" name="contractupdateForm">
<div class="form-group">
<label for="washroom" class="col-sm-2 control-label"> Contract Number</label>
<div class="col-sm-8">
<div class="input-group">
<input type="text" class="form-control" placeholder="Enter contract number so related fileds could be group updated" ng-model="contractupdate" ng-required="true">
</div>
</div>
</div>
<div class="form-group">
<label for="washroom" class="col-sm-2 control-label"> Fields Category</label>
<div class="col-sm-8">
<div class="input-group">
<select class="form-control" id="productfield" name = "productfield" ng-model="fieldupdate" ng-options="f.value as f.label for f in fields">
<option value="">No filed selected</option>
</select>
</div>
</div>
</div>
<div class="form-group">
<label for="washroom" class="col-sm-2 control-label"> Updated value</label>
<div class="col-sm-8">
<div class="input-group">
<input type="text" class="form-control" placeholder="Enter value supposed to be changed" ng-model="valueupdate" ng-required="true">
</div>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2">
<button type="submit" class="btn btn-default" >
Change group value
</button>
</div>
</div>
</form>
<hr>
</div>
</div>
控制器部分如下:
$scope.groupUpdate = function(){
console.log($scope.contractupdate);
console.log($scope.fieldupdate);
console.log($scope.valueupdate);
for(var i = 0; i< productsInfo.length;i++){
if(productsInfo[i].productcontract == $scope.contractupdate){
var prop = $scope.fieldupdate;
productsInfo[i].prop = $scope.valueupdate;
productsInfo.$save(i).then(function(ref) {
console.log("group update success");
}, function(error) {
console.log("Error:", error);
});
}
/*if(i.productcontract == $scope.contractupdate){
var field = $scope.fieldupdate;
console.log(productsInfo[i].field);
productsList[i].field == $scope.valueupdate;
productsList.$save().then(function(productRef){
console.log("group updated success");
ref.key === obj.$id; // true
}, function(error) {
console.log("Error:", error);
});
}*/
};
};
答案 0 :(得分:0)
第二个$ save操作需要从第一个$ save操作返回的promise中链接:
var promise = productsInfo.$save().then(function(ref) {
console.log("group update success");
//return to chain ref
return ref;
}, function(error) {
console.log("Error:", error);
//throw to chain error
throw error;
});
var p2 = promise.then(function(ref) {
//do more here
//return to chain promise
return productsInfo.$save();
}).catch(function(error) {
console.log("Error:", error);
//throw to chain error
throw error;
});
var p3 = p2.then(function(secondRef) {
//do even more
当代码放在给定.then
方法的函数中时,$q
服务会在调用该函数之前等待解析的承诺。 .then
方法返回派生的promise,可用于进一步链接。
有关详细信息,请参阅AngularJS $q Service API Reference -- chaining promises