2016-05-12 61 views
0

我有一個看起來像這樣的形式:AngularJS火NG-改變而改變模型時

<div class="col-xs-12 col-lg-4"> 
    <form name="deliveryForm" ng-class="{ 'has-error': deliveryForm.$invalid && !deliveryForm.contact.$pristine }"> 
     <div class="form-group"> 
      <div class="btn-group"> 
       <label class="btn btn-default" ng-model="controller.order.lines[0].forDelivery" btn-radio="true" ng-change="controller.setDeliveryDetails()">For delivery</label> 
       <label class="btn btn-default" ng-model="controller.order.lines[0].forDelivery" btn-radio="false" ng-change="controller.findCollectionPoints()">For collection</label> 
      </div> 
     </div> 

     <div class="form-group" ng-if="!controller.order.lines[0].forDelivery"> 
      <label class="control-label">Contact</label> 
      <input class="form-control" type="text" name="contact" ng-model="controller.model.contact" ng-change="controller.setDeliveryDetails()" autocomplete="off" required /> 
      <input type="hidden" name="collectionPoint" ng-model="controller.model.collectionPoint" ng-change="controller.setDeliveryDetails()" required /> 
     </div> 

     <div class="form-group"> 
      <label class="control-label">Instructions</label> 
      <input class="form-control" type="text" name="instructions" ng-model="controller.model.instructions" ng-change="controller.setDeliveryDetails()" autocomplete="off" /> 
     </div> 

     <div class="form-group"> 
      <button class="btn btn-default" type="button" ui-sref="saveOrder.lines">Back</button> 
      <a class="btn btn-primary pull-right" ng-if="deliveryForm.$valid" ui-sref="saveOrder.confirm">Continue</a> 
     </div> 
    </form> 
</div> 

正如你所看到的,如果我的第一行是交貨不,然後我告訴觸點輸入和隱藏的collectionPoint輸入。 進一步咬着我有改變collectionPoint鏈接:

<a href="#" ng-click="controller.model.collectionPoint = point"></a> 

我希望會發生的是,隱藏的輸入會檢測到變化並觸發controller.setDeliveryDetails()方法,但它似乎沒有工作。 有沒有辦法可以做到這一點?

+0

'NG-model'可以看在'$ scope。$ watch'處。 'ng-change'不適用於這種情況。 –

+0

一個'label'不應該有'ng-model',因爲'ng-model'用在'inputs'上...... –

回答

0

如果對非模型的輸入進行更改,則會觸發ng變更。

你可以做什麼要麼運行controller.setDeliveryDetails()ng-click

<a href="#" ng-click="controller.model.collectionPoint = point; controller.setDeliveryDetails()"></a> 

或設置手錶控制器上controller.model.collectionPoint

$scope.$watch(angular.bind(this, function() { 
    return this.model.collectionPoint; 
}), function (newVal) { 
    controller.setDeliveryDetails(); 
}); 
+0

不知道你可以在ng-click上運行多個命令 – r3plica