- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
import { Component, OnInit, ViewChild } from '@angular/core';
import { FormBuilder, FormGroup, Validators, FormControl } from '@angular/forms';
import { ModalController, NavParams } from '@ionic/angular';
import { SelecttopicPage } from '../selecttopic/selecttopic.page';
import { ActionSheetController } from '@ionic/angular';
import { Platform } from '@ionic/angular';
import { Storage } from '@ionic/storage';
import { MediaCapture, MediaFile, CaptureError, CaptureVideoOptions } from '@ionic-native/media-capture';
import { Media } from '@ionic-native/media';
import { File } from '@ionic-native/file';
import { Diagnostic } from '@ionic-native/diagnostic';
import { AndroidPermissions } from '@ionic-native/android-permissions';
const MEDIA_FILES_KEY = 'mediaFiles';
@Component({
selector: 'app-uploadvid',
templateUrl: './uploadvid.page.html',
styleUrls: ['./uploadvid.page.scss'],
})
export class UploadvidPage implements OnInit {
@ViewChild('myvideo') myVideo: any;
//uploadVid: FormGroup;
public filePath: string;
public mediaFiles = [];
public isAndroid: boolean;
uploadVid = new FormGroup({
title: new FormControl('', Validators.required),
topic: new FormControl({value: '', disabled: true}, Validators.required),
target: new FormControl('', Validators.required)
});
PERMISSION = {
WRITE_EXTERNAL: this.diagnostic.permission.WRITE_EXTERNAL_STORAGE,
READ_EXTERNAL: this.diagnostic.permission.READ_EXTERNAL_STORAGE,
CAMERA: this.diagnostic.permission.CAMERA,
};
constructor(public formBuilder: FormBuilder,
public modalCtrl: ModalController,
public platform: Platform,
public actionSheetController: ActionSheetController,
public storage: Storage,
public mediaCapture: MediaCapture,
public media: Media,
public file: File,
private diagnostic: Diagnostic,
private androidPermissions: AndroidPermissions) {
// this.uploadVid = formBuilder.group({
// title: ['', Validators.compose([Validators.required])],
// topic: ['', Validators.compose([Validators.required])],
// target: ['', Validators.compose([Validators.required])]
// });
}
ngOnInit() {
this.checkIfMobile();
}
loadStoredVideo(){
this.storage.get(MEDIA_FILES_KEY).then(res => {
this.mediaFiles = JSON.parse(res) || [];
});
}
checkIfMobile(){
if(this.platform.is('android')){
this.isAndroid = true;
}else{
this.isAndroid = false;
}
}
async openModal() {
const modal = await this.modalCtrl.create({
component: SelecttopicPage,
//componentProps: { value: 123 }
});
modal.onDidDismiss((topic) => {
console.log("topic2: "+topic);
this.uploadVid.controls['topic'].setValue(topic);
})
return await modal.present();
}
// for web & ios
handleFileSelect(evt){
this.filePath = evt.target.files;
alert("Selected Video: "+this.filePath);
}
// for android
async openVidOption() {
const actionSheet = await this.actionSheetController.create({
header: "Albums",
buttons: [{
text: 'Camera',
role: 'destructive',
icon: 'camera',
handler: () => {
console.log('Delete clicked');
}
}, {
text: 'Gallery',
role: 'cancel',
icon: 'folder-open',
handler: () => {
console.log('Cancel clicked');
}
}]
});
await actionSheet.present();
}
checkAndroidPerm(){
if(this.platform.is('android')){
//this.requestAllPermissions();
this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.CAMERA).then(
(success) => {console.log('Succes granted the permissions');
this.captureVideo()},
(err) => {this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.CAMERA)}
);
this.androidPermissions.requestPermissions([this.androidPermissions.PERMISSION.CAMERA, this.diagnostic.permission.WRITE_EXTERNAL_STORAGE, this.diagnostic.permission.WRITE_EXTERNAL_STORAGE]);
}
}
// requestAllPermissions(){
// const permissions = Object.keys(this.PERMISSION).map(k => this.PERMISSION[k]);
// this.diagnostic.requestRuntimePermissions(permissions).then((status) => {
// alert(JSON.stringify(status));
// }, error => {
// alert('Error: '+ error);
// });
// }
captureVideo(){
let options: CaptureVideoOptions = {
limit: 1,
duration: 30
}
this.mediaCapture.captureVideo(options).then((res: MediaFile[]) => {
//this.storeMediaFiles(res);
let capturedFile = res[0];
console.log('capturedFile: '+capturedFile);
let fileName = capturedFile.name;
let dir = capturedFile['localURL'].split('/');
dir.pop();
let fromDirectory = dir.join('/');
let toDirectory = this.file.dataDirectory;
this.file.copyFile(fromDirectory, fileName, toDirectory, fileName).then(res => {
let url = res.nativeURL.replace(/^file:\/\//, '');
this.storeMediaFiles([{name: fileName, size: capturedFile.size, localURL: url}]);
});
});
}
storeMediaFiles(files){
this.storage.get(MEDIA_FILES_KEY).then(res =>{
if(res){
let arr = JSON.parse(res);
arr = arr.concat(files);
this.storage.set(MEDIA_FILES_KEY, JSON.stringify(arr));
}else{
this.storage.set(MEDIA_FILES_KEY, JSON.stringify(files));
}
this.mediaFiles = this.mediaFiles.concat();
})
}
playFile(myFile){
console.log('play: ', myFile);
let video = this.myVideo.nativeElement;
video.src = myFile.localURl;
}
}
// config.xml
<plugin name="cordova-plugin-whitelist" spec="1.3.3" />
<plugin name="cordova-plugin-device" spec="2.0.2" />
<plugin name="cordova-plugin-ionic-webview" spec="^2.0.0" />
<plugin name="cordova-plugin-ionic-keyboard" spec="^2.0.5" />
<plugin name="cordova-plugin-splashscreen" spec="^5.0.2" />
<plugin name="cordova-sqlite-storage" spec="^2.3.3" />
<plugin name="cordova-plugin-filechooser" spec="^1.0.1" />
<plugin name="cordova-plugin-filepicker" spec="^1.1.5" />
<plugin name="cordova-plugin-filepath" spec="^1.4.2" />
<plugin name="cordova-plugin-camera" spec="^4.0.3" />
<plugin name="cordova-plugin-file" spec="^6.0.1" />
<plugin name="cordova-plugin-media" spec="^5.0.2">
<plugin name="cordova-plugin-android-permissions" spec="^1.0.0" />
<plugin name="cordova.plugins.diagnostic" spec="^4.0.8" />
<engine name="ios" spec="4.5.5" />
<engine name="android" spec="7.0.0" />
<plugin name="cordova-plugin-media-capture" spec="^3.0.2" />
// package.json
"dependencies": {
"@angular/common": "6.0.9",
"@angular/core": "6.0.9",
"@angular/forms": "6.0.9",
"@angular/http": "6.0.9",
"@angular/platform-browser": "6.0.9",
"@angular/platform-browser-dynamic": "6.0.9",
"@angular/router": "6.0.9",
"@ionic-native/android-permissions": "^4.12.0",
"@ionic-native/core": "5.0.0-beta.14",
"@ionic-native/diagnostic": "^4.12.0",
"@ionic-native/file": "^4.12.0",
"@ionic-native/file-chooser": "^4.12.0",
"@ionic-native/file-path": "^4.12.0",
"@ionic-native/media": "^4.12.0",
"@ionic-native/media-capture": "^4.12.0",
"@ionic-native/splash-screen": "5.0.0-beta.14",
"@ionic-native/status-bar": "5.0.0-beta.14",
"@ionic/angular": "4.0.0-beta.0",
"@ionic/lab": "^1.0.2",
"@ionic/ng-toolkit": "1.0.0",
"@ionic/schematics-angular": "1.0.1",
"@ionic/storage": "^2.1.3",
"angular-progress-http": "^1.0.0",
"cordova-android": "7.0.0",
"cordova-ios": "4.5.5",
"cordova-plugin-android-permissions": "^1.0.0",
"cordova-plugin-camera": "^4.0.3",
"cordova-plugin-device": "^2.0.2",
"cordova-plugin-file": "^6.0.1",
"cordova-plugin-filechooser": "^1.0.1",
"cordova-plugin-filepath": "^1.4.2",
"cordova-plugin-filepicker": "^1.1.5",
"cordova-plugin-ionic-keyboard": "^2.1.2",
"cordova-plugin-ionic-webview": "^2.0.2",
"cordova-plugin-media": "^5.0.2",
"cordova-plugin-media-capture": "^3.0.2",
"cordova-plugin-splashscreen": "^5.0.2",
"cordova-plugin-whitelist": "^1.3.3",
"cordova-sqlite-storage": "^2.3.3",
"cordova.plugins.diagnostic": "^4.0.8",
"core-js": "^2.5.3",
"rxjs": "^6.2.2",
"rxjs-compat": "^6.2.2",
"zone.js": "^0.8.26"
},
"devDependencies": {
"@angular/cli": "6.0.8",
"@angular/compiler": "6.0.9",
"@angular/compiler-cli": "6.0.9",
"@angular/language-service": "6.0.9",
"@angular-devkit/architect": "0.7.0-rc.3",
"@angular-devkit/build-angular": "0.7.0-rc.3",
"@angular-devkit/core": "0.7.0-rc.3",
"@angular-devkit/schematics": "0.7.0-rc.3",
"@types/jasmine": "~2.8.6",
"@types/jasminewd2": "~2.0.3",
"@types/node": "~10.5.2",
"codelyzer": "~4.4.2",
"jasmine-core": "~2.99.1",
"jasmine-spec-reporter": "~4.2.1",
"karma": "~2.0.2",
"karma-chrome-launcher": "~2.2.0",
"karma-coverage-istanbul-reporter": "~2.0.0",
"karma-jasmine": "~1.1.1",
"karma-jasmine-html-reporter": "^0.2.2",
"protractor": "~5.4.0",
"ts-node": "~7.0.0",
"tslint": "~5.11.0",
"typescript": "~2.7.2"
}
最佳答案
我所要做的就是:
在依赖项中,而不是 "@ionic-native/media-capture": "^4.12.0"
我写了 "@ionic-native/media-capture": "^5.0.0-beta.14"
.之后我输入 npm update
在 CLI 中。在我的页面组件中,我使用了 import { MediaCapture, MediaFile, CaptureError, CaptureImageOptions } from '@ionic-native/media-capture/ngx';
.这里的重要部分是/ngx
如本 link 中所述.好吧,我必须为 AndroidPermissions、Diagnostic、Media 和 File 执行此操作。那个问题解决了之后。希望它能帮助别人。
关于ionic-framework - Ionic v4 Uncaught TypeError : Object(. ..) 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52004102/
我遵循了一本名为“Sitepoint Full Stack Javascript with MEAN”的书中的教程,我刚刚完成了第 6 章,应该已经创建了一个带有“数据库”的“服务器”。数据库只不过是
在 Jquery 中,我创建两个数组,一个嵌入另一个数组,就像这样...... arrayOne = [{name:'a',value:1}, {name:'b',value:2}] var arra
这个问题在这里已经有了答案: What is the explanation for these bizarre JavaScript behaviours mentioned in the 'Wa
我被放在别人的代码上,有一个类用作其他组件的基础。当我尝试 ng serve --aot(或 build --prod)时,我得到以下信息。 @Component({ ...,
我正在测试一些代码,并使用数据创建了一个 json 文件。 问题是我在警报中收到“[object Object],[object Object]”。没有数据。 我做错了什么? 这是代码:
我想打印 [object Object],[object Object] 以明智地 "[[{ 'x': '1', 'y': '0' }, { 'x': '2', 'y': '1' }]]"; 在 ja
我有一个功能 View ,我正在尝试以特殊格式的方式输出。但我无法让列表功能正常工作。 我得到的唯一返回是[object Object][object Object] [object Object]
在使用优秀的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题: 一路走来,它使用了 THREE.Ray 的下一个构造函数: var ray = new THRE
我正在使用 Material UI 进行多重选择。这是我的代码。 {listStates.map(col => (
我的代码使用ajax: $("#keyword").keyup(function() { var keyword = $("#keyword").val(); if (keyword.
我遇到了下一个错误,无法理解如何解决它。 Can't resolve all parameters for AuthenticationService: ([object Object], ?, [o
我正在尝试创建一个显示动态复选框的表单,至少应选中其中一个才能继续。我还需要获取一组选中的复选框。 这是组件的代码: import { Component, OnInit } from '@angul
我正在开发 NodeJs 应用程序,它是博客应用程序。我使用了快速验证器,我尝试在 UI 端使用快速闪存消息将帖子保存在数据库中之前使用闪存消息验证数据,我成功地将数据保存在数据库中,但在提交表单后消
我知道有些人问了同样的问题并得到了解答。我已经查看了所有这些,但仍然无法解决我的问题。我有一个 jquery snipet,它将值发送到处理程序,处理程序处理来自 JS 的值并将数据作为 JSON 数
我继承了一个非常草率的项目,我的任务是解释为什么它不好。我注意到他们在整个代码中都进行了这样的比较 (IQueryable).FirstOrDefault(x => x.Facility == fac
我只是在删除数组中的对象时偶然发现了这一点。 代码如下: friends = []; friends.push( { a: 'Nexus', b: 'Muffi
这两个代码片段有什么区别: object = nil; [object release] 对比 [object release]; object = nil; 哪个是最佳实践? 最佳答案 object
我应该为其他人将从中继承的第一个父对象传递哪个参数,哪个参数更有效 Object.create(Object.prototype) Object.create(Object) Object.creat
我在不同的对象上安排不同的选择器 [self performSelector:@selector(doSmth) withObject:objectA afterDelay:1]; [self per
NSLog(@"%p", &object); 和 NSLog(@"%p", object); 有什么区别? 两者似乎都打印出一个内存地址,但我不确定哪个是对象的实际内存地址。 最佳答案 这就是我喜欢的
我是一名优秀的程序员,十分优秀!