离子控制器和服务:“TypeError:...不是函数”

时间:2015-12-13 17:48:24

标签: javascript cordova ionic

我正在开发一款Ionic的移动应用程序并且遇到错误

  

TypeError:t.getCases(...)。然后不是函数

以下是我的控制器和服务:

服务

starter.services.factory('appData', function() {

  return {
      getCases: function() {

        var cases =[ 
          {case_id: 1, description: 'headache'},
          {case_id: 2, description: 'fever'},
          {case_id: 3, description: 'stomachache'}
        ];

        return cases;
    }
  } 

})

控制器

starter.controllers.controller('mainViewCtrl', function($scope, appData) {

  appData.getCases().then(function(data){
      $scope.cases = data.cases;
   });  

  console.log("mainViewCtrl completed");
})

请注意我在构建包文件之前运行gulp脚本来合并和“uglify”所有JS文件。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

正如T.J. Crowder所说,为了使用“then”(异步调用),你必须从服务中返回一个promise,之后能够在你的控制器中获取:

starter.services.factory('appData', function($q) {

  return {
      getCases: function() {

        var deferred = $q.defer();

        var cases =[ 
          {case_id: 1, description: 'headache'},
          {case_id: 2, description: 'fever'},
          {case_id: 3, description: 'stomachache'}
        ];

        //attach data to deferred object
        deferred.resolve(cases);

       //return promise to be catched with "then"
       return deferred.promise;

    }
  } 

})

如果您可能希望将错误作为回调返回,则可能只是通过调用deferred.reject(错误)来拒绝承诺(而错误是可选的错误消息/对象)。

这是另一个很好的链接,它帮助我获得了角度为promises的异步编程概念: $q.defer