Как избежать использования нескольких указателей «ng-repeat» в Angular при возврате разделенного массива?

0

Я заинтересован в создании формы с определенной функцией. Форма будет иметь несколько критериев. Когда будет выполнен критерий, будет отображаться соответствующая цена. В этом случае пользователь имеет возможность выбирать наборы дней, а затем раз. Я ударил камень преткновения в том, что я могу фильтровать время по диапазону дат, но это возвращает массив ("['4:55 pm-5:25',..]). Мне нужен этот массив, который нужно разделить и использовать для нового набора значений параметров. Ниже приведен пример примера изображения. Кроме того, я пытаюсь избежать использования одного ng-repeat внутри другого ng-repeat, поскольку это неприменимо к типу формы выбора. вы пробовали использовать другую функцию и без необходимости использовали ng-repeat = "time in times.times".

Изображение 174551

JS:

$scope.times = [
    {'day': 'Monday & Wednesday', 'dates': ['8/10-8/31', '9/2 - 9/30', '10/5- 10-28'], 'times': ['4:55pm - 5:25pm', '5:40pm - 6:10pm', '6:20pm - 6:50pm'], 'price': '46'},
    {'day': 'Tuesday & Thursday', 'dates': ['8/11-8/27'], 'times':['4:55pm - 5:25pm', '5:40pm - 6:10pm', '6:20pm - 6:50pm'], 'price': '39'},
    {'day': 'Tuesday & Thursday', 'dates': ['9/1-9/29', '10/1-10/29'], 'times':['4:55pm - 5:25pm', '5:40pm - 6:10pm', '6:20pm - 6:50pm'], 'price': '59'},
    {'day': 'Saturday', 'dates': ['9/12 - 11/21 No Class Oct 31'], 'times':['11:00am - 11:30am', '11:35am-12:00pm'], 'price': '65'}
]; 

$scope.concat = function()
{
    var concat = [];
    var fullDates = []
    for (var z = 0; z<= top.length - 1; z ++)
    {
        var dates = top[z].dates;
        var day = top[z].day; 

        //return dates;

        for(var i = 0; i<=dates.length - 1; i++)
         {
            //concat.push(day.dates[i]);
            concat.push(day + ' ' + dates[i]);
            fullDates.push(dates[i])            
         }
        $scope.fullDates = fullDates;

    }
    return concat; 
};

HTML:

<select name="days" id="#preschool" ng-model="selectedgroup">
        <option ng-repeat="days in concat() track by $index" value="{{fullDates[$index]}}">
        {{days}}
        </option>
    </select>
    Select A Time:
    <select name="times" id="times" ng-model="selectedTime">
    <option ng-repeat="time in times| filter: {dates: selectedgroup}" value="{{$index}}">
        {{time.times}}
    </option>
    </select>
  • 0
    Что вы подразумеваете под «неприменимо к типу формы select»? Для параметров в <select> вы должны использовать ng-options .
  • 0
    @muenchdo Я использовал ng-options, но это не помогает мне идти дальше. Я установил его как ng-options = "time.times как time.times для time in times", и это не позволит мне перебирать каждый массив внутри массива объекта.
Теги:
arrays

1 ответ

0

Я обнаружил, что вы также можете добавить ключ в новый объект, который вы создаете (с помощью функции concat), передавая объект с индексом значения свойства. Таким образом, вам не нужно беспокоиться о переписывании данных JSON. Затем вы можете использовать этот новый индекс с датами для выбора конкретного объекта.

HTML:

<select name="days" id="#preschool" ng-model="selectedgroup">
        <option ng-repeat="days in concat() track by $index" value="{{days.index}}">
        {{days.day}}
        </option>
    </select>
    Select A Time:
    <select name="times2">
        <option value="" ng-repeat="time in times[selectedgroup].times">
            {{time}}
        </option>

JS:

$scope.concat = function()
{
    var concat = [];
    var fullDates = []
    for (var z = 0; z<= top.length - 1; z ++)
    {
        var dates = top[z].dates;
        var day = top[z].day; 
        //return dates;
        for(var i = 0; i<=dates.length - 1; i++)
         {
            concat.push({'day': day + ' ' + dates[i] , 'index':z}); 
         } 
    }
    return concat; 
};
});

Ещё вопросы

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