Comment charger json dans mon angulaire.js ng-model?

J'ai ce que je pense être probablement une question très évidente, mais je n'ai trouvé de réponse nulle part.

J'essaie juste de charger des données JSON de mon serveur dans le client. En ce moment, j'utilise JQuery pour le charger avec un appel AJAX (code ci-dessous).

<script type="text/javascript">
var global = new Array();
$.ajax({
    url: "/json",
    success: function(reports){
        global = reports;
        return global;
        }
    });
</script>

Ceci est situé dans le fichier html. Cela fonctionne jusqu'à présent, mais le problème est que je veux utiliser AngularJS. Maintenant, alors Qu'Angular peut utiliser les variables, Je ne peux pas charger le tout dans une variable afin que je puisse utiliser un pour chaque boucle. Cela semble être lié à la" $Scope", qui est généralement situé dans le .fichier js.

Le problème est que je ne peux pas charger le code d'autres pages dans un .fichier js. Chaque exemple D'angulaire ne montre que des choses comme ceci:

function TodoCtrl($scope) {
  $scope.todos = [
    {text:'learn angular', done:true},
    {text:'build an angular app', done:false}];

Donc, c'est utile, si je A) vous voulez taper tout cela à la main, et B) si je sais à l'avance quelles sont toutes mes données...

Je ne sais pas à l'avance (les données dynamiques) et je ne veux pas taper.

Donc, quand j'ai essayé de changer L'appel AJAX à Angulaire en utilisant $ Resource, cela ne semble pas fonctionner. Peut-être que je ne peux pas le comprendre, mais c'est une requête GET relativement simple pour les données JSON.

Tl: dr Je ne peux pas obtenir des appels AJAX pour travailler afin de charger des données externes dans un modèle angulaire.

114
demandé sur Pavlo 2012-10-23 02:24:28

3 réponses

Comme Kris le mentionne, vous pouvez utiliser le service $resource pour interagir avec le serveur, mais j'ai l'impression que vous commencez votre voyage avec Angular-j'y étais la semaine dernière-donc je recommande de commencer à expérimenter directement avec le service $http. Dans ce cas, vous pouvez appeler sa méthode get.

Si vous avez le JSON suivant

[{ "text":"learn angular", "done":true },
 { "text":"build an angular app", "done":false},
 { "text":"something", "done":false },
 { "text":"another todo", "done":true }]

, Vous pouvez le charger comme ceci

var App = angular.module('App', []);

App.controller('TodoCtrl', function($scope, $http) {
  $http.get('todos.json')
       .then(function(res){
          $scope.todos = res.data;                
        });
});

La méthode get renvoie un objet promise qui le premier argument est un succès callback et le second une erreur rappel.

Lorsque vous ajoutez $http en tant que paramètre D'une fonction angulaire est-ce magique et injecte la ressource $http dans votre contrôleur.

J'ai mis quelques exemples ici

189
répondu jaime 2012-10-23 13:17:44

Voici un exemple simple de chargement de données JSON dans un modèle angulaire.

J'ai un service Web JSON 'GET' qui renvoie une liste de détails client, à partir d'une copie en ligne de la base de données Northwind SQL Server de Microsoft.

Http://www.iNorthwind.com/Service1.svc/getAllCustomers

Il renvoie des données JSON qui ressemblent à ceci:

{ 
    "GetAllCustomersResult" : 
        [
            {
              "CompanyName": "Alfreds Futterkiste",
              "CustomerID": "ALFKI"
            },
            {
              "CompanyName": "Ana Trujillo Emparedados y helados",
              "CustomerID": "ANATR"
            },
            {
              "CompanyName": "Antonio Moreno Taquería",
              "CustomerID": "ANTON"
            }
        ]
    }

..et je veux remplir une liste déroulante avec ces données, pour ressembler à ce...

Capture d'écran angulaire

Je veux que le texte de chaque élément provienne du champ "CompanyName", et que L'ID provienne des champs" CustomerID".

Comment le ferais-je ?

Mon contrôleur angulaire ressemblerait à ceci:

function MikesAngularController($scope, $http) {

    $scope.listOfCustomers = null;

    $http.get('http://www.iNorthwind.com/Service1.svc/getAllCustomers')
         .success(function (data) {
             $scope.listOfCustomers = data.GetAllCustomersResult;
         })
         .error(function (data, status, headers, config) {
             //  Do some error handling here
         });
}

... qui remplit une variable "listOfCustomers" avec cet ensemble de données JSON.

Ensuite, dans ma page HTML, j'utiliserais ceci:

<div ng-controller='MikesAngularController'>
    <span>Please select a customer:</span>
    <select ng-model="selectedCustomer" ng-options="customer.CustomerID as customer.CompanyName for customer in listOfCustomers" style="width:350px;"></select>
</div>

Et c'est tout. Nous pouvons maintenant voir une liste de nos données JSON sur une page web, prête à être utiliser.

La clé de ceci est dans la balise" ng-options":

customer.CustomerID as customer.CompanyName for customer in listOfCustomers

C'est une syntaxe étrange pour se faire une idée !

Lorsque l'utilisateur sélectionne un élément dans cette liste, le "$champ d'application.la variable selectedCustomer " sera définie sur L'ID (le champ CustomerID) de cet enregistrement client.

Le script complet de cet exemple peut être trouvé ici:

Données JSON avec angulaire

Mike

28
répondu Mike Gledhill 2015-12-16 09:39:56

J'utilise le code suivant, trouvé quelque part dans internet ne me souviens pas de la source cependant.

    var allText;
    var rawFile = new XMLHttpRequest();
    rawFile.open("GET", file, false);
    rawFile.onreadystatechange = function () {
        if (rawFile.readyState === 4) {
            if (rawFile.status === 200 || rawFile.status == 0) {
                allText = rawFile.responseText;
            }
        }
    }
    rawFile.send(null);
    return JSON.parse(allText);
0
répondu messed-up 2018-01-17 23:53:13