Использование обозначения квадратной скобки JSON в пределах угловых директив для доступа к значениям

У меня есть объект JSON, который содержит пространства имен в некоторых его ключах в виде namespace:key. Из-за этого мне нужно использовать нотацию квадратной скобки вместо точечной нотации для доступа к ее значению.

Я пытаюсь использовать некоторые угловые директивы/фильтры для работы с данными, в этом примере я буду использовать filter, но проблема кажется трансверсальной для использования нотации скобок внутри директив.

Вот мой пример:

ng-repeat с фильтром в HTML:

<ul>
 <li ng-repeat="item in items | filter:{properties['namespace:status']}">
 {{item.name}}
 </li>
</ul>

$ scope.items:

{
 "properties":{
 "namespace:status":"A",
 "name":"Potato",
 // ...
 },
 // ...
},
{
 "properties":{
 "namespace:status":"B",
 "name":"Carrot",
 // ...
 },
 // ...
},
{
 "properties":{
 // Note that it doesn't contain the namespace attribute
 "name":"Bean",
 // ...
 },
 // ...
}

Ожидаемый отображаемый HTML:

<ul>
 <li>Potato</li>
 <li>Carrot</li>
</ul>

Фактический результат

Error: [$parse:syntax] Syntax Error: Token '[' is unexpected, expecting [:] at column X of the expression [items | filter:{properties['namespace:status']}] starting at [['namespace:status']}].

направляя меня на синтаксическую ошибку.

Моя проблема заключается в том, что одно и то же выражение {{properties['namespace:status']}} соответствует синтаксису в шаблонах, поэтому я не уверен, что я что-то делаю неправильно, или если директивы просто не могут обрабатывать нотацию скобки,

Если его последнее, любые предложения о том, как я мог бы подойти к этому без переписывания JSON?

1 ответ

Вы должны указать такой ключ объекта

<ul>
 <li ng-repeat="item in items | filter:{prop: properties['namespace:status']}">
 {{item.name}}
 </li>
</ul>

Здесь вы можете проверить http://codepen.io/anon/pen/BslpA

Но вы должны знать, что angularjs не может фильтровать по массиву свойств объекта, это может быть только массив.

licensed under cc by-sa 3.0 with attribution.