diff options
| author | Chirayu Krishnappa | 2013-08-09 19:56:10 -0700 | 
|---|---|---|
| committer | Igor Minar | 2013-08-12 10:36:25 -0700 | 
| commit | c173ca412878d537b18df01f39e400ea48a4b398 (patch) | |
| tree | 1c148b33ac230f82efdc25e31cfd91cbcf9f615c /test/ng | |
| parent | 2430347ece2f7a74a35d3ab0095ecc895884670e (diff) | |
| download | angular.js-c173ca412878d537b18df01f39e400ea48a4b398.tar.bz2 | |
fix($compile): correct controller instantiation for async directives
This fixes regression introduced by #3514 (5c560117) - this commit is being
reverted here and a better fix is included.
The regression caused the controller to be instantiated before the isolate scope
was initialized.
Closes #3493
Closes #3482
Closes #3537
Closes #3540
Diffstat (limited to 'test/ng')
| -rwxr-xr-x | test/ng/compileSpec.js | 55 | 
1 files changed, 55 insertions, 0 deletions
| diff --git a/test/ng/compileSpec.js b/test/ng/compileSpec.js index 36a8b990..ba94c48b 100755 --- a/test/ng/compileSpec.js +++ b/test/ng/compileSpec.js @@ -2455,6 +2455,61 @@ describe('$compile', function() {      }); +    it('should instantiate the controller after the isolate scope bindings are initialized (with template)', function () { +      module(function () { +        var Ctrl = function ($scope, log) { +          log('myFoo=' + $scope.myFoo); +        }; + +        directive('myDirective', function () { +          return { +            scope: { +              myFoo: "=" +            }, +            template: '<p>Hello</p>', +            controller: Ctrl +          }; +        }); +      }); + +      inject(function ($templateCache, $compile, $rootScope, log) { +        $rootScope.foo = "bar"; + +        element = $compile('<div my-directive my-foo="foo"></div>')($rootScope); +        $rootScope.$apply(); +        expect(log).toEqual('myFoo=bar'); +      }); +    }); + + +    it('should instantiate the controller after the isolate scope bindings are initialized (with templateUrl)', function () { +      module(function () { +        var Ctrl = function ($scope, log) { +          log('myFoo=' + $scope.myFoo); +        }; + +        directive('myDirective', function () { +          return { +            scope: { +              myFoo: "=" +            }, +            templateUrl: 'hello.html', +            controller: Ctrl +          }; +        }); +      }); + +      inject(function ($templateCache, $compile, $rootScope, log) { +        $templateCache.put('hello.html', '<p>Hello</p>'); +        $rootScope.foo = "bar"; + +        element = $compile('<div my-directive my-foo="foo"></div>')($rootScope); +        $rootScope.$apply(); +        expect(log).toEqual('myFoo=bar'); +      }); +    }); + +      it('should instantiate controllers in the parent->child->baby order when nested transluction, templateUrl and ' +          'replacement are in the mix', function() {        // similar to the test above, except that we have one more layer of nesting and nested transclusion | 
