先说一下, formngForm 是官方定义的两个指令,但是它们其实是同一个东西。前者只允许以标签形式使用,而后者允许 EAC 的形式。DOM 结构中, form 标签不能嵌套,但是 ng 的指令没有这个限制。不管是 form 还是 ngForm ,它们的 controller 都被命名成了 。 所以 require 这个参数不要写错了。



    FormController 的几个成员是很好理解的:


    $pristine 表单是否被动过


    $dirty 表单是否没被动过


    $valid 表单是否检验通过


    $invalid 表单是否检验未通过


    $error 表单中的错误


    $setDirty() 直接设置 $dirty$pristine




      FormController 可以自由增减它包含的那些,类似于 NgModelController 的实例。在 DOM 结构上,有 ng-model 的 节点的 NgMoelController 会被自动添加。


      $addControl() 添加一个 conroller


      $removeControl() 删除一个 controller



      这两个手动使用机会应该不会很多。被添加的实例也可以手动实现所有的 NgModelController 的方法


          虽然官方原来定义了几种 type ,但这不妨碍我们继续扩展新的类型。如果新的 type 参数值不在官方的定义列表里,那会按 text 类型先做处理,这其实什么影响都没有。剩下的,就是写我们自己的验证逻辑就行了。



          上面的代码是参见官方的做法,使用格式化的过程,同时在里面做有效性检查。