(directiveName, require, $element, elementControllers)
| 6516 | |
| 6517 | |
| 6518 | function getControllers(directiveName, require, $element, elementControllers) { |
| 6519 | var value, retrievalMethod = 'data', optional = false; |
| 6520 | if (isString(require)) { |
| 6521 | while((value = require.charAt(0)) == '^' || value == '?') { |
| 6522 | require = require.substr(1); |
| 6523 | if (value == '^') { |
| 6524 | retrievalMethod = 'inheritedData'; |
| 6525 | } |
| 6526 | optional = optional || value == '?'; |
| 6527 | } |
| 6528 | value = null; |
| 6529 | |
| 6530 | if (elementControllers && retrievalMethod === 'data') { |
| 6531 | value = elementControllers[require]; |
| 6532 | } |
| 6533 | value = value || $element[retrievalMethod]('$' + require + 'Controller'); |
| 6534 | |
| 6535 | if (!value && !optional) { |
| 6536 | throw $compileMinErr('ctreq', |
| 6537 | "Controller '{0}', required by directive '{1}', can't be found!", |
| 6538 | require, directiveName); |
| 6539 | } |
| 6540 | return value; |
| 6541 | } else if (isArray(require)) { |
| 6542 | value = []; |
| 6543 | forEach(require, function(require) { |
| 6544 | value.push(getControllers(directiveName, require, $element, elementControllers)); |
| 6545 | }); |
| 6546 | } |
| 6547 | return value; |
| 6548 | } |
| 6549 | |
| 6550 | |
| 6551 | function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { |
no test coverage detected