2013-09-22 2 views
1

Я в настоящее время имею следующий выбор:Использование свойств объекта в выберите

<select ng-model="current_event" 
     ng-options="event.event_id for event in current_level.events.event" 
     ng-change="currentEventChanged()"> 
</select> 

current_level.events.event представляет собой массив объектов, выглядит следующим образом:

[ 
    { 
     "event_id": 0, 
     "event_type": { 
      "collision": { 
       "object_id1": 0, 
       "object_id2": 1, 
       "allow_overlap": "no" 
      } 
     } 
    }, 
    { 
     "event_id": 1, 
     "event_type": { 
      "player_input": { 
       "object_id": 0, 
       "level_id": 0, 
       "allow_overlap": "no" 
      } 
     } 
    } 
] 

Отборными работает отлично, но текст для каждого вариант - это только event_id, например «0» или «1». Я хочу, чтобы текст для элемента был фактически event_type (с символами подчеркивания, преобразованными в пробелы), например. «столкновение» или «вход игрока». Возможно ли это в AngularJS?

+1

Вы можете изменить JSON, чтобы сделать player_input и столкновения значений вместо имен свойств? Вы также можете переместить форматирование на сервер. –

+0

Что-то вроде { "event_id": 0, "дисплей": "Столкновение", "event_type": { "столкновение": { "object_id1": 0, "object_id2": 1, "allow_overlap" : "no" } } } –

ответ

3

Вы используете event.event_id, так что в поведении AngularJS нет ничего плохого. Вы должны просто положить label в ng-options от <select> (см. documentation).

Однако перед тем, как получить правильную метку, вам нужно вызвать функцию, так как то, что вы хотите, довольно сложно.

$scope.getLabel = function (eventType) 
{ 
    var firstKey = null; 
    angular.forEach(eventType, function (value, key) 
    { 
     if (firstKey === null) 
     { 
      firstKey = key; 
     } 
    }); 

    return firstKey.replace('_', ' ', 'g'); 
}; 
<select 
    ng-model="current_event" 
    ng-options="event.event_id as getLabel(event.event_type) for event in current_level.events.event" 
    ng-change="currentEventChanged()" 
> 
</select> 

jsFiddle

+0

Это прекрасно работает, спасибо! – Jordan

Смежные вопросы