ドロップダウン リスト ディレクティブを作成しようとしています。マウスがドロップダウン ヘッダーの上に置かれているとき、またはドロップダウン リストが開いているときに下向き矢印が表示され、それ以外の場合は消えます。
私はこれを行うことに成功しましたが、要素を選択したり、ヘッダーリストを再度押したりしてドロップダウンリストを閉じた場合、矢印は消えません。
(IE 1 つのリストを開いて、最初のリストを閉じずに別のリストを開くよりも、最初のリストの矢印が消えていない場合)
JsFiddle - http://jsfiddle.net/rpg2kill/uS4Bs/
コード:
var myApp = angular.module('myApp', ['ui.bootstrap']);
function MyCtrl($scope) {
$scope.supportedList= ['Option1', 'Option2', 'Option3', 'Option4'];
$scope.selectedItem = 'Option1';
}
myApp.directive('dropDown',
function () {
return {
restrict: 'E',
replace: false,
scope: {
supportedList:'=',
selectedItem:'='
},
template:
'<div ng-mouseenter="onMouseEntered()" ng-mouseleave="onMouseLeft()">' +
'<a class="dropdown-toggle" data-toggle="dropdown" href="" ng-click="onMouseClicked()" >' +
'<img ng-style="{\'visibility\': dropDownIconVisibility}" src="http://png.findicons.com/files/icons/2222/gloss_basic/16/arrow_down.png"> </img>' + //Arrow down Icon
'<span>{{selectedItem}}</span>' +
'</a>' +
'<ul class="dropdown-menu">' +
'<li ng-repeat="item in supportedList" ng-click="onSelectedItem(item)">' +
'{{item}}' +
'</li>' +
'</ul>' +
'</div>'
,
link: function(scope, element, attrs) {
scope.dropDownIconVisibility = "hidden";
scope.dropDownIconVisibilityLocked = false;
scope.onSelectedItem = function(item) {
scope.dropDownIconVisibilityLocked = false;
scope.selectedItem = item ;
};
scope.onMouseEntered = function()
{
scope.dropDownIconVisibility = "visible";
};
scope.onMouseLeft = function()
{
if (scope.dropDownIconVisibilityLocked)
return;
scope.dropDownIconVisibility = "hidden";
};
scope.onMouseClicked = function()
{
scope.dropDownIconVisibility = "visible";
scope.dropDownIconVisibilityLocked = !scope.dropDownIconVisibilityLocked;
};
}
};
})
コードは少し醜いです。より良い解決策は、マウスがホバリングしている場合、またはリストが開いている場合に矢印を表示することですが、角度をドロップダウン リストの状態にバインドする方法がわかりません。
angularをTwitterブートストラップのドロップダウンイベントにバインドする方法はありますか? または、この問題を解決するためのより良い方法はありますか?