Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用AngularJS将JSON对象加载到单独的全局变量中?_Javascript_Jquery_Json_Angularjs - Fatal编程技术网

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

Javascript 如何使用AngularJS将JSON对象加载到单独的全局变量中?,javascript,jquery,json,angularjs,Javascript,Jquery,Json,Angularjs,我正在学习AngularJS,我有一个JSON文件,其中包含我想要加载到单独变量中的数据。 我的JSON文件有两个对象/数组:“视图”和“地址簿”。我可以将数据绑定到html中的$scope.variabale,但这不是我想要的。我想将视图和地址簿加载到“var视图”和“var地址簿”中,以便使用jquery访问它们 我的JSON: { "myData": { "views": [ { "view": "Nieuwe

我正在学习AngularJS,我有一个JSON文件,其中包含我想要加载到单独变量中的数据。 我的JSON文件有两个对象/数组:“视图”和“地址簿”。我可以将数据绑定到html中的$scope.variabale,但这不是我想要的。我想将视图和地址簿加载到“var视图”和“var地址簿”中,以便使用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


非常感谢您的帮助:)

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

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

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

在代码的上下文中,这个$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();  
};
当您第一次实例化angular controller时,它将调用loadData函数并设置$scope变量


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

您可以使用Windows引用全局范围。window.alldata=…Tnx Scott。试过这个,没用。我得到了console.log(window.alldata)和console.log(windows.alldata)的“未定义”。请尝试
console.log(window.views)
console.log(window.adresbook)
@Chennard-我修改了我的原始答案,以反映您希望在alldata对象中包含视图和地址簿的愿望。总的来说,这仍然是完全相同的答案——但现在这个答案被包装在alldata中。您可以使用jQuery代码中的alldata或window.alldata进行访问。我只是在进行原型设计,不关心安全性。请求发生在最开始的时候,这是我仅有的javascript。var myApp=angular.modell myApp.controller…$http var alldata..好的,我编辑了我的答案,如果这对您更有帮助,请告诉我。@ChadF如果我不想让我的服务在每次有人请求此数据时获取json,该怎么办?如何获取一次?如果将HTTP逻辑放入服务中(应该放在哪里),则可以将函数记忆或将结果设置为服务属性,然后检查该属性是否已定义。i、 例如,在http请求之前粘贴
if(this.data){returnthis.data}