- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我在我的 Ionic 2 应用程序中使用 cordova-plugin-camera。我可以成功拍照,然后提醒 selfieImage 的值 - 这显示了我的数据:图像/jpeg;base64,然后是我图像的 base64 编码版本 - 太棒了
takeRegistrationSelfie() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
correctOrientation: true,
cameraDirection: 1
}).then((imageData) => {
// imageData is a base64 encoded string
this.selfieImage = "data:image/jpeg;base64," + imageData;
}, (err) => {
console.log(err);
});
}
在我的模板中我有
<img [src]="selfieImage" *ngIf="selfieImage" />
此时 selfieImage 已定义,但我的图像为空 - 10 x 10 像素,灰色边框,无图像。
稍后在我的应用程序中,我将带有图像的 ajax 请求发送到我的后端 - 这工作正常并且图像被正确接收。
为什么图像不显示在我的模板中?
最佳答案
我发现我需要使用 DomSanitizer。有了这个,图像就可以工作了。
import { DomSanitizer } from '@angular/platform-browser';
在我的构造函数中我有...
private DomSanitizer: DomSanitizer
然后在我的模板中......
<img [src]="DomSanitizer.bypassSecurityTrustUrl(selfieImage)" class="registerImage" *ngIf="selfieImage" />
瞧,它有效:-)
编辑。我被要求提供我的代码的完整版本。我会在下面添加它。
register.ts
import { Component } from '@angular/core';
import { NavController, Platform, LoadingController } from 'ionic-angular';
import { Auth, FacebookAuth, User, UserDetails, IDetailedError } from '@ionic/cloud-angular';
import { DashboardPage } from '../dashboard/dashboard';
import { Http } from '@angular/http';
import { URLSearchParams } from "@angular/http"
import { Headers } from '@angular/http';
import { Camera } from 'ionic-native';
import { DomSanitizer } from '@angular/platform-browser';
import 'rxjs/add/operator/map';
/*
Generated class for the Register page.
See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
*/
@Component({
selector: 'page-register',
templateUrl: 'register.html'
})
export class RegisterPage {
public registerStep: number;
/* step 0 */
public candidateFirstName: string;
public candidateLastName: string;
public candidateDOB: string;
public candidatePhone: string;
public candidateGender: string;
/* step 1 */
public lookupPostcode: string;
public lookupAddresses: any;
public addressSelected: boolean = false;
public candidateAddress1: string;
public candidateAddress2: string;
public candidateTown: string;
public candidatePostcode: string;
/* step 2 */
public selfieImage: string;
/* step 3 */
public passportImage: string;
public registerResponse: any = {};
constructor(public platform: Platform, public navCtrl: NavController, public http: Http, public user: User, public auth:Auth, public loadingCtrl: LoadingController, private DomSanitizer: DomSanitizer) {
this.registerStep = 0;
}
doRegistration(step) {
if(step == 1) {
this.registerStep = 1;
}
else if(step == 2) {
this.registerStep = 2;
}
else if(step == 3) {
this.registerStep = 3;
}
else if(step == 4) {
this.registerStep = 4;
}
else if(step == 5) {
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
let urlSearchParams = new URLSearchParams();
urlSearchParams.append('action', 'register');
urlSearchParams.append('candidateFirstName', this.candidateFirstName);
urlSearchParams.append('candidateLastName', this.candidateLastName);
urlSearchParams.append('candidateDOB', this.candidateDOB);
urlSearchParams.append('candidatePhone', this.candidatePhone);
urlSearchParams.append('candidateGender', this.candidateGender);
urlSearchParams.append('candidateAddress1', this.candidateAddress1);
urlSearchParams.append('candidateAddress2', this.candidateAddress2);
urlSearchParams.append('candidateTown', this.candidateTown);
urlSearchParams.append('candidatePostcode', this.candidatePostcode);
urlSearchParams.append('selfieImage', encodeURIComponent(this.selfieImage));
urlSearchParams.append('passportImage', encodeURIComponent(this.passportImage));
urlSearchParams.append('candidateHash', this.user.id);
let body = urlSearchParams.toString()
this.http.post('http://www.example.com/api/index.php', body, {headers:headers}).subscribe(data => {
this.registerResponse = data;
this.user.set('candidateID', this.registerResponse.candidateID);
this.user.set('candidateDetailsSubmitted', 1);
this.user.save();
this.navCtrl.setRoot(DashboardPage);
});
}
}
takeRegistrationSelfie() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
correctOrientation: true,
cameraDirection: 1
}).then((imageData) => {
this.selfieImage = "data:image/jpeg;base64," + imageData;
}, (err) => {
console.log(err);
});
}
chooseRegistrationSelfie() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
correctOrientation: true,
cameraDirection: 1,
sourceType: 0,
mediaType: 0
}).then((imageData) => {
this.selfieImage = "data:image/jpeg;base64," + imageData;
}, (err) => {
console.log(err);
});
}
takeRegistrationPassport() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
correctOrientation: true
}).then((imageData) => {
this.passportImage = "data:image/jpeg;base64," + imageData;
}, (err) => {
console.log(err);
});
}
chooseRegistrationPassport() {
Camera.getPicture({
destinationType: Camera.DestinationType.DATA_URL,
targetWidth: 1000,
targetHeight: 1000,
correctOrientation: true,
sourceType: 0,
mediaType: 0
}).then((imageData) => {
this.passportImage = "data:image/jpeg;base64," + imageData;
}, (err) => {
console.log(err);
});
}
lookupButton() {
let loading = this.loadingCtrl.create({
spinner: 'bubbles',
content: 'Looking up address ...',
duration: 5000
});
loading.present();
let postcode = this.lookupPostcode.replace(/\W/g, '');
this.http.get('https://api.getAddress.io/v2/uk/'+postcode+'?api-key=KEY&format=true').map(res => res.json().Addresses).subscribe(data => {
this.lookupAddresses = data;
loading.dismiss();
});
}
setAddress(address1, address2, town) {
this.candidateAddress1 = address1;
this.candidateAddress2 = address2;
this.candidateTown = town;
this.candidatePostcode = this.lookupPostcode;
this.addressSelected = true;
}
ionViewDidLoad() {
console.log('Hello RegisterPage Page');
}
}
register.html
<!--
Generated template for the Register page.
See http://ionicframework.com/docs/v2/components/#navigation for more info on
Ionic pages and navigation.
-->
<ion-header>
<ion-navbar>
<ion-title>Complete registration</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding class="login-special">
<div *ngIf="registerStep == 0 ">
<ion-list>
<ion-item>
<ion-label floating>Your first name</ion-label>
<ion-input [(ngModel)]="candidateFirstName" type="text" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Your last name</ion-label>
<ion-input [(ngModel)]="candidateLastName" type="text" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Your telephone number</ion-label>
<ion-input [(ngModel)]="candidatePhone" type="tel" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Your date of birth</ion-label>
<ion-datetime displayFormat="DD/MM/YYYY" [(ngModel)]="candidateDOB"></ion-datetime>
</ion-item>
<br />
<ion-label class="gender-select-title">Choose your gender</ion-label>
<ion-list radio-group [(ngModel)]="candidateGender" class="two-col-selector">
<ion-item>
<ion-label>Male</ion-label>
<ion-radio value="1"></ion-radio>
</ion-item>
<ion-item>
<ion-label>Female</ion-label>
<ion-radio value="2"></ion-radio>
</ion-item>
</ion-list>
</ion-list>
<div>
<button [disabled]="!candidateFirstName || !candidateLastName || !candidatePhone || !candidateDOB || !candidateGender" ion-button color="primary" full (click)="doRegistration(1)">
Next step
</button>
</div>
</div>
<div *ngIf="registerStep == 1 ">
<ion-list>
<ion-item *ngIf="!addressSelected" class="address-finder">
<ion-label floating>Enter Postcode</ion-label>
<ion-input [(ngModel)]="lookupPostcode" type="text" value=""></ion-input>
</ion-item>
<button *ngIf="!addressSelected" ion-button class="button find-address" (click)="lookupButton()">FIND YOUR ADDRESS</button>
<div *ngIf="!addressSelected">
<p *ngIf="lookupAddresses?.length > 0">Select your address from the list below</p>
<div *ngFor="let a of lookupAddresses" class="address-list">
<div (click)="setAddress(a[0], a[1], a[3])" class="address-item">{{ a[0] }}</div>
</div>
<a class="text-link" (click)="setAddress('', '', '')">Address not found? Click here.</a>
</div>
<div *ngIf="addressSelected">
<ion-item>
<ion-label floating>Address line 1</ion-label>
<ion-input [(ngModel)]="candidateAddress1" type="text" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Address line 2</ion-label>
<ion-input [(ngModel)]="candidateAddress2" type="text" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Town</ion-label>
<ion-input [(ngModel)]="candidateTown" type="email" value=""></ion-input>
</ion-item>
<ion-item>
<ion-label floating>Postcode</ion-label>
<ion-input [(ngModel)]="candidatePostcode" type="text" value=""></ion-input>
</ion-item>
</div>
</ion-list>
<div>
<button *ngIf="addressSelected" [disabled]="!candidateAddress1 || !candidateTown || !candidatePostcode" ion-button color="primary" full (click)="doRegistration(2)">
Next step
</button>
</div>
</div>
<div *ngIf="registerStep == 2 ">
<div *ngIf="selfieImage == null">
<h1>Add a selfie of yourself</h1>
<p class="body-text">We need to see a picture of you to help us verify your identity. It won't be public and only our computer will see it.</p>
<div class="selfie-placeholder ion-ios-person"></div>
<div class="button-container">
<button ion-button color="primary" full (click)="takeRegistrationSelfie()">
Take a selfie
</button>
<button ion-button color="primary" full (click)="chooseRegistrationSelfie()">
Choose a selfie
</button>
</div>
</div>
<div *ngIf="selfieImage">
<img [src]="DomSanitizer.bypassSecurityTrustUrl(selfieImage)" class="registerImage" *ngIf="selfieImage" />
<div class="button-container">
<button ion-button color="light" full (click)="takeRegistrationSelfie()">
Take it again?
</button>
<button ion-button color="light" full (click)="chooseRegistrationSelfie()">
Choose another?
</button>
</div>
<button ion-button color="secondary" full (click)="doRegistration(3)" class="next-step-btn">
Happy? Next step
</button>
</div>
</div>
<div *ngIf="registerStep == 3 ">
<div *ngIf="passportImage == null">
<h1>Add a passport photo</h1>
<p class="body-text">We need proof that you have the right to work in the UK. A picture of your passport is enough for now.</p>
<div class="button-container">
<button ion-button color="primary" full (click)="takeRegistrationPassport()">
Take a photo
</button>
<button ion-button color="primary" full (click)="chooseRegistrationPassport()">
Choose a photo
</button>
</div>
</div>
<div *ngIf="passportImage">
<img [src]="DomSanitizer.bypassSecurityTrustUrl(passportImage)" class="registerImage" *ngIf="passportImage" />
<div class="button-container">
<button ion-button color="light" full (click)="takeRegistrationPassport()">
Take it again?
</button>
<button ion-button color="light" full (click)="chooseRegistrationPassport()">
Choose another?
</button>
</div>
<button ion-button color="secondary" full (click)="doRegistration(4)">
Happy? Next step
</button>
</div>
</div>
<div *ngIf="registerStep == 4 ">
<h3>The legal bit</h3>
<div class="scrollable">
<h4>Terms and Conditions</h4>
<p>1. Lorem ipsum dolor</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam feugiat mi in justo mollis faucibus. Proin eu sollicitudin nibh. Quisque blandit pulvinar nisl, vitae aliquet metus vulputate eget. Cras ac sagittis enim. Fusce mattis, ante ac tempus auctor, lacus lectus dignissim dui, eu venenatis tellus mi a ante. Proin blandit diam mauris, eu vestibulum sapien ullamcorper eget. Integer blandit a risus ut interdum. Cras neque urna, tempor ullamcorper placerat feugiat, mollis eu dolor.</p>
<p>Proin eget consectetur ligula. Quisque fringilla eu est in rhoncus. In sollicitudin est nec ligula euismod, a euismod nulla vehicula. Vestibulum non vestibulum lorem, ac pharetra nisl. Donec erat nibh, dignissim vulputate dictum a, aliquet in leo. Maecenas facilisis sem vel est cursus, sagittis rutrum massa blandit. Vestibulum faucibus enim vel lorem auctor bibendum. Proin at mi lorem. </p>
</div>
<ion-item>
<ion-label>I’ve read and accept the Terms</ion-label>
<ion-checkbox [(ngModel)]="acceptTerms" color="default" checked="false"></ion-checkbox>
</ion-item>
<ion-item>
<ion-label>I’ve submitted <strong>only</strong> my own ID</ion-label>
<ion-checkbox [(ngModel)]="ownID" color="default" checked="false"></ion-checkbox>
</ion-item>
<button [disabled]="!acceptTerms || !ownID" margin-top ion-button color="secondary" full (click)="doRegistration(5)">
Complete sign up
</button>
</div>
</ion-content>
关于cordova - 使用 cordova-plugin-camera 显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42785838/
我使用plugman命令在cordova中创建了一个插件 它创建了所有必需的文件。然后我在插件中添加了android平台。 然后我尝试将它添加到 cordova 应用程序中。我成功添加了它,但是当我尝
我使用plugman命令在cordova中创建了一个插件 它创建了所有必需的文件。然后我在插件中添加了android平台。 然后我尝试将它添加到 cordova 应用程序中。我成功添加了它,但是当我尝
我正在尝试在较旧的 Atrix 上安装一个应用程序,在 S3 上运行良好。搜索论坛可能的问题是SDK版本较高(Atrix是4.0.4)。修复显然是在设置 API 级别。 但是当我运行 cordova
使用 cordova build在一个为期一年的项目中提出: :processDebugResources my_project/platforms/android/build/intermediat
我有一个可以创建文件的可运行应用程序。 我正在寻找一种工作后数小时从cordova应用程序中删除文件的方法。我似乎无法使其正常工作。 这是用于创建和删除文件的代码: function crea
有什么区别吗Cordova 构建 Android 和 Cordova 准备 Android 命令? Reference is added here 最佳答案 准备将您的 www Assets 和任何插
我检查了文档,但没有找到关于此命令的明确说明。 那么,有谁知道cordova prepare命令的作用是什么? 是否更新特定于平台的www文件夹? 如果是,它将复制根www的全部内容吗? 它会更新平台
我们正在开发正在使用Cordova(专用于Ionic)的移动应用程序,并且正在使用PhoneGap PushPlugin和Amazon SNS进行推送通知。反过来,这会撞到我们与Amazon SNS进
我正在使用Vue,Webpack和Cordova。 Videos 如果我在没有Cordova的情况下加载页面,并且在Firefox浏览器中,则可以使用Youtube视频上的全屏图
因此,我尝试在我的(正在运行的)Ionic应用程序中安装一个新插件,该文件名为https://ionicframework.com/docs/native/firebase-dynamic-links
我像这样安装了cordova: C:\Windows\system32>npm install -g cordova 我明白了: C:\Users\cyril\AppData\Roaming\npm\
我有一个 cordova 应用程序,我使用以下代码捕获了后退按钮: document.addEventListener("backbutton", function (e) { bac
如何在 Cordova 中的蓝牙设备和 Android/iOS 之间发送和接收一系列数据字节? 我的项目的详细信息: 我正在开发一个蓝牙传感器设备。设备以一系列字节的形式发送数据。它还对设备 API
我是 cordova 开发的新手。我使用 Onsen UI (1.2.1) 作为布局框架。ons-toolbar 上的标题有问题。 someTextHere 如果我在 ripple 上运行
我有一个启用了平台浏览器的 Cordova 应用程序。我想在 Chrome 中使用摄像头,但调用摄像头根本没有任何反馈。它在我的 Android 设备上就像一个魅力。 我通过这个命令启动:cordov
我对thid docs https://firebase.google.com/docs/android/setup#available_libraries中提到的根级和应用程序级的路径目录感到困惑
喜欢这些插件 https://github.com/ArchieGoodwin/SilentShot https://github.com/alongubkin/phonertc 他们没有 tarba
我有一个 Angular 2 应用程序,我正在将其构建到 cordova 中并部署到 Android/IOS。我没有使用 ionic,我见过许多使用 ionic 的解决方案,但我现在无法将整个项目转换
当我发出命令时,在带有 Cordova 的 Ionic 3 中: ionic cordova run android --emulate 它给出以下消息: BUILD FAILED in 3s
我无法在 ionic 5.2.4v 中安装软件包 cordova-res 并收到以下错误。 命令:cordova-res C:\hanu\cordova-res-master\cordova-res
我是一名优秀的程序员,十分优秀!