diff options
| author | jankuca | 2013-08-08 16:04:11 -0700 | 
|---|---|---|
| committer | Igor Minar | 2013-08-08 21:53:44 -0700 | 
| commit | 5c560117425e7b3f7270389274476e843d6f69ec (patch) | |
| tree | d48608d5b668aff0e866dbcf501176f4c5519d29 /src | |
| parent | 4175377aaff9401f8b6c6f62ece71706ecb7f4ce (diff) | |
| download | angular.js-5c560117425e7b3f7270389274476e843d6f69ec.tar.bz2 | |
fix($compile): always instantiate controllers before pre-link fns run
Controllers should be always instantiated after compile fn runs, but before
pre-link fn runs. This way, controllers are available to pre-link fns that
request them.
Previously this was broken for async directives (directives with templateUrl).
Closes #3493
Closes #3482
Closes #3514
Diffstat (limited to 'src')
| -rw-r--r-- | src/ng/compile.js | 16 | 
1 files changed, 8 insertions, 8 deletions
| diff --git a/src/ng/compile.js b/src/ng/compile.js index 25d48313..39d3338f 100644 --- a/src/ng/compile.js +++ b/src/ng/compile.js @@ -782,13 +782,6 @@ function $CompileProvider($provide) {          directiveName = directive.name; -        if (directiveValue = directive.controller) { -          controllerDirectives = controllerDirectives || {}; -          assertNoDuplicate("'" + directiveName + "' controller", -              controllerDirectives[directiveName], directive, $compileNode); -          controllerDirectives[directiveName] = directive; -        } -          if (directiveValue = directive.transclude) {            assertNoDuplicate('transclusion', transcludeDirective, directive, $compileNode);            transcludeDirective = directive; @@ -877,6 +870,13 @@ function $CompileProvider($provide) {            }          } +        if (!directive.templateUrl && directive.controller) { +          controllerDirectives = controllerDirectives || {}; +          assertNoDuplicate("'" + directiveName + "' controller", +              controllerDirectives[directiveName], directive, $compileNode); +          controllerDirectives[directiveName] = directive; +        } +          if (directive.terminal) {            nodeLinkFn.terminal = true;            terminalPriority = Math.max(terminalPriority, directive.priority); @@ -1157,7 +1157,7 @@ function $CompileProvider($provide) {            origAsyncDirective = directives.shift(),            // The fact that we have to copy and patch the directive seems wrong!            derivedSyncDirective = extend({}, origAsyncDirective, { -            controller: null, templateUrl: null, transclude: null, scope: null, replace: null +            templateUrl: null, transclude: null, scope: null, replace: null            }),            templateUrl = (isFunction(origAsyncDirective.templateUrl))                ? origAsyncDirective.templateUrl($compileNode, tAttrs) | 
