如何使用AngularJS将JSON对象加载到单独的全局变量中?

时间:2015-04-11 19:18:31

标签: javascript jquery json angularjs

我正在学习AngularJS,我有一个JSON文件,其中包含我想要加载到单独变量中的数据。 我的JSON文件有两个对象/数组:“views”和“addressbook”。我可以将数据绑定到html中的$ scope.variabale,但这不是我正在寻找的。我想将视图和地址簿加载到“var views”和“var adressbook”中,以便我可以使用jquery访问它们。

我的JSON:

{
    "myData": {
        "views": [
            {
                "view": "Nieuwe activiteit",
                "link": "index.html",
                "active": true
            },
            {
                "view": "Activiteiten",
                "link": "activiteiten.html",
                "active": false
            }
        ],"adresboek": [
            {
                "Voornaam": "Ruben",
                "e-mail": "ruben@e-mail.com",
                "mobiel": "0612345678",
                "hasFacebook": true,
                "hasTwitter": true
            },
            {
                "Voornaam": "Roos",
                "e-mail": "roos@e-mail.com",
                "mobiel": "0612345677",
                "hasFacebook": true,
                "hasTwitter": true
            }
        ]
    }
}

我想要的是:

var alldata = $http.get('data/data.json').then(function(res) {
    var views = res.data.mydata.views;
    var adresbook = res.data.mydata.adresbook;
 });

我想像这样绑定数据: $ scope.views = alldata.views; $ scope.contacts = alldata.addressbook;

感谢任何帮助:)

2 个答案:

答案 0 :(得分:0)

您可以通过引用窗口对象随时访问JavaScript全局范围。如果您修改角度摘要之外的数据,请务必使用$ apply in angular。在您的示例中:

var alldata = $http.get('data/data.json').then(function(res) {
    window.alldata = {
       "views": res.data.mydata.views,
       "addressbook": res.data.mydata.adresbook
    };
 });

您现在可以访问jQuery中的数据,例如:

console.log( window.alldata.views );

答案 1 :(得分:0)

为什么要将这些变量放在全局范围/窗口上?通常建议不要这样做。您可以考虑创建Angular服务。服务允许您访问不同模块的变量。

在您的代码的上下文中,这个$ http.get请求在哪里发生?

编辑:回复您的评论:

好的,试试这样的事情?

myApp.controller( 'getData', function($http){  
  this.onLoad: function(){  
    $http.get('data/data.json').then(function(res) {  
      $scope.views = allData.views;  
      $scope.contacts = allData.addressBook;  
    }  
  };  
  this.onLoad();  
};

当您第一次实例化角度控制器时,它将调用loadData函数并设置$ scope变量。

(我没有检查你的$ http代码,我只是复制了你的内容)。