angular-croppie-module 无法正确导入@type/croppie
angular-croppie-module fail to import @type/croppie properly
我是 angular 5 的新手,正在努力在我的应用程序中实现 angular-croppie-module。
我试图在模块 github 上找到一些答案,但没有成功。
似乎 croppie.directive.d.ts 只能导入 'Croppie' 命名空间而不是 class。
结果,一旦我到达带有我得到的模块的页面
ERROR TypeError: __WEBPACK_IMPORTED_MODULE_1_croppie___default.a is not a constructor
我创建了一个 github 存储库来展示该问题的简单演示
https://github.com/ErwinSanquer/croppie-demo
谢谢,
我正在使用 angular4 并发现 croppie 本身很容易使用,然后您可以使用 croppie 文档找出要调用的方法。我刚做了:
npm 安装 croppie
然后创建一个组件来使用它(这里是组件的简化版本):
import { Component, OnInit, OnDestroy, Output, EventEmitter, Input } from '@angular/core';
import { Croppie } from 'croppie/croppie'; // Reference: http://foliotek.github.io/Croppie/
@Component({
selector: 'image-upload',
templateUrl: './image-upload.component.html',
styleUrls: ['./image-upload.component.scss']
})
export class ImageUploadComponent implements OnInit, OnDestroy {
uploadElement: any;
croppie: any;
imageChanged: boolean = false;
constructor() { }
ngOnInit() {
this.initCroppie();
this.initFileUpload();
}
initCroppie() {
const cropElement = document.getElementById('imageUploadItem');
this.croppie = new Croppie(cropElement, {
viewport: { width: 200, height: 200, type: 'circle' },
boundary: { width: 200, height: 200 },
enableOrientation: true
});
let preloadedImageUrl = Constants.DEFAULT_PROFILE_IMG_URL;
this.croppie.bind({
url: preloadedImageUrl,
zoom: 0
});
}
initFileUpload() {
this.uploadElement = document.getElementById('fileUploadInput');
this.uploadElement.addEventListener('change', this.onFileUpload.bind(this));
}
onFileUpload() {
if (this.uploadElement.files && this.uploadElement.files.length > 0) {
this.imageChanged = true;
const file = this.uploadElement.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = ((event: any) => {
this.croppie.bind({
url: event.target.result
});
});
}
}
rotateLeft() {
this.croppie.rotate(90);
this.imageChanged = true;
}
rotateRight() {
this.croppie.rotate(-90);
this.imageChanged = true;
}
getCroppieImage(quality: number, numCalls: number): Promise<any> {
return this.croppie.result({
type: 'blob',
size: {
width: 500,
height: 500
},
format: 'jpeg',
quality: quality,
circle: false
})
.then((imageDataBlob) => {
// If image size is still too large just call result again with lower quality
if (imageDataBlob.size > 500000 && numCalls < 3) {
quality = quality - 0.1;
numCalls++;
return this.getCroppieImage(quality, numCalls);
} else {
return imageDataBlob;
}
});
}
ngOnDestroy() {
this.uploadElement.removeEventListener('change', this.onFileUpload);
}
}
确保模板有一个带有 id='imageUploadItem' 的 div 供农作物居住,如果您允许用户上传图片(就像我在上面的组件中所做的那样),请确保您输入 type=file with id='fileUploadInput'.
更新:
该问题已在 0.0.6 版本中修复
https://github.com/gatimus/angular-croppie/issues/4
我是 angular 5 的新手,正在努力在我的应用程序中实现 angular-croppie-module。 我试图在模块 github 上找到一些答案,但没有成功。 似乎 croppie.directive.d.ts 只能导入 'Croppie' 命名空间而不是 class。 结果,一旦我到达带有我得到的模块的页面
ERROR TypeError: __WEBPACK_IMPORTED_MODULE_1_croppie___default.a is not a constructor
我创建了一个 github 存储库来展示该问题的简单演示 https://github.com/ErwinSanquer/croppie-demo
谢谢,
我正在使用 angular4 并发现 croppie 本身很容易使用,然后您可以使用 croppie 文档找出要调用的方法。我刚做了:
npm 安装 croppie
然后创建一个组件来使用它(这里是组件的简化版本):
import { Component, OnInit, OnDestroy, Output, EventEmitter, Input } from '@angular/core';
import { Croppie } from 'croppie/croppie'; // Reference: http://foliotek.github.io/Croppie/
@Component({
selector: 'image-upload',
templateUrl: './image-upload.component.html',
styleUrls: ['./image-upload.component.scss']
})
export class ImageUploadComponent implements OnInit, OnDestroy {
uploadElement: any;
croppie: any;
imageChanged: boolean = false;
constructor() { }
ngOnInit() {
this.initCroppie();
this.initFileUpload();
}
initCroppie() {
const cropElement = document.getElementById('imageUploadItem');
this.croppie = new Croppie(cropElement, {
viewport: { width: 200, height: 200, type: 'circle' },
boundary: { width: 200, height: 200 },
enableOrientation: true
});
let preloadedImageUrl = Constants.DEFAULT_PROFILE_IMG_URL;
this.croppie.bind({
url: preloadedImageUrl,
zoom: 0
});
}
initFileUpload() {
this.uploadElement = document.getElementById('fileUploadInput');
this.uploadElement.addEventListener('change', this.onFileUpload.bind(this));
}
onFileUpload() {
if (this.uploadElement.files && this.uploadElement.files.length > 0) {
this.imageChanged = true;
const file = this.uploadElement.files[0];
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = ((event: any) => {
this.croppie.bind({
url: event.target.result
});
});
}
}
rotateLeft() {
this.croppie.rotate(90);
this.imageChanged = true;
}
rotateRight() {
this.croppie.rotate(-90);
this.imageChanged = true;
}
getCroppieImage(quality: number, numCalls: number): Promise<any> {
return this.croppie.result({
type: 'blob',
size: {
width: 500,
height: 500
},
format: 'jpeg',
quality: quality,
circle: false
})
.then((imageDataBlob) => {
// If image size is still too large just call result again with lower quality
if (imageDataBlob.size > 500000 && numCalls < 3) {
quality = quality - 0.1;
numCalls++;
return this.getCroppieImage(quality, numCalls);
} else {
return imageDataBlob;
}
});
}
ngOnDestroy() {
this.uploadElement.removeEventListener('change', this.onFileUpload);
}
}
确保模板有一个带有 id='imageUploadItem' 的 div 供农作物居住,如果您允许用户上传图片(就像我在上面的组件中所做的那样),请确保您输入 type=file with id='fileUploadInput'.
更新:
该问题已在 0.0.6 版本中修复 https://github.com/gatimus/angular-croppie/issues/4