Брифинг: при чтении файла 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)
Ваша проблема в том, что $ 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>