mirror of
https://github.com/Hopiu/angular.js.git
synced 2026-03-16 23:30:23 +00:00
fix($compile): work around issue in jQuery 1.10.2
jQuery 1.10.2 does not attach data to comment nodes, which previously broke `$compile`. This changes how elements with "transclude element" and a controller are compiled to avoid the issue. Closes #3764
This commit is contained in:
parent
418d7a36ff
commit
e0c134b8bf
2 changed files with 18 additions and 4 deletions
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "AngularJS",
|
"name": "AngularJS",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"jquery": "git://github.com/components/jquery.git#v1.8.3",
|
"jquery": "1.10.2",
|
||||||
"lunr.js": "0.4.0",
|
"lunr.js": "0.4.0",
|
||||||
"google-code-prettify": "1.0.0",
|
"google-code-prettify": "1.0.0",
|
||||||
"components-font-awesome": "3.1.0",
|
"components-font-awesome": "3.1.0",
|
||||||
|
|
|
||||||
|
|
@ -925,7 +925,14 @@ function $CompileProvider($provide) {
|
||||||
}
|
}
|
||||||
optional = optional || value == '?';
|
optional = optional || value == '?';
|
||||||
}
|
}
|
||||||
|
|
||||||
value = $element[retrievalMethod]('$' + require + 'Controller');
|
value = $element[retrievalMethod]('$' + require + 'Controller');
|
||||||
|
|
||||||
|
if ($element[0].nodeType == 8 && $element[0].$$controller) { // Transclusion comment node
|
||||||
|
value = value || $element[0].$$controller;
|
||||||
|
$element[0].$$controller = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (!value && !optional) {
|
if (!value && !optional) {
|
||||||
throw $compileMinErr('ctreq', "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName);
|
throw $compileMinErr('ctreq', "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName);
|
||||||
}
|
}
|
||||||
|
|
@ -1040,9 +1047,16 @@ function $CompileProvider($provide) {
|
||||||
}
|
}
|
||||||
|
|
||||||
controllerInstance = $controller(controller, locals);
|
controllerInstance = $controller(controller, locals);
|
||||||
$element.data(
|
|
||||||
'$' + directive.name + 'Controller',
|
// Directives with element transclusion and a controller need to attach controller
|
||||||
controllerInstance);
|
// to the comment node created by the compiler, but jQuery .data doesn't support
|
||||||
|
// attaching data to comment nodes so instead we set it directly on the element and
|
||||||
|
// remove it after we read it later.
|
||||||
|
if ($element[0].nodeType == 8) { // Transclusion comment node
|
||||||
|
$element[0].$$controller = controllerInstance;
|
||||||
|
} else {
|
||||||
|
$element.data('$' + directive.name + 'Controller', controllerInstance);
|
||||||
|
}
|
||||||
if (directive.controllerAs) {
|
if (directive.controllerAs) {
|
||||||
locals.$scope[directive.controllerAs] = controllerInstance;
|
locals.$scope[directive.controllerAs] = controllerInstance;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue