Angularjs 在输入模糊上触发功能,除非单击某些链接

Angularjs 在输入模糊上触发功能,除非单击某些链接,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我似乎不明白这其中的逻辑,希望有人能给我一些建议 我正在创建一个combobox指令,它简化为: <div class="combobox" ng-click="$event.stopPropagation()"> <input type="text" ng-model="search.value" placeholder="System" ng-class="{ resultsOpen: showDropdown }" ng-change="revealDropdow

我似乎不明白这其中的逻辑,希望有人能给我一些建议

我正在创建一个combobox指令,它简化为:

<div class="combobox" ng-click="$event.stopPropagation()">
    <input type="text" ng-model="search.value" placeholder="System" ng-class="{ resultsOpen: showDropdown }" ng-change="revealDropdown()" ng-focus="revealDropdown()" ng-blur="hideDropdown()">
    <a class="dropdown" ng-click="toggleDropdown($event)"></a>
    <div class="results" ng-show="showDropdown">
        <a ng-repeat="set in data | filter:search" ng-click="setBox($event, set)" ng-bind-html="set.value"></a>
</div>
问题在30分钟的摆弄后变得很明显,当您单击选项中的链接时,会触发模糊,导致链接集在链接单击功能触发之前关闭

我能想到的唯一一件事就是创建一个小的超时,大约在200毫秒后,如果点击,取消设置超时,但这绝对是一种很有技巧的方法。我想知道是否有人有更合乎逻辑的方法


JSFIDLE(尽管我不确定设置是否正确):

使用
ng鼠标向下
而不是
ng点击


谢谢!这是非常有用的信息知道!
link: function (scope, element, attrs) {
    scope.showDropdown = false;
    $combobox = element.children('.combobox');
    $combobox.children('.results').css({ 'top': $combobox.outerHeight(), 'width': $combobox.outerWidth() });
    $combobox.children('.dropdown').css('height', $combobox.outerHeight());

    scope.toggleDropdown = function ($event) {
        $event.stopPropagation();
        scope.showDropdown = scope.showDropdown?false:true;
    };
    scope.revealDropdown = function () {
        if (isNaN(scope.search) || scope.search.length == 0 || $filter('filter')(scope.data, scope.search).length) 
            scope.showDropdown = true;
        else 
            scope.showDropdown = false;
    };
    scope.hideDropdown = function () {
        scope.showDropdown = false;
    };
    $('html').click(function () {
        scope.hideDropdown();
        scope.$apply();
    });

    scope.setBox = function ($event, set) {
        console.log(set);
        scope.search = set;
    };
}