从父指令角度调用指令函数
angular call directive function from parent directive
我有两个指令,一个指令是带内容的工具提示,我在html的上层有另一个指令,它可以查看我是否将鼠标悬停在该元素上以打开工具提示,现在我希望这个父指令在悬停在应用它的元素上时,调用子指令中的函数,它将检查工具提示是否有空间向上或从其他方面打开到底部。
到目前为止,我试过这个
.directive('upDown', function() {
return function(scope, elem) {
elem.bind('mouseenter', function() {
scope.$broadcast('setPos');
});
};
})
这是父指令,用于查看我是否将鼠标悬停在某个元素上并尝试向子指令发送广播。
.directive('contentTooltip', function($window) {
return {
restrict: 'C',
require: '^updown',
link: function(scope, elem) {
var calculatePos = function() {
var scrollTop = this.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
var windowHeight = $window.innerHeight;
var elementOffset = elem.offset().top;
var elementHeight = elem[0].offsetHeight;
console.log('scrollTop = ' + scrollTop + ' & windowHeight = ' + windowHeight + ' & elementOffset = ' + elementOffset + ' & elementHeight = ' + elementHeight);
if (scrollTop + windowHeight < elementOffset + elementHeight) {
elem.addClass('icon-bottom');
}
else {
elem.removeClass('icon-bottom');
}
};
scope.$on('setPos', function() {
alert('abc');
});
}
};
})
这是我想接收广播的子指令,但它不起作用:(
是否有其他方法可以从父指令访问子指令?
提前谢谢你,丹尼尔。
您始终可以通过对angular中任何元素的DOM引用来访问该元素的作用域。在你的情况下,试试这个,
angular.element(".content-tooltip").scope();
实现这一点的最佳方法是通过指令控制器。参见文档:
创建与通信的指令
最干净的方法是使用控制器。这里有一个很好的解释:
https://egghead.io/lessons/angularjs-directive-communication
相关文章:
- 如何从 AngularJS 指令调用 Android 方法
- Angularjs指令调用控制器函数
- 从自定义指令调用角度路由
- 如何在angular js中从指令调用控制器函数
- Angularjs将函数从控制器传递到指令(或从指令调用控制器函数)-带参数
- 从指令调用控制器函数(使用从指令传递的参数)
- ng 类指令调用执行两次
- 从子指令调用指令函数不起作用
- 从指令调用角度控制器函数
- AngularJS 从$stateProvider设置的控制器上的指令调用函数
- 如何从带有复选框的 AngularJS 指令调用函数,当它被选中时
- Angular JS:从指令调用父控制器方法
- 角度ng-repeat不更新,当使用jQuery内部指令调用Angular 方法时
- 递归自定义树视图 angularjs 指令调用 ng 单击两次
- 自定义指令调用$scope函数会导致$rootScope:infdig
- ngTagInput在通过指令调用时给出了一个javascript控制台错误
- 从$rootScope-AngularJS中的指令调用函数
- 从指令调用父作用域函数
- 从另一个指令调用指令
- 如何从从指令调用的函数中调用函数