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