автофокусировка не работает при использовании с ng-include

#angularjs #autofocus #angularjs-ng-include

#angularjs #автофокусировка #angularjs-ng-include

Вопрос:

Я хочу установить фокус на одно из полей ввода в частичном представлении, например.

и включая это с помощью

Это работает нормально при загрузке страницы в первый раз. но когда я меняю части, автофокусировка не работает.

Я считаю, что это из-за работы автофокусировки при загрузке страницы, как это может заставить работать здесь

Комментарии:

1. Есть ли у ваших партиалов свои собственные контроллеры? Или это просто разметка?

2. В моем случае это только разметка

3. Вы проверили решение, которое я предоставил? Есть отзывы по этому поводу?

Ответ №1:

Я не уверен, как решить проблему перезагрузки страницы, но я думаю, что мы можем выработать другое решение здесь. Однажды я написал небольшую директиву, чтобы условно установить фокус на элементе ввода.

Вот код:

 function SetFocusDirective($parse) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            var model = $parse(attrs.setFocus);
            scope.$watch(model, function (value) {
                if (value === true) {
                    element[0].focus();
                }
            });
            element.bind('blur', function () {
                scope.$apply(model.assign(scope, false));
            });
        }
    };
}

SetFocusDirective.$inject = ['$parse'];

app.directive('setFocus', SetFocusDirective);
  

И вот как вы можете это использовать:

 <input type="text" ng-model="firstName" set-focus="autofocusFirstName">
  

Где autofocusFirstName — это $scope переменная, которая должна иметь логическое значение.

Таким образом, каждый раз, когда загружаются ваши части, все директивы внутри них будут связаны и выполнять свою работу. Если вы в конечном итоге используете эту директиву, вы должны быть в состоянии достичь того, чего вы хотите.

Комментарии:

1. Viadik Я не пробовал это, поскольку я делаю то же самое с контроллера, устанавливая фокус вручную, все равно ваш способ лучше моего..