2016-11-29 74 views
0

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

您是否检查JavaScript控制台的任何错误消息? –

+0

是的,我输出productsInfo [i] .prop到控制台,它是预期值,但记录没有改变,可能是我没有使用保存功能吧? – dabeige

+0

奇怪的是控制台输出“组更新成功”,如果$ save功能不起作用,那么它不会返回一个承诺,但如果它已经工作,怎么没有结果被改变? – dabeige

回答

0

第二$保存操作从第一$返回保存操作:

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服务等待承诺于r在调用该函数之前保存。 .then方法返回派生的承诺,可用于进一步链接。

欲了解更多信息,请参阅AngularJS $q Service API Reference -- chaining promises

+0

非常感谢! – dabeige