【问题标题】:Error "TypeError: Cannot read property 'email' of undefined" using AngularJS and Ionic使用 AngularJS 和 Ionic 时出现错误“TypeError:无法读取未定义的属性‘电子邮件’”
【发布时间】:2021-01-12 15:49:28
【问题描述】:

我有以下使用 AngularJS 和 Ionic 的表单:

<ion-modal-view class="game" ng-controller="PdfsmtpCtrl">

  <ion-header-bar class="bar bar-balanced">
    <a class="button button-icon icon ion-close-circled" ng-click="hideInformation()"></a>
    <h1 class="title">PDF-Export per Email</h1>
    <a type="submit" ng-click="getPdf(user)" class="button button-icon icon ion-checkmark-circled"></a>
  </ion-header-bar>

  <ion-content scroll="false" class="game">
        <div>
            <form novalidate class="simple-form">
              <label>E-mail: <input type="email" ng-model="user.email" /></label><br />
              <input type="submit" ng-click="getPdf(user)" value="Save" />
            </form>
        </div>
    </ion-content>

</ion-modal-view>

更新:这里是相关的 AngularJS 代码:

'use strict';

angular.module('app')
.controller('PdfsmtpCtrl', function ($scope, Pdfsmtp)
{   
    $scope.pdfsmtp = new Pdfsmtp();

    $scope.hideInformation = function ()
    {
        $scope.pdfsmtpModal.hide();
    };


    //joey: PDF to generate
    $scope.getPdf = function (user)
    {
        var user = angular.copy(user);
        var emailReceiver = user.email;
        
        var emailSubject = "<SubjectText>";
        var emailBody = "<BodyText>";
        var emailSender = "<EmailAddress>";
        var fileName = "<FileName.pdf>";
        var hostName = "<SenderHostName>";
        var contentType = "application/pdf";
        
     
        var doc = new jsPDF
        ({
            orientation: 'p',    // p = portrait, l = landscape
            unit: 'mm', 
            format: [210, 297],
        });
    
    //joey: Simon Bengtsson and his autotable
    doc.setFontSize(22);
    doc.setTextColor(23, 154, 85);
    doc.text(("<SomeText>"), 14, 15);
    doc.autoTable(
    {
        startY: 30,
        startX: 30,
        headStyles: {fillColor: [25, 141, 79] },
        footStyles: {fillColor: [25, 141, 79] },
        theme: 'grid',
        styles: 
        {
            overflow: 'linebreak',
            lineWidth: 0.5,
            lineColor: [25, 141, 79]
        },
        html: '#resultTable',
    });
    var finalY = doc.lastAutoTable.finalY || 20;
    
    doc.setTextColor(23, 154, 85);
    doc.text('Table:                   Signature:', 14, finalY + 20);
    var blob = doc.output();
    var dataUri = "data:" + contentType + ";base64," + btoa(blob);

    Email.send(
    {
        Host: hostName,
        Username: emailSender,
        Password: "<somepassword>",
        To: emailReceiver,
        Attachments : 
        [{
            name : fileName,
            data : dataUri
        }], 
        From: emailSender,
        Subject: emailSubject,
        Body: emailBody
        }).then($scope.hideInformation());
        //}).then(message => alert(message)
    } 
});

当点击表单中的Save时一切顺利,变量user将被相关函数接管。

单击&lt;ion-header-bar&gt; 中Submit 的图标时,可以看到以下错误,因为变量用户未定义:

TypeError: 无法读取未定义的属性“电子邮件”

需要做什么才能使用Submit?

【问题讨论】:

  • 使用安全导航运算符:user?.email.
  • 不幸的是,这不起作用。错误消失了,但名为 user 的变量未定义。因此后面的功能无法完成它的工作......
  • 它解决了您帖子中提出的问题。现在你有一个不同的问题——弄清楚为什么你的user数据对象是undefined。
  • 分享你的打字稿代码。这很可能是因为您没有初始化用户,而是试图在其中设置一个属性“电子邮件”。尝试将其初始化为一个空对象。
  • @TobyOkeke:我现在也添加了相关的代码部分。希望这能阐明这个问题......

标签: javascript angularjs forms ionic-framework undefined


【解决方案1】:

您应该初始化用户对象。这样,当您尝试访问 email 属性时,对象就不会未定义。

$scope.pdfsmtp = new Pdfsmtp();
$scope.user = { email : ''};

【讨论】:

  • 太好了,就是这样!非常感谢。
猜你喜欢
  • 2019-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 2019-05-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多