Странное поведение в теге select / option in angular

0

Это мой фрагмент кода:

<select class="form-control" name="" id="" ng-model="offerId">
    <option value="">Choose</option>
    <option ng-repeat="offer in offers " value="{{ offer.id }}"
            ng-selected="offerId == offer.id">
        {{offer.supplier.name}}
        ({{offer.request.name}})
    </option>
</select>

Он работает по своему желанию. Проблема или странное поведение заключается в том, что, если я изменю ngModel (offerId) из других компонентов/триггеров, в списке будет добавлено новое значение свободного места; который ведет себя так же, как опция "Выбрать" по умолчанию, и когда из опции выбора/выбрана любая опция (включая параметр "Пусто"), опция "Пустое пространство" исчезает, а другие функциональные возможности такие же, ТОЛЬКО ОСТОРОЖНОЕ ПРОСТРАНСТВО ВЕРОЯТНО.

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

Это особенность?

Некоторые фрагменты кода:

$scope.clearAttachedFiles = function () {
$scope.attachedFiles = {uploads: null, links: null};
};
$scope.$watch('offerId', function (a, b) {
if ($scope.offerId) {
offerId = $scope.offerId;
}
if ((typeof a == 'undefined' || typeof a == 'null') && (typeof b == 'undefined' || typeof b == 'null')) {
return;
}
if (a === '') {
$scope.level = 'EVENT';
$scope.privateMessage = true;
$scope.offer = null;
}
else {
$scope.level = 'OFFER';
$scope.privateMessage = false;
angular.forEach($scope.offers, function (offer) {
if (offer.id == a) {
$scope.offer = offer;
}
});
}
$scope.getPaginatedActivities();
$scope.resetActivitiesList();
$scope.currentPage = 1;
});
  • 1
    «Я изменяю ngModel (offerId) из других компонентов / триггеров» Как вы меняете показывать код. Также покажите структуру массива предложений
  • 0
    Я изменяю модель из вызова метода в ngClick из другого компонента. Структура массива предложений JSON очень длинная, как я могу показать?
Теги:

1 ответ

0

Вы используете его неправильно, ng-options есть по какой-то причине.

Когда вы используете ng-repeat, вы добавляете наблюдателя для каждой опции в массиве, и производительность может быть очень плохой. Также значение value = {{}} будет иметь проблемы, потому что это не правильный способ сделать это, в зависимости от времени компиляции и других факторов выбор может принимать {{}} как значение вместо оцененного выражения. Вероятно, причина, по которой выбран пробел.

Используйте ngOptions, гибко и легко заставить его работать. Здесь документы: https://docs.angularjs.org/api/ng/directive/ngOptions

Задайте любой вопрос, связанный с этим!

  • 0
    Да, я использовал ngOptions, но логика, которая работала раньше, не работала. Так что я с моей текущей реализацией.
  • 0
    Поэтому измените логику, чтобы она работала, вы должны использовать ngOptions, просто вставьте код, и мы сможем заставить его работать!

Ещё вопросы

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