ng-опции с ключами разных типов

0

Я использую AngularJS и TypeScript. Я хочу подключить два элемента select через общую переменную модели. В контроллере у меня есть два массива с ключом, один с номерами в виде ключей, а другой с строками в виде ключей, например:

foo: IKeyValuePair[] = [
             {key: 1, value: "koko"},
             {key: 2, value: "hoho"},
             {key: 3, value: "jojo"}
    ];
bar: IKeyValuePair[] = [
             {key: "1", value: "kaka"},
             {key: "2", value: "haha"},
             {key: "3", value: "jaja"}
    ];

В представлении у меня есть два выбора:

    Foo-selector: <select ng-model="vm.baz" 
        ng-options="f.key as f.value for f in vm.foo"></select>

    Bar-selector: <select ng-model="vm.baz" 
        ng-options="f.key as f.value for f in vm.bar"></select>

Я хочу, чтобы они были подключены через модель vm.baz, но проблема в том, что ключи от foo являются числами, а ключом для строки являются строки. Есть ли способ связать их в любом случае? (Я не могу изменять типы ключей в любом из массивов).

Вот скрипка: http://fiddlesalad.com/typescript/ngoptions-selected-by-model

  • 0
    Примечание: ссылки на объекты разные ..will нужно track by с track by . Разве вы не можете просто скопировать и нормализовать копии для использования в параметрах ng-options ?
Теги:
drop-down-menu
ng-options

1 ответ

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

Вы можете преобразовать один из ключей в другой тип.

Например, вы можете преобразовать число в строку.

Поскольку вы можете использовать выражения как значения или ключи, все, что вам действительно нужно сделать, это сделать строку. Самое простое - добавить пустую строку в конец.

Foo-selector:
<select ng-model="vm.baz" ng-options="f.key + '' as f.value for f in vm.foo">

Если вы хотите сделать оба ключа числом, вам нужно будет сделать метод в контроллере, чтобы преобразовать строку в число, потому что parseInt недоступен в угловых выражениях.

контроллер:

    normalize(value): number {
      return parseInt(value, 10);
    }

Шаблон:

Bar-selector:
<select ng-model="vm.baz" ng-options="vm.normalize(f.key) as f.value for f in vm.bar">
  • 0
    Оба метода работают нормально. Именно то, что я искал! Спасибо!

Ещё вопросы

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