我在从Controller中的Service访问数据时遇到问题。 这是我服务的文件代码:
import {IHttpService} from 'Angular';
export class MyService {
public static $inject = ['$http'];
constructor(private $http:IHttpService, private getItems){
this.getItems= function() {
this.$http.get('items.json').then(function(response){
if(err){
console.error(err);
}
console.log(response.data);
return response.data;
});
}}}
和Controller的文件代码:
import {MyService} from './MyService';
export class MyController {
public:getData;
static inject: Array<string> = ['$http', '$scope', 'MyService'];
constructor(private $http:ng.IHttpService, private $scope:any, private MyService:any){
this.getData = function(){
MyService.getItems.then(function (data) {
this.getItems = data;
console.log(data);
});
}
}
有人能解释我的代码有什么问题吗?感谢。
答案 0 :(得分:0)
将函数声明更改为以下方式或使用Arrow
函数,以便保留类的this
(上下文)。此外,您必须从$http
方法返回getItems
承诺,否则您无法对其应用.then
方法来实现链接承诺。
getItems() {
//return promise here.
return this.$http.get('items.json').then((response) => {
if(err){
console.error(err);
}
console.log(response.data);
//returning data to chained promise.
return response.data;
});
}
答案 1 :(得分:0)
在getItems方法中返回promise,它应该是
this.getItems= function() {
return this.$http.get('items.json').then(function(response){
if(err){
console.error(err);
}
console.log(response.data);
return response.data;
});
}}}