如何在 运行 为特定指令设置函数之前 运行 影响所有相同类型指令的函数?
How to run a function that affects all directives of the same type before running a function for a specific directive?
我得到了一个显示小下拉菜单的菜单指令。不过,我对一件事有点迷茫,那就是如何确保一次只打开一个菜单。我想要 运行 所有菜单的 am.close
功能,然后 运行 我点击的菜单的 am.toggle
功能。
我该怎么做?
指令:
core.directive('amMenu', [function() {
return {
restrict: 'E',
scope: {
wrapper: '@',
host: '=',
options: '@'
},
templateUrl: './assets/angular/modules/core/directives/actions-menu/am-menu.html',
controller: 'AmMenuCtrl',
controllerAs: 'am',
link: function(scope, element, attrs) {}
};
}]);
控制器:
core.controller('AmMenuCtrl', [function() {
var am = this;
/--- some option arrays here ---/
am.toggle = function() {
am.isToggled = !am.isToggled;
};
am.close = function() {
am.isToggled = false;
};
}]);
模板:
<div class="am-menu-wrapper" click-outside on-outside="am.close" exceptions="['am-menu-wrapper']">
<span class="am-toggle am-icon" ng-click="am.toggle()">
<i class="icon icon-dots-horizontal"></i>
</span>
<ul class="am-menu" ng-class="{visible: am.isToggled}">
<li class="am-item">
<span class="pull-rights" ng-click="am.close()"><i class="icon icon-dots-horizontal"></i></span>
</li>
<li class="am-item" ng-repeat="option in am[options].options" ng-bind="option.label" ng-click="option.onClick(host, wrapper)"></li>
</ul>
</div>
我想到了两个解决方案:
我认为你可以使用一个服务来存储所有指令的引用,当其中一个被点击时,对每个指令调用 am.close
并调用 am.toggle
在点击的那个上。
不使用嵌套变量isToggled
来控制下拉列表的状态,你可以使用'document.querySelectorAll('[am-menu]');'获取所有指令,并 add/remove css class 控制 open/closed 状态
我得到了一个显示小下拉菜单的菜单指令。不过,我对一件事有点迷茫,那就是如何确保一次只打开一个菜单。我想要 运行 所有菜单的 am.close
功能,然后 运行 我点击的菜单的 am.toggle
功能。
我该怎么做?
指令:
core.directive('amMenu', [function() {
return {
restrict: 'E',
scope: {
wrapper: '@',
host: '=',
options: '@'
},
templateUrl: './assets/angular/modules/core/directives/actions-menu/am-menu.html',
controller: 'AmMenuCtrl',
controllerAs: 'am',
link: function(scope, element, attrs) {}
};
}]);
控制器:
core.controller('AmMenuCtrl', [function() {
var am = this;
/--- some option arrays here ---/
am.toggle = function() {
am.isToggled = !am.isToggled;
};
am.close = function() {
am.isToggled = false;
};
}]);
模板:
<div class="am-menu-wrapper" click-outside on-outside="am.close" exceptions="['am-menu-wrapper']">
<span class="am-toggle am-icon" ng-click="am.toggle()">
<i class="icon icon-dots-horizontal"></i>
</span>
<ul class="am-menu" ng-class="{visible: am.isToggled}">
<li class="am-item">
<span class="pull-rights" ng-click="am.close()"><i class="icon icon-dots-horizontal"></i></span>
</li>
<li class="am-item" ng-repeat="option in am[options].options" ng-bind="option.label" ng-click="option.onClick(host, wrapper)"></li>
</ul>
</div>
我想到了两个解决方案:
我认为你可以使用一个服务来存储所有指令的引用,当其中一个被点击时,对每个指令调用
am.close
并调用am.toggle
在点击的那个上。不使用嵌套变量
isToggled
来控制下拉列表的状态,你可以使用'document.querySelectorAll('[am-menu]');'获取所有指令,并 add/remove css class 控制 open/closed 状态