Невозможно вернуть обновленное значение (base64Image) при вызове функции - PullRequest
0 голосов
/ 16 апреля 2019

В моем ионном проекте я пишу сервис для возврата изображения 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>

Что именно мне нужно сделать, чтобы возвращаемое значение было самым последним?

...