Angular 6 - Cordova - 如何将当前的 Angular 项目转换为基于 Cordova 的项目?

Posted

技术标签:

【中文标题】Angular 6 - Cordova - 如何将当前的 Angular 项目转换为基于 Cordova 的项目?【英文标题】:Angular 6 - Cordova - How to convert current angular project to cordova-based project? 【发布时间】:2019-03-07 05:25:52 【问题描述】:

我有一个完全开发的 angular 6 项目,我想使用 cordova 和 ionic 将它构建到移动应用程序中,但我不知道如何将项目转换为基于 cordova 的项目。 cordova 指令中显示的命令似乎创建了一个全新的空白项目,迁移该项目确实是不行的。我四处搜索,但几乎没有发现提到这一点的结果。有没有人可以帮忙?

【问题讨论】:

【参考方案1】:

只能按照https://cordova.apache.org/docs/en/latest/guide/cli/ 中的说明进行操作。本指南创建一个“空”应用程序。仅将应用程序的 dist 文件夹复制到 cordova 项目的 www 目录。您也可以使用 Visual Studio 2017 并创建一个空白的 cordova 项目。再次,将您的 dist 文件夹复制到 www 目录

但是,在更改您的 index.html 之前添加

    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>

如果你直接使用cordova

或添加

<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="scripts/platformOverrides.js">

如果您使用 VisualStudio 2017

在您的页面末尾(就在正文关闭标记之前)

如果你想控制“返回键”可以按照Close angular modal and remain on same page on back button click的说明操作

更新您需要对 Angular 8 进行一些更改

您需要从 index.html 中删除创建的“es-5”,因此您的索引变为:

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
    <meta name="format-detection" content="telephone=no">
    <meta name="msapplication-tap-highlight" content="no">
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">

    <title>App title</title>
    <!--IMPORTANT base href="./"--->
    <base href="./"> 
    <link rel="icon" type="image/x-icon" href="favicon.ico">
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <app-root></app-root>
    <script type="text/javascript" src="cordova.js"></script>

    <script type="text/javascript" src="runtime-es2015.js"></script>
    <script type="text/javascript" src="polyfills-es2015.js"></script>
    <script type="text/javascript" src="scripts.js" defer></script>
    <script type="text/javascript" src="main-es2015.js"></script>


</body>
</html>

注意:使用

ng build --prod=true --outputHashing=none --namedChunks=false --vendorChunk=false

构建应用程序

Update比cordova事件的链接好,我觉得这个方法更好控制“设备就绪”事件。

我喜欢在 .html 的头部添加一些类似的东西

<script type="text/javascript">window.isInCordova = true</script>

然后在我们的 main.ts 中我们写一些类似

const bootstrap = () => 
  platformBrowserDynamic().bootstrapModule(AppModule).catch(error=>console.log(error))
;

if (window['isInCordova'] !== undefined) 
  document.addEventListener('deviceready', bootstrap,false);
 else 
  bootstrap();

这使得我们是“InCordova”,应用程序仅在设备准备好时启动。此外,如果我们的应用程序在导航器中启动并且“索引”没有,则此“脚本”照常工作。所以,我们可以在 app.component 的 ngAfterOnInit 中添加监听器

//use declare var window to can compile

declare var window: any;


ngAfterViewInit()

   if (window['isInCordova'] !== undefined)
     fromEvent(document, 'pause').subscribe(event => 
        this.ngZone.run(() => 
         this.onPause();
        );
     )

      fromEvent(document, 'resume').subscribe(event => 
        this.ngZone.run(() => 
           this.onResume();
        );
      )

      fromEvent(document, 'backbutton').subscribe(event => 
        this.ngZone.run(() => 
           this.onBackKeyDown(event);
        );
      )
   

最后如果我们可以创建一个服务

private cordovaEventSource:Subject<any>=new Subject<any>();
cordovaEvent:Observable<any>=this.listeningSource.asObservable();

sendEvent(evento:any)

    this.cordovaEventSource.next(evento);

app.component中我们的函数this.onPause()、this.onResume()...简直就是这样

  onPause() 
    this.cordovaEventService.sendEvent("pause");
  ;

任何订阅我们service.cordovaEvent的组件都收到了事件并可以实现动作

【讨论】:

请注意,Visual Studio 2019 放弃了对 JavaScript UWP (cordova) 项目的所有支持。 true,@sonyisda1,我们需要看看 Visual Studio 的 Cordova 工具扩展:marketplace.visualstudio.com/… 也有使用 wkwebview 的经验吗?在生成的 .js 文件中获取一些来源是空错误。

以上是关于Angular 6 - Cordova - 如何将当前的 Angular 项目转换为基于 Cordova 的项目?的主要内容,如果未能解决你的问题,请参考以下文章

将图像文件附加到表单数据 - Cordova/Angular

如何在 Cordova 应用程序中升级 Angular 2 版本

使用 Angular 10 Cordova 获取设备 ID

如何在 Angular 控制器之外删除 Cordova 特定事件?

如何在没有 Angular 的 Cordova 中实现 Auth0 SSO

angular使用cordova混合开发