2014-11-10 4 views
0

У меня есть HTML, как:добавить JQuery в angularjs контроллер

<select id="example"> 
<option value="1">Short</option> 
<option value="2">Oh dear, this option has really long text :(</option> 

Я хочу добавить следующее JQuery в угловом контроллер, как я могу это сделать?

var maxLength = 15; 
$('#example > option').text(function(i, text) { 
    if (text.length > maxLength) { 
     return text.substr(0, maxLength) + '...'; 
    } 
}); 
+1

звучит как работа для директивы! https://docs.angularjs.org/guide/directive. Тем не менее, вам действительно стоит подумать о том, чтобы принять угловой способ делать что-то, а не возвращаться к jquery, если нет другого выбора. Существует причина, что угловые функции без jquery. – Claies

ответ

1

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

Вместо этого измените на объявление списка параметров в качестве свойства области в контроллере и измените текст там, чтобы усечь его до требуемой длины.

например.

Markup:

код
<select id="example" ng-options="option.value as option.text for option in options"> 

Контроллер:

var maxLength = 15; 
$scope.options = ['Short', 'Oh dear, this option has really long text :('].map(function (text, i) { 
    return { 
    value: i + 1, 
    text: text.length <= maxLength ? text : text.substring(0, maxLength) + '...' 
    }; 
}); 
+0

Спасибо. Я действительно новый для angular.How можно заменить ['Short', 'О, дорогой, этот вариант имеет действительно длинный текст :('], чтобы динамически передавать значение в параметрах? Потому что я не могу его правильно записать? –

+0

Я не знаю. Это зависит от того, откуда вы получаете свои варианты. Вместо жестко заданного массива, который я использовал, просто поставьте код контроллера, который я упомянул везде, где у вас есть доступ к массиву строк, которые вы хотите отобразить. – GregL

Смежные вопросы