#angular #ionic-framework #ionic3 #ionic-native
#angular #ionic-framework #ionic3 #ионный-родной
Вопрос:
В моем проекте ionic я пишу сервис для возврата изображения 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,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAUVBMVEXl5uivtLjP09SssbWrsrXk5efo6eussbazuLuwtbjg4ePm6OjHy867wMPi5OXBxcjZ3N64vL/O0dPW2dvHys2/wsW1ur/c3uLHys7T1NfV2dlO2RIyAAAHHUlEQVR4nO2d2bqrKBBGRRDFeUr2cb//gzaacRuTOFBVaLNOX3Sfvsn/FTVQAuV5DofD4XA4HA6Hw FwOBwOh8PhcDgcDse kFImcdl0XV3XXdP8BPovqH TOaSXN2kWCcF5yG wrO3i5AgqZVC2lRYm2BgtUxVd7CXUP3ELMimLSPAXcQ VQmRdvltLyryutJ3e67uqjNpSegH1r12OzFP1ujQnETwr92fHPA0/rM5XQ2blzvzRn2u/h8Yi3o8dZVktsd9NovKpf/hcknSFvh6R7cKMMq6WLtA7Ievslyi71fp6eEst4CtrV hdYhZTS/hMsVFgXwBYLTHbtEQvCGVv s/Pmy04wBtqJW8I1mTBaRorrRhkxgQyVlKrmeJkwAcf2BduZGvQgn24sW07JWujFtQSK2pJI8rvO92F8NSqaJNHhvX1Ejubdowno054ReXUsu4kPoRAXaJas05j0z54k hbIlFuL7enUbas09JwonjACyuMKAHi6F2iFdVbDbRGB4UZtTpNAGhCxkL6jZTxcm1ERZ/2QU1ogyd2gF44KCRP xWsQCY48U6xBDYh R4DrJx5gnQvHMgQXCATHaFC8DgzKKSMNfIEL1AvU8JYEwBtm/5C2SBuEBYp7Q5j64emmZzpoil0ur8iqBwxgepejOE10TJNcNyQ0BEl5N73D1T9b1kgCWScapOIFGjoNom5Qoo0jBOVpjGWG5IFU7g 6ZiQKJhuOxu0CJrtBV6y0OmCRiFSVdoT0ShsETb4F5SgUYjQo7lBpRBNoBIUAj3PKTQIjULEVUql0OwpqM8KibIFnkJGsn2C/nL4DE3GP35d6jV4Con2FjGaQqovbDnWFp9xovtCwRlNIVGfRmZoColOf FtECOqbuIvVs/7RCTQi3EEEh5WwAo1guzUkCxwMiLhMVOkuo3wgCJOVcNrOoUS59sM5bkvlKYw6e2ZHEEh5SLtCzcET6Q9nIhw7Iv6gCnwEeH pDftOegkBf54IYhaNA ga1NBdZbmDvT3mYj LinswShe099GgG0MW2BCnfUBBQor7udBfs 34MbMAFhOpL8wcwXq0oUl1w81CVCwsejVAZiGjVVPnEAcAOOtLWu0Z/XzXh8EWvZshDT5dMsA5T2SSQLDLRtrEsWD2GhWpN9STFAaLMFFSq1mEnOJn9sp0JOmcoZlT9M8kZhZqFqgPcXMmDLavlLJ7gDNY/ujdFQ3D azrW/DI/ufMJU1W6 RZ/Z64IN1b wO pQFfad5rKvDeRbvRWD/0u5ijSGzous0G/m7LKhylu7v8fn6zOeK5Ky1P4S Ir0um6NR8Cjdo74LZcH4549TociaXQ AkLJsIyEmS3IuhMp8b7fmuyOT0i/O6jKZ5KqNh1xFWdocQN4V6cVlU6dFNlAUqV/GwZEmzfQkl3E6 p9kkLZn3/vfIYfBR0GQ53mcxxr9L7n z/7/aEMm zVmLywuS39wvyqKFNMxles/fWRVUVVlpyKtf8s493bnkb2j6cBSZOeon3l0m4Sk2K3JcbvIP8RXLTZruyZOeovuYPPUi6uLSvXWml ZasMylaVdbPkor8SL/fbMFygb6Qw5O6VlbmeW1D7X9dOrtjYUtauyrC0Dy0TqlZlWG5oXY0IeZb491bj0miJavTLfoU1Z1XaIbArxabLaNpVRHVM6pc7VP6maMVltA1xkfkBVE8jcrwTGu4mqIPmWKH9aAx38eXBedYHEtaRssuldLZhIhdupagyNzFmkkRdoX/Z9cxNzFmvEsGN3Rnu0hUKjbIjsd9fIWkh/lLHxUzPLCVkKFlXz1HhttgoeAR1489Hy31c4wCjIxIYF oAz018aZQ1VXa FV0bNuOJzIDz9RQVDbR25fPQtCua8EfHVsoWoXwMSZUxQg85GbD8fJhtqEZ/h1UZXlKlAe6JlLdumliI9KbCNDc6YW5Xl37L qJ p0bDgrIw3SWywxQvMqutD0uSxbXBEsVxhqei28ivgiyXGajdL9IJYuFDxHiozxjJfhBicCs6iE/77yINjZufFZB VzARzLyzqWpT6p65l1n23AO0VNghmPV2H96IlALz4LjFBG8sBwvdoI9s9m5DNcEWs8T9wfLk DDsYFoUv6xTzAWsoPo71hJ 5icGHcR9IT gBo97f70swJlJiEOVvsuIBwsyFd30bzMk4sKjpZ/qSw5iQKdFOLdPjmLBn8tXaw5iQvdnvHyWQDij1GkeljZ951zOx3ccbhIfDS2GDOWIMBfEztuH GqSfecn6iPNGkIhGi3SvDcT3jJ5h2mWT zOjlIg3cBOPP2/VH6tiu/Fcfido81QQEc9J/4BuqBW2z254xEX6xxH9QypkT4Hm3yEVPs1QkifqHwPC8/7iEF3EF8RjbERytLL7wlNVgzGHg4DwdFf4w4/JYxec1/4x6cX9B6K4hoS6rANDAAAAAElFTkSuQmCC";
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>
Что именно мне нужно сделать, чтобы возвращаемое значение было самым последним?
Комментарии:
1. первый раз, когда вы делаете снимок, это то, что вы можете видеть в представлении или нет?
2. Отображается символ для изображения, которое не найдено
3. таким образом, вы не можете отобразить. я прав? когда вы снова берете изображение, тогда вы делаете первое изображение?
4. Изображение не отображается при первом нажатии