Angular JS Form: манипуляции с ng-опциями и сложными опциями

0

У меня некоторые проблемы с несколькими разными прямоугольниками.


Проблема №1

Первый - это поле, в котором перечислены физические местоположения, сгруппированные либо "В состоянии", либо "Вне состояния". Я их сгруппировал, и значение и метка заданы так, как я хочу, но я не могу получить сгруппированные опции для сортировки по алфавиту. Я попробовал orderBy: "имя" и другие решения, которые, похоже, работают для всех остальных.

Мой html выглядит так:

<select name="dealer" id="dealer" ng-model="warrantyReg.dealer" ng-options="dealer as dealer.selectLabel group by dealer.for for dealer in dealers track by dealer.selectValue | orderBy:'selectLabel'">

Несколько примеров из моего массива дилеров:

$scope.dealers = [
    {selectLabel:"Location A", selectValue:255, for:"In state"},
    {selectLabel:"Location C", selectValue:1, for:"In state"},
    {selectLabel:"Location B", selectValue:5, for:"In state"},
    {selectLabel:"Location Z", selectValue:25, for:"Out of state"},
    {selectLabel:"Location X", selectValue:55, for:"Out of state"},
    {selectLabel:"Location Y", selectValue:50, for:"Out of state"}
];

(Обратите внимание, что это заглушенная версия объектов, они содержат намного больше информации, чем я здесь показываю.)

Независимо от того, что я делаю, параметры никогда не сортируются с помощью selectLabel. Я также попробовал orderBy: "dealer.selectLabel", и он ничего не делает.

ОБНОВЛЕНИЕ Я забыл упомянуть, что $ scope.dealers строится с помощью углового.forEach() для данных, возвращаемых службой. Я прокручиваю каждый возвращаемый дилер и создаю selectLabel, объединяя ключи имени и местоположения, а затем вставляя это значение в массив $ scope.dealers.

Использование.sort() в $ scope.dealers ничего не делает. Однако, если я использую.sort() для данных, возвращенных из службы, прежде чем передавать их через угловое.forEach(), он сортирует их. Я не уверен, в чем разница, но это, по крайней мере, какое-то решение, и вот что я делаю сейчас.


Проблема №2

Я хочу, чтобы в поле выбора была опция "другой...", которая предоставляет текстовое поле, когда оно выбрано. В этой части у меня есть работа, но я не могу получить параметр "другой..." для отображения в нижней части списка элементов, если я сгруппирую все параметры вместе.

Например, у меня есть этот набор данных:

$scope.refs = [
    {name:'Friend'},
    {name:'Walk-in'},
    {name:'Yellow pages'},
    {name:'Field and Stream', type:'Magazines'},
    {name:'Parent', type:'Magazines'},
    {name:'Guns & Ammo', type:'Magazines'},
    {name:'other...'}
];

Используя этот пример, всегда появляется "другое..." между "Желтыми страницами" и заголовком группы "Журналы".

Кроме того, у меня есть другой набор данных, который имеет два набора сгруппированных элементов с опцией "другой...", который не сгруппирован, и отображает опцию "другой..." выше обеих групп.

Есть ли способ разместить только "другое..." в нижней части списка сгруппированными элементами?

ОБНОВЛЕНИЕ Поскольку кажется, что для этого нет решения, я просто сделаю опции static html вместо того, чтобы полагаться на ng-options для их создания. Затем я мог бы включить код в include, если это поле выбора, которое будет использоваться в нескольких местах.

  • 0
    Для проблемы № 2, вы не можете сделать пользовательский фильтр, который сортирует, используя «другие ...» всегда в прошлом?
  • 0
    Учитывая мою удачу с выпуском # 1, возможно, нет, но я попробую.
Теги:

1 ответ

0
Лучший ответ

Проблема №1

Почему бы не отсортировать значения в контроллере так:

$scope.dealers = [
    {selectLabel:"Location B", selectValue:255, for:"In state"},
    {selectLabel:"Location C", selectValue:1, for:"In state"},
    {selectLabel:"Location A", selectValue:5, for:"In state"},
    {selectLabel:"Location Z", selectValue:25, for:"Out of state"},
    {selectLabel:"Location X", selectValue:55, for:"Out of state"},
    {selectLabel:"Location Y", selectValue:50, for:"Out of state"}
].sort(function(a,b){ 
    return a.selectLabel.localeCompare(b.selectLabel); 
});

Проблема №2

Кажется, это невозможно. См. Этот ответ.

  • 0
    По какой-то причине это не работает. Я загружаю данные из службы, а затем просматриваю и устанавливаю selectLabel как конкат других ключей (имя и местоположение), прежде чем передать их в $ scope.dealers. После этого сортировка не работает. Тем не менее, если я сначала отсортирую данные, возвращенные службой, то обработаю их, чтобы собрать $ scope.dealers, и это сработает. Не уверен, в чем разница.

Ещё вопросы

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