javascript - 如何修改此指令,以便一旦输入可见,除非单击 x,否则它不会被隐藏?

标签 javascript angularjs angularjs-directive

http://plnkr.co/edit/fXo21LnphHZ3qWnuEMFt?p=preview

现在,如果您单击输入框以外的任何地方,focusMe 指令 scope.$watch 将触发并将 showingTagSearchInput 变为 false。

这需要仅在单击关闭 x 按钮时发生。

标记

<div class="sidebar" ng-controller="sidebar">

  <div class="btn-search"
       ng-hide="showingTagSearchInput"
       ng-click="quickSearchTags()">Search</div>

  <div class="search-tags-input container-fluid" ng-show="showingTagSearchInput">
      <input type="text"
             focus-me="showingTagSearchInput"
             placeholder="search for a tag"
             ng-model="tagSearchInput"
             class="form-control">
      <div>close x</div>
  </div>
</div>

Controller 函数

// search button stuff:
function quickSearchTags() {
    vs.showingTagSearchInput = !vs.showingTagSearchInput;
}

function closeMe() {
    console.log('closeMe clicked');
    vs.showingTagSearchInput = false;
}

focusMe 指令:

.directive('focusMe', ['$timeout', '$parse', function($timeout, $parse) {
return {
    link: function(scope, element, attrs) {
        var model = $parse(attrs.focusMe);
        scope.$watch(model, function(value) {
            console.log('value ', value);
            console.log('element ', element);
            if (value === true) { 
                $timeout(function() {
                    element[0].focus(); 
                });
            }
        });
        element.bind('blur', function() {
            scope.$apply(model.assign(scope, false));
        })
    }
}
}])

最佳答案

focusMe 指令中删除模糊事件,该指令在模糊时隐藏 div。

而不是调用 ng-click 事件将 showingTagSearchInput 设置为 false & 元素将被隐藏。

标记

<input type="text"
       focus-me="showingTagSearchInput"
       placeholder="search for a tag"
       ng-model="tagSearchInput"
       class="form-control">
<div class="btn-close" ng-click="closeMe()">close x</div>

代码

$scope.hideInput = function(){
   $scope.showingTagSearchInput = false;
};

Demo Plunkr

关于javascript - 如何修改此指令,以便一旦输入可见,除非单击 x,否则它不会被隐藏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31125880/

相关文章:

javascript - 将 fadeIn 添加到我的导航栏时出现问题

javascript - 这段nodejs代码是循环引用吗?

html - AngularJS - 带有 ng-click 事件的网格中包含的按钮单击

javascript - Angularjs ng-disable 不适用于 anchor 标记

javascript - D3.js:如何查找按年和月分组的平均值?

angularjs - 如何刷新使用 AngularJS 中的 $resource 服务获取的本地数据

javascript - AngularJS 中的 ng-click、作用域和嵌套指令

angularjs - 通过单击项目在表行之间添加新元素

javascript - 如何在 Angular JS 中使用指令。在我的情况下不起作用,为什么?

javascript - 操纵输入值