Récupérer des données d'un fichier JSON sous android avec AngularJS
Bonjour,
J'affiche une liste et je veux récupérer les données d'un fichier JSON dans un SERVICE mais l'exécution de la lecture du fichier est trop long et je n'arrive pas à mettre à jour mon tableau items
j'affiche mes données dans mon template ci-dessous avec
Code:
<list-Item></list-Item>
template :
Code:
1 2 3 4 5 6
| <ion-view view-title="List test">
<ion-content class="padding">
<h3>List test</h3>
<list-Item></list-Item>
</ion-content>
</ion-view> |
L'affichage pas par une directive et un template (j'utilise aussi ionic):
directive :
Code:
1 2 3 4 5 6 7
| app.directive('listItem', function() {
return {
templateUrl: 'views/directives/listItem.html',
restrict : 'E',
scope: true
}
}) |
template de ma directive :
Code:
1 2 3 4 5
| <label class="item item-input item-stacked-label">
<ion-list list-Item>
<ion-radio ng-if="item.name" ng-repeat="item in items" ng-model="choice" ng-value="item.name"><b>{{item.name}} </b>- id: {{item.id}}</ion-radio>
</ion-list>
</label> |
Mon controller appelle getItems où je récupère mon fichier et son contenu que j'affiche dans pour vérifier mais il affiche en premier avant, ce qui m'indique que l’exécution de ma lecture des données est trop longue. Du coup mon tableau items reste vide et je ne peux pas afficher ma liste.
Mon controller :
Code:
1 2 3
| app.controller('List', function ($scope,itemProvider) {
$scope.items = itemProvider.getItems();
}); |
Mon service :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| var items = [];
app.service('itemProvider', function($ionicPlatform,$cordovaFile) {
this.getItems = function () {
$ionicPlatform.ready(function () {
// READ
$cordovaFile.readAsText(cordova.file.dataDirectory, "test.json")
.then(function (success) {
// success
items = JSON.parse(success);
alert("SUCCESS A : " + items);
}, function (error) {
// error
alert("ERROR:" + error);
});
});
alert("SUCCESS B : " + items);
return items;
}
}) |
Si j'exécute la lecture du fichier à l'ouverture de l'application dans app.js ça marche, mon tableau items est bien initialisé... mais c'est pas logique de le faire ici (voir ci-dessous).
Quelqu'un peut-il m'aider à résoudre ce problème. Je débute sur AngularJS. Merci d'avance pour votre aide.
Solution qui marche mais qui n'est pas au bon endroit :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| var app = angular.module('myApp', ['ionic', 'ngCordova'])
var items = [];
var dataFile = "test.json";
app.run(function ($ionicPlatform, $cordovaFile) {
$ionicPlatform.ready(function () {
// Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
// for form inputs)
if (window.cordova && window.cordova.plugins.Keyboard) {
cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
}
if (window.StatusBar) {
StatusBar.styleDefault();
}
$cordovaFile.readAsText(cordova.file.dataDirectory, dataFile)
.then(function (success) {
items = JSON.parse(success);
}, function (error) {
// error
alert("ERROR : " + error);
});
});
}) |