использовать директиву используя ng-if?

0

Я хочу запустить кнопку, чтобы выполнить ng-show панели ввода, а затем сосредоточиться на ней. Чтобы избежать осложнений, я нашел эту простую директиву для фокусировки.

app.directive('autoFocus', function($timeout) {
    return {
        restrict: 'AC',
        link: function(_scope, _element) {
            $timeout(function(){
                _element[0].focus();
            }, 0);
        }
    };
});

<input auto-focus type="text"/>

Но теперь я не знаю, как использовать его при появлении.

Теги:

1 ответ

1
Лучший ответ

Использование ng-if на входе поможет решить вашу проблему. Потому что, если вы используете ng-show, это означает, что элемент все еще является частью страницы, но не отображается. Но ng-if создает новый элемент, когда его условие становится истинным. Запустите фрагмент и проверьте сами.

var app = angular.module("myApp",[]);
app.directive('autoFocus', function($timeout) {
    return {
        restrict: 'AC',
        link: function(_scope, _element) {
            $timeout(function(){
                _element[0].focus();
            }, 0);
        }
    };
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">
<button ng-click="showInput = true;" >Show Input</button>
<button ng-click="showInput = false;" >Hide Input</button>  
<input auto-focus type="text" ng-if="showInput">
</div>

Таким образом, когда появляется кнопка ввода ввода, вы можете увидеть, набрав, что она сосредоточена на этом.
Цитата из документации ngif

Директива ngIf удаляет или воссоздает часть дерева DOM на основе выражения {expression}. Если выражение, присвоенное ngIf, оценивается как ложное значение, тогда элемент удаляется из DOM, иначе клон элемента снова вводится в DOM.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню