2017-01-29 1 views
1

Я пытаюсь смотреть коды стран из файла JSON, чтобы получить полные названия стран:

$scope.fullname = function (option) { 
    $http.get('files/names.json').success(function (data) {  
     for (var i = 0; i < data.length; i++) {   
      if (data[i].key === option) 
       return data[i].value; 
     } 
    }) 
}; 

и в разметке:

<td class="secondary-text">{{fullname (list.countrycode) }}</td> 

Я получаю серьезные ошибки, и браузер разбивается. Может ли кто-нибудь помочь мне решить эту проблему? как я могу получить список в память, а затем посмотреть коды стран из этого списка?

моего файла JSON как это:

{ 
    "BD": "Bangladesh", 
    "BE": "Belgium", 
    "BF": "Burkina Faso", 
    "BG": "Bulgaria", 
    "BA": "Bosnia and Herzegovina", 
    "BB": "Barbados", 
    "WF": "Wallis and Futuna", 
    "BL": "Saint Barthelemy", 
    "BM": "Bermuda", 
    "BN": "Brunei", 
... 
+1

Какая ошибка? можете ли вы отправить более подробную информацию в свой вопрос? Также есть country.io ваш сайт и просто хотите передать json-файл в свой проект? или получить список стран с внешнего сайта? Верхняя и нижняя части вопроса конфликтуют друг с другом. – lifejuggler

+1

Перерыв и отладка. Попробуйте поместить отладчик в первую строку кода и в обратный вызов .success, используйте отладчик, чтобы точно знать, где все идет не так. –

+0

@lifejuggler сайт не мой, я просто ссылаюсь на него, чтобы вы могли увидеть структуру моего json-файла. возможно, моя итерация недействительна на основе этой структуры json-файла. – passion

ответ

4

Конечно, браузер будет врезаться с этой линией:

<td class="secondary-text">{{fullname (list.countrycode) }}</td> 

Вы знаете, сколько раз функция fullname() вызывается? КАЖДЫЙ цикл дайджест! Это случается много раз.

В контроллере вы должны создать один вызов на сервер, непосредственно из контроллера:

$http.get('files/names.json').success(function (data) { 
    $scope.fullnames = data;  
}) 

И с точки зрения вы можете сделать что-то вроде

<td class="secondary-text" ng-repeat="(key,value) in fullnames" ng-if="key == list.countrycode">{{value }}</td> 

Я не Не знаете, как выглядит ваш HTML, но вы также можете улучшить его, используя одноразовую привязку, например:

<td class="secondary-text" ng-repeat="(key,value) in ::fullnames" ng-if="key == list.countrycode">{{value }}</td> 
Смежные вопросы