在指令中获取元素的ng-model值

时间:2017-03-14 16:59:14

标签: angularjs angularjs-directive

这是一个虚构的例子,我有一个包含多个表单的巨大模板,我想标记触摸输入的部分。

<section my-directive>
  <form name="user">
    <input type="text" ng-model="someCtrlAlias.data.firstname">
    <input type="text" ng-model="someCtrlAlias.data.lastname">
  </form>
</section>

<section my-directive>
  <form name="address">
    <input type="text" ng-model="someCtrlAlias.data.street">
    <input type="text" ng-model="someCtrlAlias.data.zipcode">
  </form>
</section>

我想检查每个输入字段是否已被触摸。基本上是$ dirty会做什么,但问题是用户可以保存并在以后继续,所以$ dirty消失了。我不想将子表单分成data1.firstname,data2.street,因为之后我需要在保存数据库时删除这些字段。

我试过这个:

angular.forEach element.find('input'), (input) ->
  $input = angular.element(input)
  name = $input.attr('name')
  console.log name, "=>", $input.attr('ng-model')

$input.attr('ng-model')只显示指定模型的名称。我可以将整个Object传递给指令并从那里访问属性,例如myModel[$input.attr('ng-model').replace("myController.", "")]但这似乎效率低下。

1 个答案:

答案 0 :(得分:0)

获取表格的范围:

$form = element.find('form')
formName = $form.attr('name')
formScope = $form.scope()[$form.attr('name')]

所有角度键都有$,其余的似乎只是我的模型:

keys = Object.keys(formScope).filter( (key)-> return key.indexOf('$') == -1 ).filter( (key)-> return formScope[key].$modelValue? )
if keys.length > 0
  console.log "#{formName} is set dirty"
  formScope.$setDirty(true)