В моем ионном проекте я пишу сервис для возврата изображения base64, по которому щелкала собственная камера устройства, после вызова функции.
Проблема в том, что когда я вызываю функцию в сервисе, оператор return возвращает старое значение, а не обновленное значение, которое должно быть по нажатию изображения.
Например, я пытаюсь установить профиль пользователя, изображение, которое он показывает, является вторым последним нажатием на изображение, а не самым последним изображением.
Первоначально я сохранил значение в переменной и получил к нему доступ напрямую.
Позже я вернул значение при вызове функции
Обслуживание камеры
import { Injectable } from "@angular/core";
import { Camera, CameraOptions } from "@ionic-native/camera/ngx";
import { Platform } from "@ionic/angular";
@Injectable({
providedIn: "root"
})
export class CameraCordovaService {
constructor(private camera: Camera, public platform: Platform) {}
base64Image: string;
takePicture(): string {
const options: CameraOptions = {
quality: 30,
destinationType: this.camera.DestinationType.DATA_URL,
encodingType: this.camera.EncodingType.JPEG,
mediaType: this.camera.MediaType.PICTURE
};
this.platform.ready().then(() => {
this.camera.getPicture(options).then(
imageData => {
//this.base64Image = "data:image/jpeg;base64," + imageData;
let tempImg="data:image/jpeg;base64," + imageData;
this.base64Image=tempImg
console.log(this.base64Image);
},
err => {
// Handle error
console.log("Camera issue: " + err);
}
);
});
return this.base64Image;
}
}
Файл машинописного текста страницы, на которой используется этот плагин камеры
import { ActionSheetController } from "@ionic/angular";
import { CameraCordovaService } from "../plugins/camera-services/camera-cordova.service";
@Component({
selector: "app-tab2",
templateUrl: "tab2.page.html",
styleUrls: ["tab2.page.scss"]
})
export class Tab2Page {
imgProfile: string =
"data:image/png;base64,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";
constructor(
public Camera: CameraCordovaService,
public actionSheetController: ActionSheetController
) {}
async presentActionSheet() {
const actionSheet = await this.actionSheetController.create({
header: "Profile Picture",
buttons: [
{
text: "Camera",
role: "destructive",
icon: "camera",
handler: () => {
console.log("Camera");
this.imgProfile = this.Camera.takePicture();
console.log(this.imgProfile);a
}
},
{
text: "Gallery",
icon: "share",
handler: () => {
console.log("Gallery clicked");
}
},
{
text: "Cancel",
icon: "close",
role: "cancel",
handler: () => {
console.log("Cancel clicked");
}
}
]
});
await actionSheet.present();
}
}
ФАЙЛ HTML
<ion-item (click)="presentActionSheet()">
<ion-label>Avatar</ion-label>
<ion-avatar>
<img [src]="imgProfile" />
</ion-avatar>
</ion-item>
Что именно мне нужно сделать, чтобы возвращаемое значение было самым последним?