Просматривал все 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 скриншота
Снимок экрана 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>
Вам нужно установить 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/... ;)
Попробуйте очистить модификаторы. Переменные в вашем контроллере, удаляя неопределенные элементы из modifier.variations
$scope.modifier.variations = $scope.modifier.variations.filter(function(n){ return n != undefined });
Вам нужно ввести $scope
в ваш контроллер.