TypeError: Невозможно прочитать свойство 'значение' из неопределенного, когда файл $ http.get JSON

0

Брифинг: при чтении файла JSON из angularJS он загружается, но он проходит некоторое время, пока не будут доступны данные или что-то странное.

JSON:

{
  "number": 1,
  "persons":[
    {
      "gender": "Male",
      "name": "Paul",
    }
  ]
}

Угловой код:

app.controller('myapp', function($scope,$http){
    var folder = 'DB/';
    $http.get(folder+'database.json').success(function(data){
        $scope.DataBase= data;
    });

    console.log($scope);

    $scope.getname= function(){
        return $scope.DataBase.persons[0].name;
    }

Html:

<body> 
    <div class="d_name" ng-controller="myapp">
        {{getname()}}
    </div>
</body>

Я не понимаю, почему console.log($ scope) сразу после получения JSON показывает, что есть объект DataBase, но функция getname() дает две ошибки перед тем, как это работает, похоже, если какое-то время область wasn 't update и функция getname не находит объект, но тогда почему журнал показывает его?

Консоль:

ChildScope {$$childTail: null, $$childHead: null, $$nextSibling: null, $$watchers: null, $$listeners: Object…}
$$ChildScope: null
$$childHead: null
$$childTail: null
$$listenerCount: Object
$$listeners: Object
$$nextSibling: ChildScope
$$prevSibling: null
$$watchers: Array[3]
$$watchersCount: 3
$id: 4
$parent: ChildScope
DataBase: Object
persons: Array[1]
number: 1
__proto__: Object
getgen: ()
getimg: ()
getname: ()
__proto__: ChildScope

ionic.bundle.js:21157 
TypeError: Cannot read property 'persons' of undefined
    at Scope.$scope.getname (http://localhost:63342/test/www/js/controllers/c_menu.js:27:35)
    at fn (eval at <anonymous> (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:21972:15), <anonymous>:4:209)
    at Object.expressionInputWatch [as get] (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:22954:31)
    at Scope.$digest (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:24502:40)
    at Scope.$apply (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:24778:24)
    at done (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19191:47)
    at completeRequest (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19363:7)
    at XMLHttpRequest.requestLoaded (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19304:9)

ionic.bundle.js:21157 
TypeError: Cannot read property 'persons' of undefined
    at Scope.$scope.getname (http://localhost:63342/test/www/js/controllers/c_menu.js:27:35)
    at fn (eval at <anonymous> (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:21972:15), <anonymous>:4:209)
    at Object.expressionInputWatch [as get] (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:22954:31)
    at Scope.$digest (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:24502:40)
    at Scope.$apply (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:24778:24)
    at done (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19191:47)
    at completeRequest (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19363:7)
    at XMLHttpRequest.requestLoaded (http://localhost:63342/test/www/lib/ionic/js/ionic.bundle.js:19304:9)
Теги:
ionic

1 ответ

0
Лучший ответ

Ваша проблема в том, что $ http работает асинхронно. Попробуй это:

Контроллер:

app.controller('myapp', function($scope,$http){
    var folder = 'DB/';
    $http.get(folder+'database.json').success(function(data){
        $scope.DataBase = data;
        $scope.namePerson = $scope.DataBase.persons[0].name;
    });
});

Html:

<body> 
    <div class="d_name" ng-controller="myapp">
        {{namePerson}}
    </div>
</body>
  • 0
    Привет, Эмир, ты где очень быстро ... Но почему консоль сразу после того, как правильно показывает объект? и Этот код является упрощением, у каждого человека есть 5 полей, и есть более 50 человек, также есть другие поля в корне JSON
  • 0
    Ваша проблема не в $ scope, а в $ scope.DataBase. Это не определено
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню