2015-01-28 4 views
0

У меня есть простое текстовое поле ввода в моем угловом приложении, которое заполняется значением по умолчанию. Я хочу предварительно выделить текст при загрузке страницы.Angularjs: Как предварительно выбрать поле ввода текста при загрузке страницы?

Поле ввода:

<input type="text" ng-model="city" class="form-control" select-on-load /> 

Директива:

weatherApp.directive('selectOnLoad', function() { 
// Linker function 
return function (scope, element, attrs) { 
    element.bind('load', function() { 
     this.select(); 
    }); 
}; 

});

Но ничего не происходит.

+0

Вы пытались заменить 'this.select()' на 'element.select()' или '$ (this) .select()'? –

+1

Я попробовал элемент.select(). И я не хочу использовать jQuery, чтобы быть честным, но он тоже не работает. – KiwiJuicer

+0

Не уверен, что я вас понимаю, но вы можете просто использовать автофокус для предварительного выбора этого поля user3811714

ответ

0

Ответы на вопросы this question свидетельствуют о том, что для элементов ввода нет load. Однако, может быть, вы могли бы прикрепить ручку после view content has loaded?

$scope.$on('$viewContentLoaded', function(){ 
    // Set a flag 
    }); 

Это не так просто, как директива, но это самая простая альтернатива моим знаниям. Событие устанавливает флаг, элемент использует ng-focus в зависимости от этого флага, и ваша исходная директива может быть обновлена ​​для прослушивания фокуса, а не загрузки.


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

+0

Я даже не знаю, как получить доступ к элементам DOM через контроллер, но это именно то, чего AngularJS пытается избежать. Я думал, что любое взаимодействие с DOM должно осуществляться через директивы. – KiwiJuicer

+0

Это немного грязно, но подумайте об использовании 'ng-focus'. Имейте переменную контроллера, 'viewIsLoaded', которая обновляется вышеупомянутым обработчиком. Затем, по вашему мнению, используйте 'ng-focus =" viewIsLoaded ", чтобы сфокусировать поле. Возможно, есть способ избежать этого: '' ng-focus' непосредственно слушать '$ viewContentLoaded', но я пока не знаю. Я кое-что прочитаю. – Tom

+0

Изменен мой комментарий - я имел в виду «ng-focus». Затем ваш первоначальный обработчик прослушивает фокус, а не нагрузку, который является доступным обработчиком для ввода. – Tom

-1

Попробуйте это.

function selectOnLoadDirective() { 
    return { 
    link: function(scope, elem) { 
     elem.focus().select(); 
    } 
    }; 
} 
+0

С функцией selectOnLoadDirective() {} вы имеете в виду директиву, которую я создал правильно? Если нет, куда бы вы положили эту функцию? – KiwiJuicer

+0

Конечно. Просто скопируйте 'elem.focus(). Sleect();' в вашу функцию связи. Это все. – Miraage

+0

Пожалуйста, попробуйте сами, это не сработает. – KiwiJuicer