2017-06-12 38 views
0

說我有一個相關的以下角度某些輸入標籤:可以函數用來代替事件NG模式選項

<input type="text" data-ng-model-options="{ updateOn: 'submit' }" data-ng-model='value.name'> 

當這種標籤的形式被提交,它會更新該值的名稱。

當調用控制器定義的函數而不是事件時,是否有辦法觸發updateOn?或者API只能處理瀏覽器事件?

例如:

,如果我有這樣的事情:

angular.module('someModule') 
    .controller('someCtrl', ["$scope", Callback]) 

function Callback($scope){ 
    $scope.updateValue = updateValue 

    function updateValue(){ 
    console.log('will now update value') 
    } 
} 

有沒有一種方法,如果updateValue函數被調用時,只更新模型?

這是行不通的,但這樣的事情?:

<input type="text" data-ng-model-options="{ updateOn: 'updateValue' }" data-ng-model='value.name'> 
+0

調用[ngModelController $ commitViewV alue方法](https://docs.angularjs.org/api/ng/type/ngModel.NgModelController#$commitViewValue)提交待定更新。 – georgeawg

+0

所以它沒有在上面的例子中指定,但我在ng重複範圍內,所以我不確定這個方法能幫助我。 –

+0

另外,我猜沒有辦法在這些情況下利用函數? –

回答

1

您無法通過自定義函數到ng-model-options指令的updateOn財產,但是,你可以當事情被推到超過控制模型,像這樣:

angular.module('someModule', []) 
 
    .controller('someCtrl', ["$scope", Callback]) 
 

 
function Callback($scope){ 
 
    $scope.updateValue = updateValue 
 
    $scope.value = { 
 
    name: "" 
 
    } 
 
    function updateValue(form){ 
 
    console.log('will now update value') 
 
    // form.[prop] matches name="prop" attribute on form input 
 
    form.name.$commitViewValue(); 
 
    } 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.0/angular.min.js"></script> 
 
<div data-ng-app="someModule" data-ng-controller="someCtrl"> 
 
    <form name="myForm"> 
 
    <input type="text" name="name" 
 
      data-ng-model-options="{ updateOn: 'submit' }" data-ng-model='value.name'> 
 
    {{value.name}}<br/> 
 
    <button data-ng-click="updateValue(myForm)">Update Name</button> 
 
    </form> 
 
</div>

+0

是的,這是有效的,但問題是,我試圖提交確認步驟的值,並因此觸發更新。我結束了使用另一個控制器來複制我的角度對象臨時存儲它。它感覺有點冒險,但正如你所說的,你不能將自定義功能傳遞給'updateOn' –

相關問題