随着AngularJS指令,如果指令c
有父标签a
,
我喜欢这个angularjs指令要求A或B
require: '^a'
但是,如果c
要求父标记a
或b
我试图与ctrls监视在链接功能,但没有运气。
require: ['?a', '?b']
我试过,但有错误
require: '?(a|b)'
什么语法时,指令要求a
或b
?
随着AngularJS指令,如果指令c
有父标签a
,
我喜欢这个angularjs指令要求A或B
require: '^a'
但是,如果c
要求父标记a
或b
我试图与ctrls监视在链接功能,但没有运气。
require: ['?a', '?b']
我试过,但有错误
require: '?(a|b)'
什么语法时,指令要求a
或b
?
您应该能够使用
require: ['?^a', '?^b']
抓住一些家长都是可选的控制器。这将返回一个控制器数组,如果它们不存在,则返回null。您需要检查是否有一个控制器已经提供。
取决于你为什么需要这一点,它可能是更好的给双方的父母的指令中的相同的控制器名称
,然后用
require: '^myParent'
在
要求它非选择性儿童。
基于Angular源代码,无法在require
属性中执行此操作。 Angular只希望以下两种选择之一:
因此,你可以得到最fanciest将是一些必需的父控制器和一些可选的父控制器的混合。
//AngularJS 1.2
function getControllers(require, $element) {
var value, retrievalMethod = 'data', optional = false;
if (isString(require)) {
while((value = require.charAt(0)) == '^' || value == '?') {
require = require.substr(1);
if (value == '^') {
retrievalMethod = 'inheritedData';
}
optional = optional || value == '?';
}
value = $element[retrievalMethod]('$' + require + 'Controller');
...
if (!value && !optional) {
throw $compileMinErr('ctreq',
"Controller '{0}', required by directive '{1}', can't be found!",
require, directiveName);
}
return value;
} else if (isArray(require)) {
value = [];
forEach(require, function(require) {
value.push(getControllers(require, $element));
});
}
return value;
}
Docs are [here](http://docs.angularjs.org/api/ng.$compile) – Andyrooger