Page 87 - AngularJS权威教程
P. 87

9.2  在指令中使用子作用域    67


                          ng-model="equation.x"
                          ng-change="change()" />                                                    1
                      <code>{{ equation.output }}</code>
                  </div>
                                                                                                     2

                  angular.module('myApp',[])
                  .controller('EquationController',function($scope) {
                      $scope.equation = {};                                                          3
                      $scope.change = function() {
                          $scope.equation.output
                              = parseInt($scope.equation.x) + 2;                                     4
                      };
                  });
                  在线示例:http://jsbin.com/onUXuxO/1/edit。                                              5

                  上面的例子中,只要文本输入字段中的内容发生了变化就会改变equation.x的值,进而运
              行change()函数。                                                                           6
                  16. ng-form
                                                                                                     7
                  ng-form用来在一个表单内部嵌套另一个表单。普通的HTML  <form>标签不允许嵌套,但
              ng-form可以。
                                                                                                     8
                  这意味着内部所有的子表单都合法时,外部的表单才会合法。这对于用ng-repeat动态创建
              表单是非常有用的。
                                                                                                     9
                  由于不能通过字符插值来给输入元素动态地生成name属性,所以需要将ng-form指令内每组
              重复的输入字段都包含在一个外部表单元素内。
                                                                                                     10
                  下面的CSS类会根据表单的验证状态自动设置:

                   表单合法时设置ng-valid;                                                                 11
                   表单不合法时设置ng-invlid;
                   表单未进行修改时设置ng-pristion;
                   表单进行过修改时设置ng-dirty。                                                              12

                  Angular不会将表单提交到服务器,除非它指定了action属性。要指定提交表单时调用哪个
              JavaScript方法,使用下面两个指令中的一个。                                                             13
                   ng-submit:在表单元素上使用。
                   ng-click:在第一个按钮或submit类型(input[type=submit])的输入字段上使用。                            14
                  为了避免处理程序被多次调用,只使用下面两个指令中的一个。
                                                                                                     15
                  下面的例子展示了如何通过服务器返回的JSON数据动态生成一个表单。我们用ng-loop来遍
              历从服务器取回的所有数据。由于不能动态生成name属性,而我们又需要这个属性做验证,所以
              在循环的过程中会为每一个字段都生成一个新表单。                                                                16
                  由于AngularJS中用来取代<form>的ng-form指令可以嵌套,并且外部表单在所有子表单都合
                                                                                                     17
              法之前一直处于不合法状态,因此我们可以在动态生成子表单的同时使用表单验证功能。是的,
              鱼和熊掌可以兼得。
                                                                                                     18
                  下面先看一下我们硬编码的JSON数据,把它假设成是从服务器返回的:
   82   83   84   85   86   87   88   89   90   91   92