AngularJS - 无法在动态输入上访问$ valid

时间:2014-08-13 23:15:50

标签: javascript angularjs validation angularjs-ng-repeat

更新:我添加了一个自定义指令,允许我使用动态生成的名称访问输入,但$ valid仍未定义。

我对Angular很新(尝试从jQuery切换)我发现它非常棒,但是我已经把头发拉了好几个小时并且无法弄清楚&# 39;导致问题。

我尝试实现的用户界面的工作流程是让用户点击一个步骤,然后显示一个输入字段,他必须填写该字段(需要进行验证,因此我需要这样做试图使用ng-required / ng-minlength)。

如果它通过了验证,它应该显示一个勾号图标并激活下一步,它的工作方式相同。


现在的问题是我可以访问表单元素,但我得到的对象是一个DOM对象,它没有包含$ valid属性,我需要检查表单/字段是否有效。

17:20行:

console.log($scope.step1); //undefined
console.log(step1); //dom object
console.log(step1.value); //dom object
console.log(step1.value.$valid); //undefined

我一直在谷歌搜索很多关于SO的许多问题说我应该能够通过$ scope变量访问表单,但不幸的是我不能,虽然它可以通过一个简单的变量访问名称" step1" (动态生成的表单名称)。我也可以访问"值"命名字段,但它仍然只是一个DOM对象,因此没有$ valid可用。

JSFiddle:http://jsfiddle.net/Iber/vtvnquee/


我的问题是:

  • 我是否在Angular的编码风格方面走在了正确的道路上?
  • 是我的#34;向导应用程序"代码逻辑?我的意思是,也许我应该使用不同的方法来构建这些步骤?
  • 我做错了什么,为什么我无法访问$ valid属性?

真的很想了解Angular,因为它看起来像是一个适合大型应用程序的框架以及适合我的方式。

1 个答案:

答案 0 :(得分:6)

角度形式验证依赖于两件事:

  1. 您的表单(或ng-form)元素必须具有“name”属性。

    <form name="myform">
    
  2. 您的输入(或选择)字段必须具有“名称”属性和ng模型。

    <input type="text" name="name" ng-model="name" />
    
  3. 表单和输入字段需要name属性的原因是因为您可以在$ scope上找到模型并执行客户端验证。

    例如

     $scope.myform.name.$error.required
     $scope.myform.name.$valid
     $scope.myform.name.$invalid
    

    [编辑]

    我看到你已经在你的小提琴中遵循了这些指导原则。

    它不起作用的原因是因为name属性不能是插值。