Опция Angular Empty (Динамический ввод)

0

Просматривал все Stackoverflow, и есть множество советов о том, как удалить "страшный" пустые (неопределенные) параметры в раскрывающемся списке выбора. Однако мне еще предстоит найти ответ, когда мой код выглядит так:

--ПОСМОТРЕТЬ--

<form class="simple-mods">
<fieldset ng-repeat="modifier in modifiers">
    <label for="{{ modifier.id }}">{{ modifier.title }}</label>
        <select name="" id="{{ modifier.id }}"  ng-model="mods[modifier.id]" name="modifier[{{ modifier.id }}]" ng-mod="{{ modifier.title }}">
           <option value="{{ variation.id }}" ng-repeat="variation in modifier.variations">{{ variation.title }}</option>
        </select>

</fieldset>

<fieldset>
    <button ng-click="addCart()" ng-if="!addStatus" class="btn btn-success"  translate>Add to cart</button>
    <button ng-if="addStatus" class="btn btn-warning" ng-bind-html="addStatus">{{ addStatus }}</button>
</fieldset>
</form>

- КОНТРОЛЛЕР -

.controller('ProductCtrl', function ($scope, $rootScope, moltin, $timeout, product) {

var productId  = product.id,
    qty = 1,
    mods = {};

$scope.product = product;
$scope.addStatus = null;
$scope.modifiers = product.modifiers;

});

Если кто-то может помочь, я буду очень благодарен.

@BETTY, похоже, не работает. Я приложил 2 скриншота

Снимок экрана 3

Снимок экрана 4 (значение теперь представляет собой строку)

@Бетти

<fieldset ng-repeat="modifier in modifiers" ng-init="mod[modifier.id] = modifier.variations[0].id">
    <label for="{{ modifier.id }}">{{ modifier.title }}</label>
        <select id="{{ modifier.id }}" ng-model="mods[modifier.id]" ng-options="variation.id as variation.title for variation in modifier.variations">
            <option></option>
        </select>
</fieldset>
Теги:

2 ответа

0

Вам нужно установить ng-model вправо (=> mods[modifier.id]), либо используя ng-init либо установив его в контроллер.

В этом решении используется ng-init который устанавливает значение по умолчанию для первого идентификатора варианта. Я также удалил все, что вам не нужно, и использовал ng-options (уменьшает некоторый HTML;)).

<fieldset ng-repeat="modifier in modifiers" ng-init="mods[modifier.id]=modifier.variations[0].id">
  <label for="{{ modifier.id }}">{{ modifier.title }}</label>
  <select id="{{ modifier.id }}" ng-model="mods[modifier.id]" ng-options="variation.id as variation.title for variation in modifier.variations">
    <option></option>
  </select>
</fieldset>

Я также рекомендую добавить пустой тег option, вот почему: ng-модель получает неправильное значение из раскрывающегося списка

И вам нужно $scope.mods = {}; в контроллере вместо var mods = {}; потому что вы используете mods в HTML!

Возможно, вам также нужно использовать track by variation.id чтобы можно было правильно выбрать выбранное значение (ng-model и значение опции). Я отвечал на подобный вопрос и track by с track by был ответ, см qaru.site/questions/10993081/... ;)

  • 0
    У Бетти были некоторые проблемы с этим. Я ответил с проблемами в оригинальном посте выше
  • 0
    Вы попробовали это так же, как я здесь?
Показать ещё 12 комментариев
0

Попробуйте очистить модификаторы. Переменные в вашем контроллере, удаляя неопределенные элементы из modifier.variations

$scope.modifier.variations = $scope.modifier.variations.filter(function(n){ return n != undefined }); 

Вам нужно ввести $scope в ваш контроллер.

  • 0
    К сожалению, это не сработало для меня. Но спасибо за быстрый ответ
  • 0
    @Richy Я добавил другой способ, попробуйте.
Показать ещё 5 комментариев

Ещё вопросы

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