可以使用函数代替ng模型选项的事件

时间:2017-06-12 17:46:10

标签: angularjs

假设我有一些带有以下角度关联的输入标记:

<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'>

1 个答案:

答案 0 :(得分:1)

您无法将自定义函数传递到updateOn指令的ng-model-options属性中,但是,您可以控制何时将某些内容推送到模型,如下所示:

&#13;
&#13;
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();
  }
}
&#13;
<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>
&#13;
&#13;
&#13;