Angular 角度4可观测和离子3-前2次起作用,然后说不是一个函数
我有个奇怪的问题 我有一个名为feed的页面,其中包含文件:feed.ts和feed.module.ts 在feed.ts上,我有以下功能:Angular 角度4可观测和离子3-前2次起作用,然后说不是一个函数,angular,ionic3,observable,Angular,Ionic3,Observable,我有个奇怪的问题 我有一个名为feed的页面,其中包含文件:feed.ts和feed.module.ts 在feed.ts上,我有以下功能: likeImage(image){ console.log("Right before subscribe"); this.imageMng.likeImage(image).subscribe((data) => { image.likes_image = data.status; image.numb
likeImage(image){
console.log("Right before subscribe");
this.imageMng.likeImage(image).subscribe((data) => {
image.likes_image = data.status;
image.numberOfLikes = data.numberOfLikes;
});
}
正在订阅image-management.ts
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
//this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(图像):可观察
我做错了什么?在使用“promises”(不在ionic上)时,在类方法内调用“this”函数时,我遇到了类似的问题
“this”始终是调用方法的对象。如果你想保留“这个”:
var that = this;
所以你可以写:
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
// preserve this
let that = this;
return Observable.create(observer => {
that.http.post(that.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
that.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(图像):可观察{
让数据=新的URLSearchParams();
data.append('image\u id',image.id);
data.append('access_token',this.userMng.getToken());
//保存这个
让那=这;
返回可观察的。创建(观察者=>{
this.http.post(this.likeLocal,data.map)(res=>res.json())
.订阅(
数据=>{
如果(data.status==“已恢复”| | data.status==“已恢复”){
that.likeImage=data.status;
接下来({status:true,numberOfLikes:data.likes});
//observer.complete();
}
如果(data.status==“已删除”){
下一步({status:false,numberOfLikes:data.likes});
//observer.complete();
}
observer.complete();
},
错误=>{
控制台日志(err);
观察者:下一个(错误);
//observer.complete();
}
);
});
}
让我知道。我在使用“承诺”时在类方法内调用“this”函数时遇到了类似的问题(不在ionic上)
“this”始终是调用方法的对象。如果你想保留“这个”:
var that = this;
所以你可以写:
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
// preserve this
let that = this;
return Observable.create(observer => {
that.http.post(that.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
that.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(图像):可观察{
让数据=新的URLSearchParams();
data.append('image\u id',image.id);
data.append('access_token',this.userMng.getToken());
//保存这个
让那=这;
返回可观察的。创建(观察者=>{
this.http.post(this.likeLocal,data.map)(res=>res.json())
.订阅(
数据=>{
如果(data.status==“已恢复”| | data.status==“已恢复”){
that.likeImage=data.status;
接下来({status:true,numberOfLikes:data.likes});
//observer.complete();
}
如果(data.status==“已删除”){
下一步({status:false,numberOfLikes:data.likes});
//observer.complete();
}
observer.complete();
},
错误=>{
控制台日志(err);
观察者:下一个(错误);
//observer.complete();
}
);
});
}
让我知道。解决了
在文件image-management.ts的函数likeImage(image:observeable)中,我有一个.likeImage=data.status,它将覆盖likeImage
修复方法:image-management.ts
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
//this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(图像):可观察{
让数据=新的URLSearchParams();
data.append('image\u id',image.id);
data.append('access_token',this.userMng.getToken());
返回可观察的。创建(观察者=>{
this.http.post(this.likeLocal,data.map)(res=>res.json())
.订阅(
数据=>{
如果(data.status==“已恢复”| | data.status==“已恢复”){
//this.likeImage=data.status;
接下来({status:true,numberOfLikes:data.likes});
//observer.complete();
}
如果(data.status==“已删除”){
下一步({status:false,numberOfLikes:data.likes});
//observer.complete();
}
observer.complete();
},
错误=>{
控制台日志(err);
观察者:下一个(错误);
//observer.complete();
}
);
});
}
感谢苏拉杰·拉奥 解决了
在文件image-management.ts的函数likeImage(image:observeable)中,我有一个.likeImage=data.status,它将覆盖likeImage
修复方法:image-management.ts
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(image): Observable<any> {
let data = new URLSearchParams();
data.append('image_id', image.id);
data.append('access_token', this.userMng.getToken());
return Observable.create(observer => {
this.http.post(this.likeLocal, data).map(res => res.json())
.subscribe(
data => {
if (data.status == "restored" || data.status == "liked") {
//this.likeImage = data.status;
observer.next({status: true, numberOfLikes: data.likes});
//observer.complete();
}
if (data.status == "deleted") {
observer.next({status: false, numberOfLikes: data.likes});
//observer.complete();
}
observer.complete();
},
err => {
console.log(err);
observer.next(err);
//observer.complete();
}
);
});
}
likeImage(图像):可观察{
让数据=新的URLSearchParams();
data.append('image\u id',image.id);
data.append('access_token',this.userMng.getToken());
返回可观察的。创建(观察者=>{
this.http.post(this.likeLocal,data.map)(res=>res.json())
.订阅(
数据=>{
如果(data.status==“已恢复”| | data.status==“已恢复”){
//this.likeImage=data.status;
接下来({status:true,numberOfLikes:data.likes});
//observer.complete();
}
如果(data.status==“已删除”){
下一步({status:false,numberOfLikes:data.likes});
//observer.complete();
}
observer.complete();
},
错误=>{
控制台日志(err);
观察者:下一个(错误);
//observer.complete();
}
);
});
}
感谢苏拉杰·拉奥 不幸的是,这不起作用。我尝试了你写的东西,并且在feed.ts中有一个“let that=this”。但以上这些都不起作用。不幸的是,这不起作用。我尝试了你写的东西,并且在feed.ts中有一个“let that=this”。但是以上都不起作用。这个问题看起来像image-management.ts中的函数,你的函数likeImage
与一个变量共享它的名称<代码>this.likeImage=data.status代码>。因此,在某个时间点,函数会更改为status。您的IDE/linter是否会为此抛出错误?我正在使用WebStorm,这一点都没有抱怨。但你是对的,现在一切都正常了谢谢问题看起来像image-management.ts中的函数,您的函数likeImage
与变量共享其名称<代码>this.likeImage=data.status代码>。所以有时候