Как предотвратить загрузку DOM до полной загрузки объекта в $ scope? - PullRequest
0 голосов
/ 08 марта 2019

Я загружаю JSON, который содержит почти 19 000 строк ... сведен к одной строке, это около 240 КБ.Я загружаю его в свое приложение через файл index.html как глобальную переменную:

<script type="text/javascript" src="js/cdjson.js"></script>

var _countries = {
   "country": {
      "USA": {
         "currency": {
            "currencyCode":["USD"],
                "currencyName":["United States Dollar"],
                "currencySymbol":["&#36;"]
         },
         "info": { 
               ...
               ...
         },
         "phone" : {
               ...
         },
         "postal" : {
               ...
         }
      },
      "CAN" : {
         ...
      }
   }
}  

В контроллере ему присваивается переменная $ scope $scope.countries = _countries.country ;.Однако, когда HTML-DOM для этого контроллера загружает свои попытки доступа к переменной $ scope до того, как объект будет полностью загружен в $ scope, вызывает ошибки объекта JS, такие как Cannot read property 'country' of undefined.

Как предотвратить отображение страницы до полной загрузки объекта $ scope?Объект страны $ scope используется в <select ng-repeat="countries as country">

Ответы [ 2 ]

0 голосов
/ 08 марта 2019

В идеале ваши js-файлы должны быть загружены в конце вашего HTML, чтобы у вас не было этой проблемы.Но если это не вариант, добавьте это в свой контроллер

$scope.countries = []
angular.element(document).ready(function () {
    $scope.countries = _countries.country;
});

и в свой HTML

<select ng-if="countries.length" ng-repeat="countries as country">    
0 голосов
/ 08 марта 2019

Имеет флаг, который указывает, когда данные были полностью загружены в контроллер. Что-то вроде

<select ng-if="countries.length" ng-repeat="countries as country">
...