AngularFire $ save函数如何工作?

时间:2016-11-29 02:32:42

标签: angularjs firebase firebase-realtime-database angularfire

我想根据输入的合同号更新一组字段,用户可以选择要更改的字段,并可以设置该值。我的代码没有改变记录,我不知道为什么。我猜原因可能是道具未定义。该应用程序是使用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);
                });
            }*/
        };

    };

1 个答案:

答案 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