如果这对于有角度的专家来说只是一个简单的问题,请原谅我,我对服务还是相当陌生的。

以下是我的控制器的代码段,在该代码段中,我试图发出服务请求以从JSON文件“ jobs.json”中调出数据。

加载网页时我没有收到数据,也没有在检查器元素中看到JSON文件。

我认为下面的代码中有错误。有人问什么问题吗?
Click here if you need to play about with the code

"use strict";

var app = angular.module("tickrApp", []);

app.service("tickrService", function ($http, $q){
var deferred = $q.defer();
$http.get('app/data/items.json').then(function (data){
    deferred.resolve(data);
});

this.getItems = function () {
    return deferred.promise;
}
  })

 .controller('tickCtrl', function($scope, tickrService) {

var promise = tickrService.getItems();
promise.then(function (data){

    $scope.items= getData;
    console.log($scope.items);
});

最佳答案

在您的Plunkr中,您有一些错误,例如<script>标记错误的方式(您需要先使用Angular,然后您的代码才能使用angular.module)。您还具有错误的ng-app-data而不是data-ng-app属性。

关键问题在于JS代码,$http.get()调用的成功处理程序的第一个参数是具有data属性的对象,该属性是返回的实际数据。因此,您应该改为使用该属性来解决您的承诺。

然后在控制器中,就像Michael P.所说的那样,getData是未定义的,您应该使用传入的data参数。

app.service("tickrService", function($http, $q) {
  var deferred = $q.defer();
  $http.get('jobs.json').then(function(response) {
    deferred.resolve(response.data);
  });

  this.getjobs = function() {
    return deferred.promise;
  }
})

.controller('tickCtrl', function($scope, tickrService) {

  var promise = tickrService.getjobs();
  promise.then(function(data) {

    $scope.jobs = data;
    console.log($scope.jobs);
  });

});


请参见forked Plunkr

10-05 23:03
查看更多