我遇到了问题AngularJS处理指令的transcluded作用域的方式。据了解,transclude的范围是其指令范围的一个兄弟姐妹,而不是一个孩子。 Shown here角度transcluded指令作为兄弟范围不符合儿童指令的要求:“^父”设置
不过,我有一个孩子指令的情况:
<div price-chart>
<div volume-indicator></div>
</div>
的priceChart指令有一个transclude: true, template: "<div ng-transclude></div>"
但(transcluded)volumeIndicator需要父母是priceChart,而不是兄弟。
function VolumeIndicatorDirective() {
return {
restrict: "EA",
controller: "VolumeIndicatorController",
require: ["^priceChart", "volumeIndicator"],
compile: function compile(element, attrs, transclude) {
return {
pre: function preLink($scope, element, attrs, controllers) {
var priceChart = controllers[0];
var volumeIndicator = controllers[1];
priceChart.addIndicator(volumeIndicator);
},
post: angular.noop
};
}
};
}
如果有角的控制器,一个兄弟选择,将解决这一问题:
require: ["+priceChart", "volumeIndicator"],
然而,这并不存在,所以我能做些什么?
根据来自zeroflagL的评论,我尝试使用element.parent().controller()
来访问指令控制器,但它似乎专门获取了最接近的ng-controller
并跳过了指令控制器。
从文档:“通过搜索ELEMENT的父级找到所需的控制器” - 范围无关紧要。 – zeroflagL
感谢您的评论。我试过这个,它似乎跳过了指令控制器并得到最近的父'ng-controller'。试过element.controller()和每个可能的父项(parent(),parent()。parent()等)。更新OP – parliament
我的意思是说你的代码应该可以工作。你会得到什么错误?至于'element.parent().controller()' - 它必须是'element.parent().control('priceChart')'。 – zeroflagL