diff options
| author | Misko Hevery | 2012-03-13 16:14:58 -0700 | 
|---|---|---|
| committer | Misko Hevery | 2012-03-13 16:59:10 -0700 | 
| commit | e9e3ee012b50f868f4cd68f3571560680998a19b (patch) | |
| tree | a025cd1d4d28ea786e0e0978ab283526ee841ece | |
| parent | de9464c1431906883bdf180fb00615e6fa371577 (diff) | |
| download | angular.js-e9e3ee012b50f868f4cd68f3571560680998a19b.tar.bz2 | |
feat(compile): allow ngForm on attribute and class
#feature
- ngForm directive can now be used with element, class, and attributes
| -rw-r--r-- | src/AngularPublic.js | 2 | ||||
| -rw-r--r-- | src/directive/form.js | 53 | ||||
| -rw-r--r-- | test/directive/formSpec.js | 10 | 
3 files changed, 34 insertions, 31 deletions
| diff --git a/src/AngularPublic.js b/src/AngularPublic.js index d0a0e045..c922c5e2 100644 --- a/src/AngularPublic.js +++ b/src/AngularPublic.js @@ -80,7 +80,7 @@ function publishExternalAPI(angular){              ngClassOdd: ngClassOddDirective,              ngCloak: ngCloakDirective,              ngController: ngControllerDirective, -            ngForm: formDirective, +            ngForm: ngFormDirective,              ngHide: ngHideDirective,              ngInclude: ngIncludeDirective,              ngInit: ngInitDirective, diff --git a/src/directive/form.js b/src/directive/form.js index 47274589..f4c96455 100644 --- a/src/directive/form.js +++ b/src/directive/form.js @@ -222,31 +222,32 @@ function FormController(name, element, attrs) {        </doc:scenario>      </doc:example>   */ -var formDirective = [function() { -  return { -    name: 'form', -    restrict: 'E', -    inject: { -      name: 'accessor' -    }, -    controller: FormController, -    compile: function() { -      return { -        pre: function(scope, formElement, attr, controller) { -          formElement.bind('submit', function(event) { -            if (!attr.action) event.preventDefault(); -          }); +var formDirectiveDev = { +  name: 'form', +  restrict: 'E', +  inject: { +    name: 'accessor' +  }, +  controller: FormController, +  compile: function() { +    return { +      pre: function(scope, formElement, attr, controller) { +        formElement.bind('submit', function(event) { +          if (!attr.action) event.preventDefault(); +        }); -          var parentFormCtrl = formElement.parent().inheritedData('$formController'); -          if (parentFormCtrl) { -            formElement.bind('$destroy', function() { -              parentFormCtrl.$removeControl(controller); -              if (attr.name) delete scope[attr.name]; -              extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards -            }); -          } +        var parentFormCtrl = formElement.parent().inheritedData('$formController'); +        if (parentFormCtrl) { +          formElement.bind('$destroy', function() { +            parentFormCtrl.$removeControl(controller); +            if (attr.name) delete scope[attr.name]; +            extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards +          });          } -      }; -    } -  }; -}]; +      } +    }; +  } +}; + +var formDirective = valueFn(formDirectiveDev); +var ngFormDirective = valueFn(extend(copy(formDirectiveDev), {restrict:'EAC'})); diff --git a/test/directive/formSpec.js b/test/directive/formSpec.js index 588b9f49..ec16e19b 100644 --- a/test/directive/formSpec.js +++ b/test/directive/formSpec.js @@ -176,17 +176,19 @@ describe('form', function() {      it('should deregister a child form when its DOM is removed', function() {        doc = jqLite( -          '<ng:form name="parent">' + -            '<ng:form name="child">' + +          '<form name="parent">' + +            '<div class="ng-form" name="child">' +                '<input ng:model="modelA" name="inputA" required>' + -            '</ng:form>' + -          '</ng:form>'); +            '</div>' + +          '</form>');        $compile(doc)(scope);        scope.$apply();        var parent = scope.parent,            child = scope.child; +      expect(parent).toBeDefined(); +      expect(child).toBeDefined();        expect(parent.$error.required).toEqual([child]);        doc.children().remove(); //remove child | 
