【问题标题】:Cordova Email Composer Plugin using Angular HTML not rendering使用 Angular HTML 的 Cordova 电子邮件编辑器插件未呈现
【发布时间】:2019-04-16 10:51:30
【问题描述】:

我刚开始为我的 Ionic 应用程序使用 Cordova Email Composer 插件,我注意到该插件看起来不支持 Angular HTML 代码?我想知道这个问题是否有替代方案,或者我做错了什么?

页面.ts

import { Component } from '@angular/core';
import { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular';
import { Storage } from '@ionic/storage';
import { EmailComposer } from '@ionic-native/email-composer';

import { ReapService } from '../../services/reap-service';
@IonicPage()
@Component({
  selector: 'page-offline-data',
  templateUrl: 'offline-data.html',
})
export class OfflineDataPage {
  private offlineData:any [] =[];
  constructor(public navCtrl: NavController,
              public navParams: NavParams,
              public storage: Storage,
              public viewCtrl: ViewController,
              private emailComposer: EmailComposer,
              public reap: ReapService) {
  }
  ionViewDidLoad(){
    this.storage.get('offlineSubmission').then((data)=>{
        this.offlineData=data;
        console.log(data);
    });
  }
  dismiss() {
    this.viewCtrl.dismiss();
  }
  sendEmail(){
    this.emailComposer.isAvailable().then((available: boolean) =>{
     if(available) {
       //Now we know we can send
     }
    },(err) => {
      this.reap.presentToast('Error Emailing Data');
    });

    let email = {
      to: 'email@email.com',
      cc: 'email@email.com',
      //bcc: ['john@doe.com', 'jane@doe.com'],
      attachments: [
        //'file://img/logo.png',
        //'res://icon.png',
        //'base64:icon.png//iVBORw0KGgoAAAANSUhEUg...',
        //'file://README.pdf'
      ],
      subject: 'Test',
      body: `
      <div *ngFor="let data of offlineData;let i = index">

        <div *ngIf="data?.Type=='GPS'">
          <h1>{{i+1}}</h1>
          <h2 class="bold">Form - {{data?.Type}}</h2>
          <p>Well ID - {{data?.Info[0].ID}}</p>
          <p>Lat - {{data?.Info[1]['Lat']}}</p>
          <p>Lon - {{data?.Info[2].Lon}}</p>
        </div>


        <ion-card-content *ngIf="data?.Type=='Project'">
          <h1>{{i+1}}</h1>
          <h2 class="bold">Form - {{data?.Type}}</h2>
          <p>Project Name - {{data?.Info[0].project.projectName}}</p>
          <p>Location - {{data?.Info[0].project.Location.Location}}</p>
          <p>Company Man - {{data?.Info[0].project.companyMan}}</p>
          <p>AFE - {{data?.Info[0].project.orderNumber}}</p>
        </ion-card-content>

        <ion-card-content *ngIf="data?.Type=='WO'">
          <h1>{{i+1}}</h1>
          <h2 class="bold">Form - Work Order</h2>
          <p>Project - {{data?.Info[0].wo[0].project.Name}}</p>
          <p>Location - {{data?.Info[0].wo[0].Location.Location}}</p>
          <p>Company Man - {{data?.Info[0].wo[0].companyMan}}</p>
          <p>Current Date - {{data?.Info[0].wo[0].currentDate}}</p>
          <p>AFE - {{data?.Info[0].wo[0].workOrder}}</p>
          <p>Foreman - {{data?.Info[0].wo[0].foreman}}</p>
          <p>Start Time - {{data?.Info[0].wo[0].startTime}}</p>
          <p>End Time - {{data?.Info[0].wo[0].endTime}}</p>
          <p>Representative - {{data?.Info[0].wo[0].representative}}</p>
          <p>Job Description - {{data?.Info[0].wo[0].description}}</p>

          <br>
          <h2 class="bold">Sub Form - Equipment</h2>
          <br>
          <div *ngFor="let subData of data.Info[4].Equipment">
          <p>Name - {{subData?.Name}}</p>
          <p>Starting Odometer - {{subData?.Odometer}}</p>
          <p>Ending Odometer - {{subData?.endingOdometer}}</p>
          <br>
          </div>

          <br>
          <h2 class="bold">Sub Form - Labor</h2>
          <br>
          <div *ngFor="let subData of data.Info[5].Labor">
          <p>Empoloyee - {{subData?.FullName}}</p>
          <p>Hours - {{subData?.Hours}}</p>
          <br>
          </div>

          <br>
          <h2 class="bold">Sub Form - Extra Labor</h2>
          <br>
          <div *ngFor="let subData of data.Info[9].extraLabor">
          <p>Name - {{subData?.Name}}</p>
          <p>Hours - {{subData?.Hours}}</p>
          <br>
          </div>

          <br>
          <h2 class="bold">Sub Form - Misc.</h2>
          <br>
          <div *ngFor="let subData of data.Info[6].Misc">
          <p>Description - {{subData?.description}}</p>
          <p>Quantity - {{subData?.quantity}}</p>
          <br>
          </div>

          <br>
          <h2 class="bold">Sub Form - Job Description</h2>
          <br>
          <div *ngFor="let subData of data.Info[7].JobDescription">
          <p>Job Description - {{subData?.jobDescription.ItemDescription}}</p>
          <p>Quantity - {{subData?.quantity}}</p>
          <p>Hours/Days/Cost - {{subData?.each}}</p>
          <br>
          </div>
          </ion-card-content>
      </ion-card>
      `,
      isHtml: true
    };

    // Send a text message using default options
    this.emailComposer.open(email);
    }
}

插件上一切正常,唯一的就是html代码看起来像这样,

任何有关使其工作的建议将不胜感激。

【问题讨论】:

    标签: javascript angular cordova ionic-framework cordova-plugins


    【解决方案1】:

    如果您要放置“围绕文本,请确保在注入变量之前也将其关闭”。您的 Html 正在工作,但由于您没有在变量之前关闭 ',因此它被作为字符串处理。

    以下部分代码为例:

    body: `
      <div *ngFor="let data of offlineData;let i = index">
    
        <div *ngIf="data?.Type=='GPS'">
          <h1>{{i+1}}</h1>
          <h2 class="bold">Form - {{data?.Type}}</h2>
          <p>Well ID - {{data?.Info[0].ID}}</p>
          <p>Lat - {{data?.Info[1]['Lat']}}</p>
          <p>Lon - {{data?.Info[2].Lon}}</p>
        </div>
    

    在body标签之后,有一个' 这意味着从那里开始的所有内容都被视为字符串,因此 javascript 不会处理该页面中的任何 javascript,因为它自己生成了它。 更好的做法是在生成文本时将变量注入文本中,或者使用其中包含该 html 代码的模板文件。

    body: `
      <div *ngFor="let data of offlineData;let i = index">
    
        <div *ngIf="data?.Type=='GPS'">
          <h1>'+ {{i+1}} +'</h1>
          <h2 class="bold">Form - '+ {{data?.Type}} +'</h2>
          <p>Well ID - '+ {{data?.Info[0].ID}} +'</p>
          <p>Lat - '+ {{data?.Info[1]['Lat']}} +'</p>
          <p>Lon - '+ {{data?.Info[2].Lon}} +'</p>
        </div>
    

    【讨论】:

    • 你能详细说明你的答案吗?也许给我举个例子?
    • 对不起,我的反应很简短,我现在正在工作。我希望这个编辑有所帮助。
    • 嗯,我试过了,它仍然将 ' 作为字符串打印。是否可以仅以 JSON 格式发送数组?我不一定要像我一样打印所有的值。我只需要能够从电子邮件中提取数据。
    • 嗯,是的,这就是它通常以角度完成的方式。您只需提供一个模板,然后在您的范围内创建一个对象。然后你可以读出模板中的变量。您正在运行 MVC ASP.Net 应用程序吗?我只需将数据发布到 API,然后让它生成并发送电子邮件。
    • 我正在使用 Ionic 3 框架。我正在实现的这个特殊功能是,如果由于某种原因 API 调用失败,用户可以存储表单提交并且我正在确定能够导出数据的方法。该应用程序将用于不总是提供大量服务的地方。
    猜你喜欢
    • 2018-04-18
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 2021-06-03
    • 1970-01-01
    • 2017-03-06
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多