我正在开发一款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文件。
非常感谢任何帮助。
答案 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