(directiveName, require, $element, elementControllers)
| 6488 | |
| 6489 | |
| 6490 | function getControllers(directiveName, require, $element, elementControllers) { |
| 6491 | var value, retrievalMethod = 'data', optional = false; |
| 6492 | if (isString(require)) { |
| 6493 | while((value = require.charAt(0)) == '^' || value == '?') { |
| 6494 | require = require.substr(1); |
| 6495 | if (value == '^') { |
| 6496 | retrievalMethod = 'inheritedData'; |
| 6497 | } |
| 6498 | optional = optional || value == '?'; |
| 6499 | } |
| 6500 | value = null; |
| 6501 | |
| 6502 | if (elementControllers && retrievalMethod === 'data') { |
| 6503 | value = elementControllers[require]; |
| 6504 | } |
| 6505 | value = value || $element[retrievalMethod]('$' + require + 'Controller'); |
| 6506 | |
| 6507 | if (!value && !optional) { |
| 6508 | throw $compileMinErr('ctreq', |
| 6509 | "Controller '{0}', required by directive '{1}', can't be found!", |
| 6510 | require, directiveName); |
| 6511 | } |
| 6512 | return value; |
| 6513 | } else if (isArray(require)) { |
| 6514 | value = []; |
| 6515 | forEach(require, function(require) { |
| 6516 | value.push(getControllers(directiveName, require, $element, elementControllers)); |
| 6517 | }); |
| 6518 | } |
| 6519 | return value; |
| 6520 | } |
| 6521 | |
| 6522 | |
| 6523 | function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { |
no test coverage detected