2014-01-10 6 views
2

Я пишу Угловое приложение, которое взаимодействует с уже используемым API Google Analytics. Данные, возвращенные Google, имеют префикс «ga:», как в примере «ga: newVisits».Как получить доступ к объекту с недопустимыми символами

Если я использую выражение {{total.ga:newVisits}}, Angular не может его разобрать. Любые попытки избежать продолжения двоеточия приведут к ошибке или вообще исчезнут мое выражение.

Как передать {{total.ga:newVisits}} в Угловое, чтобы выражение работало правильно?

<!doctype html> 
    <html ng-app="AnalyticsApp"> 
    <head> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.7/angular.min.js"></script> 
     <script src="angular-controller.js"></script> 
    </head> 
    <body ng-controller="AnalyticsCtrl"> 
     <ul> 
     <li ng-repeat="total in result"> 
      {{total.ga:newVisits}} 
     </li> 
     </ul> 
    </body> 
    </html> 
+0

'{{всего [ 'GA: newVisits']}}' – dave

ответ

7

В JavaScript, свойство объекта может быть доступно с помощью точечной нотации или обозначений квадратных скобок. Точечная нотация часто чище, но имеет ограничения. Как вы заметили, ваша собственность содержит недопустимый символ и поэтому не может быть доступна через точечную нотацию. Таким образом, решение состоит в том, чтобы получить доступ к свойству с использованием скобки, обозначенной следующим образом: total['ga:newVisits'], так что ваш полный код будет {{total['ga:newVisits']}}. Live demo here (click).

Еще одна приятная особенность о кронштейном нотации является то, что она позволяет использовать имя переменной в качестве свойства:

var myObj { 
    bar: '123' 
}; 
var foo = 'bar'; 

console.log(myObj[foo]); //logs '123' 
+0

Я удалил мой предыдущий комментарий. Вы были на 100% прав. Благодарим вас за не только ответ, но и подробное объяснение! – VSack

+0

@ VSack Хорошо, рад, что все получилось! Я сделал это на случай, если это поможет: http://jsbin.com/OPOyeXOS/2/edit Stack Overflow - это больше для обучения, чем просто исправление ошибок, поэтому я всегда стараюсь, чтобы мои ответы получили возможность обучения. Спасибо за оценку! – m59

2

Вы должны получить доступ к нему, как будто это ассоциативный массив:

{{total['ga:newVisits']}} 
Смежные вопросы