Я пытаюсь сделать директиву, которая должна удалить первый вариант выбора.
Я использую этот html для создания окна выбора:
<select remove-whitespace ng-model="user.encryption">
<option ng-repeat="r in selectButtons" title="{{r.text}}" ng-selected="$first" value="{{r.value}}">{{r.text}}</option>
</select>
Эта часть кода находится в моем контроллере, чтобы заполнить поле выбора в представлении:
$scope.selectButtons = [
{text: "Clear-Text", value: "no_encryption"},
{text: "MD5", value: "md5_encryption"},
{text: "SHA1", value: "sha1_encryption"},
];
Я использую это как свою директиву:
.directive("removeWhitespace", function () {
return{
require: 'ngModel',
link: function (scope, element, attributes, ngModel) {
console.log(element.context);
}
}
});
Когда я делаю console.log(element.context); в моей консоли браузера появится следующий контекст:
Однако я не могу удалить параметр со значением "? Undefined: undefined?"
Первый элемент (? Udefined: undefined?) Существует потому, что текущее значение ng-модели не соответствует ни одному из параметров. Он уйдет сам по себе, если вы сделаете что-то подобное в своем контроллере:
$scope.user.encryption="no_encryption"
Чтобы полностью ответить на вопрос, вот простая директива, которая удаляет первый вариант выбора, хотя я бы посоветовал не использовать ничего подобного, потому что было бы лучше использовать ng-options, возможно, в сочетании с фильтром
angular.module('app').directive('removeFirst',function(){
return{
link:function(scope,element) {
element.find('option')[0].remove();
},
}
})
Кажется, я нашел решение своего вопроса:
Чтобы правильно заполнить поле выбора, вам нужно использовать ng-options вместо ng-repeat.
В итоге я использовал следующее:
<select ng-model="selectButton"
ng-options="r.text for r in selectButtons">
</select>
Это будет заполнять selectbox без пробелов. И директива больше не нужна.