diff options
| author | Matthew Windwer | 2013-07-02 15:14:24 -0400 | 
|---|---|---|
| committer | Brian Ford | 2013-08-07 13:59:41 -0700 | 
| commit | 4407e81c618d42c70e8cfca4f52dfc4a669b5c68 (patch) | |
| tree | 874f1ea121c0d3ecdd1bd5165114e868ea45b165 | |
| parent | ad76e77fce09d0aee28b5ca1a328d5df8596b935 (diff) | |
| download | angular.js-4407e81c618d42c70e8cfca4f52dfc4a669b5c68.tar.bz2 | |
feat(ngForm): Supports expression in form names
<form name="ctrl.form"> form controller will accessible
as $scope.ctrl.form instead of $scope['ctrl.form']
BREAKING CHANGE:
If you have form names that will evaluate as an expression:
<form name="ctrl.form">
And if you are accessing the form from your controller:
  Before:
  function($scope) {
    $scope['ctrl.form'] // form controller instance
  }
  After:
  function($scope) {
    $scope.ctrl.form // form controller instance
  }
This makes it possible to access a form from a controller
using the new "controller as" syntax. Supporting the previous
behavior offers no benefit.
| -rw-r--r-- | src/ng/directive/form.js | 4 | ||||
| -rw-r--r-- | test/ng/directive/formSpec.js | 29 | 
2 files changed, 29 insertions, 4 deletions
| diff --git a/src/ng/directive/form.js b/src/ng/directive/form.js index 72f752be..ec91f4b8 100644 --- a/src/ng/directive/form.js +++ b/src/ng/directive/form.js @@ -306,13 +306,13 @@ var formDirectiveFactory = function(isNgForm) {                  alias = attr.name || attr.ngForm;              if (alias) { -              scope[alias] = controller; +              setter(scope, alias, controller, alias);              }              if (parentFormCtrl) {                formElement.bind('$destroy', function() {                  parentFormCtrl.$removeControl(controller);                  if (alias) { -                  scope[alias] = undefined; +                  setter(scope, alias, undefined, alias);                  }                  extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards                }); diff --git a/test/ng/directive/formSpec.js b/test/ng/directive/formSpec.js index f8e4cf63..b5bbe535 100644 --- a/test/ng/directive/formSpec.js +++ b/test/ng/directive/formSpec.js @@ -83,10 +83,11 @@ describe('form', function() {    }); -  it('should allow form name to be an expression', function() { +  it('should support expression in form name', function() {      doc = $compile('<form name="obj.myForm"></form>')(scope); -    expect(scope['obj.myForm']).toBeTruthy(); +    expect(scope.obj).toBeDefined(); +    expect(scope.obj.myForm).toBeTruthy();    }); @@ -325,6 +326,30 @@ describe('form', function() {      }); +    it('should deregister a child form whose name is an expression when its DOM is removed', function() { +      doc = jqLite( +        '<form name="parent">' + +          '<div class="ng-form" name="child.form">' + +          '<input ng:model="modelA" name="inputA" required>' + +          '</div>' + +          '</form>'); +      $compile(doc)(scope); +      scope.$apply(); + +      var parent = scope.parent, +        child = scope.child.form; + +      expect(parent).toBeDefined(); +      expect(child).toBeDefined(); +      expect(parent.$error.required).toEqual([child]); +      doc.children().remove(); //remove child + +      expect(parent.child).toBeUndefined(); +      expect(scope.child.form).toBeUndefined(); +      expect(parent.$error.required).toBe(false); +    }); + +      it('should deregister a input when its removed from DOM', function() {        doc = jqLite(          '<form name="parent">' + | 
