Angular JS:使用 $http.get() 导入 JSON 数据 - 在控制器中工作,不在服务中 - 为什么
Angular JS: importing JSON data with $http.get() - works in controller, does not in a service - WHY?
我正在尝试将JSON数据导入到angularJS应用程序中。我将我的应用程序拆分为控制器和导入服务,但两者都在不同的文件中。我也在使用 bower、grunt 和 yeoman(这是由于工作,我不太习惯这些,也许还有一个问题。
奇怪的行为是:
我想使用 $http.get() 检索 JSON 数据并解析它 - 所有这些都在一个服务中完成,这样我就可以将数据对象从那里分发给主控制器,而不必在那里解析它。奇怪的是,我没有得到任何数据,它是空的或不可读的。然后我给出了我$http.get() mehtod 给出的承诺,并在控制器中解决了它。这不是我想要的,但现在它起作用了......但是为什么?
我想这是某个时候的失误,但我和我的团队成员都找不到。奇怪的是,做一个没有咕噜声的小测试应用程序,yeoman 和 bower 它奏效了。
我会感谢每一个提示或想法...贾娜
这是我在 NOT 工作版本中的代码,首先是带有控制器的主模块:
/** Main module of the application. */
(function () {
'use strict;'
angular.module('angularRegelwerkApp', [])
.controller('RegelwerkCtrl', function ($scope, CategoryFactory) {
$scope.categories = CategoryFactory.getCategories();
$scope.subcategories = CategoryFactory.getSubCategories();
}
);
})();
服务部分:
(function () {
'use strict';
var app = angular.module('angularRegelwerkApp')
.service('CategoryFactory',
function ($http) {
var categories = [];
var subcategories = [];
$http.get("../mockdata/categories.json").then(function (response) {
categories = response.data;
})
$http.get('../mockdata/subcategories.json').then(function (response) {
subcategories = response.data;
})
return {
getCategories: function(){
return categories;
},
getSubCategories: function(){
return subcategories;
}
}
}
);
})();
这是我的工作版本的代码,首先是带有控制器的主模块:
/** Main module of the application. */
(function() {
'use strict;'
angular.module('angularRegelwerkApp', [])
.controller('RegelwerkCtrl', function ($scope, CategoryFactory) {
$scope.categories = [];
$scope.subcategories = [];
CategoryFactory.getCategories().then(function(response) {
$scope.categories = response.data;
});
CategoryFactory.getSubCategories().then(function(response) {
$scope.subcategories = response.data;
});
}
);
}
)();
服务部分:
(function () {
'use strict';
var app = angular.module('angularRegelwerkApp')
.service('CategoryFactory',
function ($http, $q) {
var categoryURL = "../mockdata/categories.json";
var subcategoryURL = '../mockdata/subcategories.json';
function getSubCategories() {
return $http.get(subcategoryURL);
}
function getCategories() {
return $http.get(categoryURL);
}
return {
getCategories: getCategories,
getSubCategories: getSubCategories
}
}
);
})();
这会破坏您的引用,因此请从服务器循环数据并将其推送到您需要的变量中:
$http.get("../mockdata/categories.json").then(function (response) {
for(var x = 0; x < response.data.length; x++){
categories.push(response.data[x]);
}
});
$http调用默认是异步的。
所以在你的第一个版本中,当你写得像$scope.categories = CategoryFactory.getCategories();
您将获得空类别,因为当您访问类别时,它可能尚未加载响应数据。
你的应用像这样流动 -
- 加载控制器
- 您调用服务
- 服务呼叫$http
- 您尝试访问类别(但在从服务器返回响应之前,数据将不可用)
- $http.然后将数据加载到 $scope.类别
您将数据存储在 Angular 基元中,这些基元不会更新。 而是将所有数据存储在一个对象中,它应该可以工作(您还需要更新控制器)
(function () {
'use strict';
var app = angular.module('angularRegelwerkApp')
.service('CategoryFactory',
function ($http) {
var data = {};
$http.get("../mockdata/categories.json").then(function (response) {
data.categories = response.data;
})
$http.get('../mockdata/subcategories.json').then(function (response) {
data.subcategories = response.data;
})
return {
getCategories: function(){
return data.categories;
},
getSubCategories: function(){
return data.subcategories;
}
}
}
);
})();
相关文章:
- 为什么ng控制器不调用或工作或功能不工作
- AngularJS控制器不工作,为什么?(简单的控制器示例)
- 角度控制器功能赢得'不按指令工作
- console.log在角度控制器内不工作
- 角度控制器功能不;在指令内部调用时,似乎无法始终如一地工作
- 如何使Angular JS控制器与指令一起工作
- AngularApp中的多个控制器不工作
- 具有范围变量的控制器不工作
- 角度指令和属性Don'在控制器内创建和设置时无法工作
- AngularJS控制器没有'第一次刷新页面后无法工作
- 包含ngMock时控制器不工作
- 部分html视图's控制器未使用KendoPanelBar内容URL在指令模板URL中工作
- 在第三个控制器中使用时RootScope不工作
- angularJS-当我添加ngRoute时,控制器停止工作
- ng-显示无法从控制器工作
- extjs setLoading()不能从控制器工作
- 如何让这个AngularJS控制器工作($scope变量没有在控制器中初始化)
- NodeJS Express req.params,enrouten控制器工作不正常
- 我如何使ui-router控制器工作
- $emit from子控制器工作,但是$broadcast from父控制器不起作用