【问题标题】:How do you use cordova file plugin in angular 8 without using Ionic framework如何在不使用 Ionic 框架的情况下在 Angular 8 中使用 Cordova 文件插件
【发布时间】:2019-12-16 00:33:27
【问题描述】:

我非常清楚那里有一些帖子与不同的插件有类似的东西,但我无法找到一个告诉我我是否正在引导我的 Cordova 应用程序正确地调整角度以及如何做我说,其次,如果可以的话,我想将 JSON 字符串或对象保存到用户手机上

/* main.ts */
import { enableProdMode } from '@angular/core';
import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';

import { AppModule } from './app/app.module';
import { environment } from './environments/environment';

if (environment.production) {
  enableProdMode();
}
/* Bootstrap App Module */
const onDeviceReady = () => {
  platformBrowserDynamic().bootstrapModule(AppModule);
};
document.addEventListener('deviceready', onDeviceReady, false);
platformBrowserDynamic().bootstrapModule(AppModule)
  .catch(err => console.error(err));
  
  
/* Favourite Service Typescript file */
import { Injectable } from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
import { NotificationService } from './notification.service';
import { EnvService } from './env.service';
import { catchError, tap } from 'rxjs/operators';
declare var window: any;
@Injectable({
  providedIn: 'root'
})
export class FaveService {
 createFav() {
    document.addEventListener('deviceready', function() {
      window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, success, error);
    }, false);
    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, function (fs) {

      console.log('file system open: ' + fs.name);
      fs.root.getFile('newPersistentFile.txt', { create: true, exclusive: false }, function (fileEntry) {

          console.log('fileEntry is file?' + fileEntry.isFile.toString());
          // fileEntry.name == 'someFile.txt'
          // fileEntry.fullPath == '/someFile.txt'
          writeFile(fileEntry, null);

      }, onErrorCreateFile);

  }, onErrorLoadFs);
  }
}

上面是我用来尝试与 Cordova 文件系统 API 交互的代码,但我遇到了这些错误。

现在我知道如果我执行declare const requestFileSystem,错误将会消失,但是当我构建应用程序并尝试创建文件时,它只会在手机文件系统的数据文件夹中创建目录,而不是文件。我还尝试授予应用程序对存储的读/写访问权限,但同样没有乐趣。所以我的另一个问题是如何摆脱这些错误,或者我是否通过声明它们并使其在 android 7.0 上运行来做正确的事情,非常感谢您提前

【问题讨论】:

  • 你安装了cordova文件插件吗?
  • 是的,我按照这些说明进行操作 cordova.apache.org/docs/en/latest/reference/cordova-plugin-file 我的设备插件正在工作,所以我在代码中做错了,它自己只是想知道是否有人遇到过这个问题
  • 这是完整的代码吗?
  • 是的,文件保存功能的所有代码当我将它们声明为 var 时错误消失了,但文件仍然没有保存。我将尝试在一个干净的应用程序中重写它,看看它是否可以这样工作。
  • 我今天也一直在和这个作斗争。而不是使用LocalFileSystem.PERSISTENT 使用window.PERSISTENT 属性。同样,有一个 window.TEMPORARY 属性用于临时存储。如果 tsc 或 tslint 抱怨该属性不存在,则将其转换为 Cordova 的 Window 界面,即:import { Window as CordovaWindow } from 'cordova-plugin-file/types'(或您自己的适当定义),然后使用 (window as unknown as CordovaWindow).PERSISTENT

标签: angular cordova cordova-plugin-file


【解决方案1】:

您在代码中缺少successerror 的定义。请重构如下。

document.addEventListener('deviceready', function() {
  window.(requestFileSystem as any)(LocalFileSystem.PERSISTENT, 0, success, error);
}, false);

function success(fs: any) {
  fs.root.getFile('newPersistentFile.txt', {
    create: true,
    exclusive: false
  }, function(fileEntry) {
    writeFile(fileEntry);
  }, error);
}

function error(e: any) {
  console.log('error', e);
}

function writeFile(fileEntry) {
  // logic to write to file
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-08
    • 2018-05-24
    • 2016-12-06
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2020-06-11
    • 2016-11-02
    相关资源
    最近更新 更多