Angularjs - 无法读取未定义的 属性 'then'
Angularjs - Cannot read property 'then' of undefined
我是 angularjs 的新手,我知道有很多关于此错误的问题,
不幸的是,我在其中任何一个中都找不到适合我的问题的答案。
我有一个拥有所有功能的工厂,以及使用它们的控制器。在一个控制器中,我得到了一个 returns 数组的 GET 函数,我的大部分函数都写得几乎相同,还有一些函数的写法与这个完全相同,只是变量 names/url 不同,但是这个错误只发生在这个函数上:
控制器:
$scope.getAllFunction = function(){
appServicesProvider.getAll($scope.var1).then(function(res){
$scope.var2 = res;
})
};
工厂(appServicesProvider):
function getAll(var1){
$http.get(restURL+var1).then(
function(response){
return [].concat(response.data.var2)
}
);
}
正如我所说,完全相同的功能还有很多,只有这个不行,这让我更难解决。
感谢您提供的任何帮助!
你必须return承诺
function getAll(var1){
return $http.get(restURL+var1).then(
function(response){
return [].concat(response.data.var2)
}
);
}
或者您可以使用 $q
将您的工厂重写为 return 包含已解决承诺的对象
app.factory('appServicesProvider', function() {
return {
getAll: function(var1) {
var defer = $q.defer();
$http.get(restURL + var1).then(function(response) {
defer.resolve([].concat(response.data.var2));
}).catch(function(response, status) {
defer.reject(response.data.message);
});
return defer.promise;;
}
}
});
我是 angularjs 的新手,我知道有很多关于此错误的问题, 不幸的是,我在其中任何一个中都找不到适合我的问题的答案。
我有一个拥有所有功能的工厂,以及使用它们的控制器。在一个控制器中,我得到了一个 returns 数组的 GET 函数,我的大部分函数都写得几乎相同,还有一些函数的写法与这个完全相同,只是变量 names/url 不同,但是这个错误只发生在这个函数上:
控制器:
$scope.getAllFunction = function(){
appServicesProvider.getAll($scope.var1).then(function(res){
$scope.var2 = res;
})
};
工厂(appServicesProvider):
function getAll(var1){
$http.get(restURL+var1).then(
function(response){
return [].concat(response.data.var2)
}
);
}
正如我所说,完全相同的功能还有很多,只有这个不行,这让我更难解决。 感谢您提供的任何帮助!
你必须return承诺
function getAll(var1){
return $http.get(restURL+var1).then(
function(response){
return [].concat(response.data.var2)
}
);
}
或者您可以使用
$q
将您的工厂重写为 return 包含已解决承诺的对象
app.factory('appServicesProvider', function() {
return {
getAll: function(var1) {
var defer = $q.defer();
$http.get(restURL + var1).then(function(response) {
defer.resolve([].concat(response.data.var2));
}).catch(function(response, status) {
defer.reject(response.data.message);
});
return defer.promise;;
}
}
});