这是一个虚构的例子,我有一个包含多个表单的巨大模板,我想标记触摸输入的部分。
<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.", "")]
但这似乎效率低下。
答案 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)