简体   繁体   English

如何将json加载到我的angular.js ng-model中?

[英]How to load json into my angular.js ng-model?

I have what I think is probably a very obvious question, but I couldn't find an answer anywhere. 我认为这可能是一个非常明显的问题,但我无法在任何地方找到答案。

I am just trying to load some JSON data from my server into the client. 我只是想从我的服务器加载一些JSON数据到客户端。 Right now, I am using JQuery to load it with an AJAX call (code below). 现在,我正在使用JQuery通过AJAX调用加载它(下面的代码)。

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

This is located in the html file. 它位于html文件中。 It works so far, but the issue is that I want to use AngularJS. 它到目前为止工作,但问题是我想使用AngularJS。 Now, while Angular CAN use the variables, i cannot load the whole thing into a variable so I can use a for each loop. 现在,当Angular CAN使用变量时,我无法将整个事物加载到变量中,因此我可以为每个循环使用a。 This seems to be related to the "$Scope", which is usually located in the .js file. 这似乎与“$ Scope”有关,它通常位于.js文件中。

The problem is that I cannot load code from other pages into a .js file. 问题是我无法将其他页面的代码加载到.js文件中。 Every example of Angular only shows stuff like this: Angular的每个例子都只显示如下内容:

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

So, this is useful, if IA) Want to type all of this by hand, AND B) If I know in advance what all my data is... 所以,这很有用,如果IA)想要手动输入所有这些,并且B)如果我事先知道我的所有数据是什么......

I don't know in advance (the data is dynamic) and I don't want to type it. 我事先不知道(数据是动态的),我不想输入它。

So, when I tried to change the AJAX call to Angular using $Resource, it doesn't seem to work. 因此,当我尝试使用$ Resource将AJAX调用更改为Angular时,它似乎不起作用。 Maybe I can't figure it out, but it is a relatively simple GET request for JSON data. 也许我无法弄清楚,但它是一个相对简单的GSON数据的GET请求。

tl:dr I can't get AJAX calls to work in order to load external data into an angular model. tl:dr我无法让AJAX调用工作,以便将外部数据加载到角度模型中。

As Kris mentions, you can use the $resource service to interact with the server, but I get the impression you are beginning your journey with Angular - I was there last week - so I recommend to start experimenting directly with the $http service. 正如Kris所提到的,您可以使用$resource服务与服务器进行交互,但我得到的印象是您开始使用Angular - 我上周在那里 - 所以我建议您开始直接尝试使用$http服务。 In this case you can call its get method. 在这种情况下,您可以调用其get方法。

If you have the following JSON 如果您有以下JSON

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

You can load it like this 你可以像这样加载它

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

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

The get method returns a promise object which first argument is a success callback and the second an error callback. get方法返回一个promise对象,第一个参数是成功回调,第二个参数是错误回调。

When you add $http as a parameter of a function Angular does it magic and injects the $http resource into your controller. 当您添加$http作为函数的参数时,Angular会将其魔术并将$http资源注入您的控制器。

I've put some examples here 我在这里举了一些例子

Here's a simple example of how to load JSON data into an Angular model. 这是一个如何将JSON数据加载到Angular模型的简单示例。

I have a JSON 'GET' web service which returns a list of Customer details, from an online copy of Microsoft's Northwind SQL Server database. 我有一个JSON'GET'Web服务,它从Microsoft的Northwind SQL Server数据库的在线副本返回客户详细信息列表。

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

It returns some JSON data which looks like this: 它返回一些如下所示的JSON数据:

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

..and I want to populate a drop down list with this data, to look like this... ..我想用这些数据填充下拉列表,看起来像这样......

角度截图

I want the text of each item to come from the "CompanyName" field, and the ID to come from the "CustomerID" fields. 我希望每个项目的文本来自“CompanyName”字段,并且ID来自“CustomerID”字段。

How would I do it ? 我该怎么办?

My Angular controller would look like this: 我的Angular控制器看起来像这样:

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
         });
}

... which fills a "listOfCustomers" variable with this set of JSON data. ...用这组JSON数据填充“listOfCustomers”变量。

Then, in my HTML page, I'd use this: 然后,在我的HTML页面中,我将使用此:

<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>

And that's it. 就是这样。 We can now see a list of our JSON data on a web page, ready to be used. 我们现在可以在网页上看到我们的JSON数据列表,随时可以使用。

The key to this is in the "ng-options" tag: 关键是在“ng-options”标签中:

customer.CustomerID as customer.CompanyName for customer in listOfCustomers

It's a strange syntax to get your head around ! 让你头脑发热是一种奇怪的语法!

When the user selects an item in this list, the "$scope.selectedCustomer" variable will be set to the ID (the CustomerID field) of that Customer record. 当用户选择此列表中的项目时,“$ scope.selectedCustomer”变量将设置为该Customer记录的ID(CustomerID字段)。

The full script for this example can be found here: 可以在此处找到此示例的完整脚本:

JSON data with Angular 使用Angular的JSON数据

Mike 麦克风

I use following code, found somewhere in the internet don't remember the source though. 我使用下面的代码,发现在互联网的某个地方不记得源。

    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);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM