我不能使用“要求”,因为我有一个指令,可以有许多不同的父母,我无法准确预测他们将是谁。我需要做的是在每个父节点中能够检索子指令的控制器或范围,并调用一个方法来禁用按钮。我有一个能够显示问题的傻瓜。
https://plnkr.co/edit/Od1mJZOq1ep54pj6k6ti?p=preview
.directive('parent', function($compile, $rootScope) {
return {
restrict: 'E',
scope: {},
templateUrl: 'parent.html',
link: postLinkFunction
};
function postLinkFunction(scope, element, attributes) {
var directive = element.find('child');
var directiveScope = directive.isolateScope();
console.log(directiveScope);
}
})
.directive('anotherParent', function() {
return {
restrict: 'E',
scope: {},
templateUrl: 'parent.html',
link: postLinkFunction
};
function postLinkFunction(scope, element, attributes) {
var directive = element.find('child');
var directiveScope = directive.isolateScope();
console.log(directiveScope);
}
})
.directive('child', function() {
return {
restrict: 'E',
scope: {},
controller: function($scope, $element) {
var vm = this;
$scope.isDisabled = false;
$scope.disableMenu = function () {
$scope.isDisabled = true;
};
$scope.number = 1;
},
templateUrl: 'child.html'
};
});
即使我已经填充了isolateScope,它也是空的,而且子指令必须有隔离范围不能与父级共享范围,并且正如我所说我不能使用require。从理论上讲,element.find方式很简单,但很容易实现,但我不能使它工作。感谢任何帮助,提前谢谢!
答案 0 :(得分:4)
在角度链接过程中,从上到下执行过程,因此在您创建之前尝试获取子范围,您可以通过向范围添加函数并在单击时执行它来解决此问题:
scope.click = function() {
var directive = element.find('child');
var directiveScope = directive.isolateScope();
console.log(directiveScope);
};
<div class="tabbable">
<div class="tab-content">
<child></child>
</div>
<button ng-click="click()">click</button>
</div>
答案 1 :(得分:1)