隨着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