我正在努力为折叠/扩展指令寻找最佳解决方案,其行为类似于手风琴,即。页面上只有一个折叠/展开指令必须一次打开。
最好的方法是什么,并获得扩展指令,告诉其他指令崩溃?我可以使用隔离范围,父控制器,广播事件吗?基本上我在指导间沟通方面遇到了困难。
我知道有手风琴指令可用,但我想自己学习构建指令。感谢。
答案 0 :(得分:1)
我最终使用来自父控制器的$ broadcast。 expanded指令要求父控制器广播一个collapseChange事件,所有指令都会监听它。
父控制器
$scope.broadcastCollapseChange = function (id) {
$scope.$broadcast('collapseChange', { 'id': id});
};
指令
scope.collapsed = true;
var onCollapseChange = function (v) {
if (scope.collapsed == false)
scope.$parent.broadcastCollapseChange(scope.$id);
}
scope.$watch('collapsed', onCollapseChange);
scope.$on('collapseChange', function (event, args) {
if (scope.collapsed == false && args.id != scope.$id)
scope.collapsed = true;
});
目前我必须在指令中使用$ parent来获取父控制器,这不是很优雅。有什么方法可以解决这个问题吗?