AngularJS(正在加载 JSON 自定义服务)
AngularJS (Loading JSON with custom Service)
我正在尝试构建用于加载 json 文件的服务。我做错了什么?
服务
app.service("jsonService", function ($http, $q)
{
var deferred = $q.defer();
$http.get('./assets/json/home.json').then(function (data)
{
deferred.resolve(data);
});
this.getHomeItems = function ()
{
return deferred.promise;
}
})
我的控制器
app.controller('homeController', function ($scope, jsonService) {
var promise = jsonService.getHomeItems();
promise.then(function (data)
{
$scope.home_items = data;
console.log($scope.home_items);
});
});
控制台错误:未定义 $scope
您的服务应该是:
app.service("jsonService", ["$http", "$q", function ($http, $q)
{
var deferred = $q.defer();
$http.get("./assets/json/home.json").then(function (data)
{
deferred.resolve(data);
});
this.getHomeItems = function ()
{
return deferred.promise;
}
}]);
还有你的控制器:
app.controller("homeController", ["$scope", "jsonService", function ($scope, jsonService)
{
var promise = jsonService.getHomeItems();
promise.then(function (data)
{
$scope.home_items = data;
console.log($scope.home_items);
});
}]);
您有一个常见的反模式,您正在解包由 $http 编辑的承诺 return,然后将数据重新包装在承诺中。这是不必要的,只是 return 由 $http.
编辑的承诺 return
this.getHomeItems = function () {
return $http.get("./assets/json/home.json");
}
如果不查看您未提供的 HTML,我认为您可能没有将 $scope 注入到您的控制器构造函数中:
app.controller('homeController', ['$scope', function ($scope, jsonService) {
...
}]);
理论上,AngularJS 应该能够从变量名中推断出依赖关系,但根据官方文档,在某些情况下这不起作用,并且不鼓励不显式注入依赖关系的做法。
所以你可能想尝试显式注入(如上所示)。
在此处查看官方文档中的示例:
https://docs.angularjs.org/guide/controller
这里:
我正在尝试构建用于加载 json 文件的服务。我做错了什么?
服务
app.service("jsonService", function ($http, $q)
{
var deferred = $q.defer();
$http.get('./assets/json/home.json').then(function (data)
{
deferred.resolve(data);
});
this.getHomeItems = function ()
{
return deferred.promise;
}
})
我的控制器
app.controller('homeController', function ($scope, jsonService) {
var promise = jsonService.getHomeItems();
promise.then(function (data)
{
$scope.home_items = data;
console.log($scope.home_items);
});
});
控制台错误:未定义 $scope
您的服务应该是:
app.service("jsonService", ["$http", "$q", function ($http, $q)
{
var deferred = $q.defer();
$http.get("./assets/json/home.json").then(function (data)
{
deferred.resolve(data);
});
this.getHomeItems = function ()
{
return deferred.promise;
}
}]);
还有你的控制器:
app.controller("homeController", ["$scope", "jsonService", function ($scope, jsonService)
{
var promise = jsonService.getHomeItems();
promise.then(function (data)
{
$scope.home_items = data;
console.log($scope.home_items);
});
}]);
您有一个常见的反模式,您正在解包由 $http 编辑的承诺 return,然后将数据重新包装在承诺中。这是不必要的,只是 return 由 $http.
编辑的承诺 returnthis.getHomeItems = function () {
return $http.get("./assets/json/home.json");
}
如果不查看您未提供的 HTML,我认为您可能没有将 $scope 注入到您的控制器构造函数中:
app.controller('homeController', ['$scope', function ($scope, jsonService) {
...
}]);
理论上,AngularJS 应该能够从变量名中推断出依赖关系,但根据官方文档,在某些情况下这不起作用,并且不鼓励不显式注入依赖关系的做法。 所以你可能想尝试显式注入(如上所示)。
在此处查看官方文档中的示例:
https://docs.angularjs.org/guide/controller
这里: