类型错误:Object(...) 不是 Vue 中的函数

2024-04-20

我是 Vue 新手,正在尝试处理表单。我正在制作一个网络应用程序来管理会议,为此我有一个多步骤表单来处理访客和主持人数据。当我单击提交按钮时,出现以下错误:-TypeError: Object(...) is not a function。我在 stackoverflow 上搜索过它,但没有得到太多线索。 以下是我的代码:-

日程安排.js

<template>
    <el-container>
        <el-row>

            <el-col class="desc" :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
                <img src="../assets/meeting.svg" alt="meeting-image" class="image"/>
                <div>
                    <h1 class="image-caption">Schedule Meetings With Ease!</h1>
                    <p class="image-sub-caption">Managing Meetings Now Much Easier</p>
                    <ul class="feature-list">
                        <li>Get instant meeting confirmation on email and mobile!</li>
                        <li>Schedule meeting from anywhere, anytime!</li>
                        <li>Schedule meeting using your mobile</li>
                        <li>Get check out email on your mailing address</li>
                        <li>Keep Track of All Visitors and Hosts</li>
                    </ul>
                </div>
            </el-col>

            <el-col class="form-div" :xs="24" :sm="24" :md="24" :lg="12" :xl="12">
                <el-col class="steps">
                    <el-steps align-center class="steps" :active="active">
                        <el-step title="Step 1" description="Visitor Details"></el-step>
                        <el-step title="Step 2" description="Host Details"></el-step>
                    </el-steps>
                </el-col>


                <el-form ref="form" :model="form" label-width="120px">
                    <div :class="{'show':isVisitor, 'hide':!isVisitor}">
                        <el-input
                                name="visitorName"
                                v-validate="'required|alpha_spaces'"
                                prefix-icon="el-icon-user"
                                class="form-input"
                                placeholder="Visitor Name"
                                v-model="form.visitor.name"/>
                        <p v-if="errors.has('visitorName')" class="registration-error-message">
                            {{errors.first("visitorName")}}</p>

                        <el-input
                                name="visitorEmail"
                                v-validate="'required|email'"
                                prefix-icon="el-icon-message"
                                class="form-input"
                                placeholder="Visitor Email"
                                v-model="form.visitor.email"/>
                        <p v-if="errors.has('visitorEmail')" class="registration-error-message">
                            {{errors.first("visitorEmail")}}</p>
                        <vue-phone-number-input
                                v-validate="'required'"
                                name="visitorPhoneNo"
                                v-model="form.visitor.phone_no"
                                class="form-input"/>
                        <p v-if="errors.has('visitorPhoneNo')" class="registration-error-message">
                            {{errors.first("visitorPhoneNo")}}</p>
                        {{this.form.visitor.phone_no}}
                        <el-row>
                            <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                                <el-date-picker
                                        v-validate="'required'"
                                        name="visitorCheckIn"
                                        class="form-input"
                                        v-model="form.visitor.check_in"
                                        type="datetime"
                                        ref="check_in"
                                        placeholder="Visitor Check In"/>
                                <p v-if="errors.has('visitorCheckIn')" class="registration-error-message">
                                    {{errors.first("visitorCheckIn")}}</p>
                            </el-col>
                            <el-col :xs="24" :sm="24" :md="12" :lg="12" :xl="12">
                                <el-date-picker
                                        v-validate="'required|after:check_in'"
                                        name="visitorCheckOut"
                                        class="form-input"
                                        v-model="form.visitor.check_out"
                                        type="datetime"
                                        placeholder="Visitor Check Out"/>
                                <p v-if="errors.has('visitorCheckOut')" class="registration-error-message">
                                    {{errors.first("visitorCheckOut")}}</p>
                            </el-col>
                        </el-row>
                        <el-row>
                            <el-button
                                    @click="goToStepTwo"
                                    class="button"
                                    type="primary"
                                    round>Next <i class="el-icon-arrow-right"></i>
                            </el-button>
                        </el-row>
                    </div>
                    <div :class="{'show':!isVisitor, 'hide':isVisitor}">
                        <el-input
                                name="hostName"
                                v-validate="'required|alpha_spaces'"
                                prefix-icon="el-icon-user"
                                class="form-input"
                                placeholder="Host Name"
                                v-model="form.name"/>
                        <p v-if="errors.has('hostName')" class="registration-error-message">
                            {{errors.first("hostName")}}</p>
                        <el-input
                                name="hostEmail"
                                v-validate="'required|email'"
                                prefix-icon="el-icon-message"
                                class="form-input"
                                placeholder="Host Email"
                                v-model="form.email"/>
                        <p v-if="errors.has('hostEmail')" class="registration-error-message">
                            {{errors.first("hostEmail")}}</p>
                        <vue-phone-number-input
                                name="hostPhoneNo"
                                v-validate="'required'"
                                v-model="form.phone_no"
                                class="form-input"/>
                        <p v-if="errors.has('hostPhoneNo')" class="registration-error-message">
                            {{errors.first("hostPhoneNo")}}</p>
                        <el-button
                                icon="el-icon-arrow-left"
                                plain
                                @click="goToStepOne"
                                class="button"
                                round>Back
                        </el-button>
                        <el-button
                                @click="createMeeting"
                                class="button"
                                type="primary"
                                round>Submit
                        </el-button>
                    </div>
                </el-form>

                <div v-if="isMeetingConfirmed">

                </div>
            </el-col>
        </el-row>
    </el-container>
</template>

<script>
    import scheduleMeeting from "../api/meeting"

    export default {
        data: () => ({
            active: 1,
            isVisitor: true,
            isMeetingConfirmed: false,
            form: {
                name: '',
                email: '',
                phone_no: '',
                visitor: {
                    name: '',
                    email: '',
                    phone_no: '',
                    check_in: '',
                    check_out: ''
                }
            }
        }),
        methods: {
            goToStepOne() {
                this.isVisitor = true
                this.active = 1
            },
            async goToStepTwo() {
                if (
                    await this.$validator.validate('visitorName', this.form.visitor.name) &&
                    await this.$validator.validate('visitorEmail', this.form.visitor.email) &&
                    await this.$validator.validate('visitorPhoneNo', this.form.visitor.phone_no) &&
                    await this.$validator.validate('visitorCheckIn', this.form.visitor.check_in) &&
                    await this.$validator.validate('visitorCheckOut', this.form.visitor.check_out)) {
                    this.isVisitor = false
                    this.active = 2
                }
            },
            async createMeeting() {
                var global = this;
                this.$validator.validate().then(valid => {
                    if (valid) {
                        scheduleMeeting(global.form)
                            .then(() => this.isMeetingConfirmed = true)
                            .catch(error => {
                                this.$message({
                                    showClose: true,
                                    type: 'error',
                                    message: error.response.data
                                })
                            })
                    }
                });

            }
        }
    };
</script>

<style lang="css">
    .show {
        display: block;
    }

    .hide {
        display: none;
    }

    .image {
        width: 80%;
        margin: 1rem auto;
    }

    .steps {
        margin: 0 0 1rem 0;
    }

    .image-sub-caption {
        color: rgb(120, 120, 120);
        font-weight: 600;
        padding-bottom: 1rem;
    }

    .feature-list {
        margin: 1rem;
        list-style: none;
    }

    .feature-list > li {
        font-weight: 400;
        color: rgb(120, 120, 120);
        padding: 0.4rem 0;
    }

    .desc {
        background-color: #e6f1ff;
        text-align: center;
    }

    .registration-error-message {
        color: #f56c6c;
        font-size: 13px;
        line-height: 1;
        padding-top: 4px;
        position: relative;
        margin: -1rem 0 1rem 0;
        top: 100%;
        left: 0;
    }

    .form-div {
        padding: 3rem;
    }

    .form-input {
        border: none !important;
        margin: 1rem 0;
    }

    .button {
        margin: 2rem 0;
    }
</style>

会议.js

import session from "./session";

export default {
    scheduleMeeting(meeting) {
        return session.post("/meeting/create/", {
            ...meeting
        })
    }
};

完整的错误消息日志如下:-

Uncaught (in promise) TypeError: Object(...) is not a function
    at eval (ScheduleMeeting.vue?34e8:184)
eval    @   ScheduleMeeting.vue?34e8:184
Promise.then (async)        
createMeeting$  @   ScheduleMeeting.vue?34e8:182
tryCatch    @   vue-phone-number-inp…common.js?7bec:2629
invoke  @   vue-phone-number-inp…common.js?7bec:2855
prototype.<computed>    @   vue-phone-number-inp…common.js?7bec:2681
tryCatch    @   vue-phone-number-inp…common.js?7bec:2629
invoke  @   vue-phone-number-inp…common.js?7bec:2719
eval    @   vue-phone-number-inp…common.js?7bec:2754
callInvokeWithMethodAndArg  @   vue-phone-number-inp…common.js?7bec:2753
enqueue @   vue-phone-number-inp…common.js?7bec:2776
prototype.<computed>    @   vue-phone-number-inp…common.js?7bec:2681
module.exports.96cf.exports.async   @   vue-phone-number-inp…common.js?7bec:2800
createMeeting   @   ScheduleMeeting.vue?34e8:163
invokeWithErrorHandling @   vue.runtime.esm.js?2b0e:1854
invoker @   vue.runtime.esm.js?2b0e:2179
invokeWithErrorHandling @   vue.runtime.esm.js?2b0e:1854
Vue.$emit   @   vue.runtime.esm.js?2b0e:3882
handleClick @   element-ui.common.js?5c96:9393
invokeWithErrorHandling @   vue.runtime.esm.js?2b0e:1854
invoker @   vue.runtime.esm.js?2b0e:2179
original._wrapper   @   vue.runtime.esm.js?2b0e:6911

任何提示都会有很大帮助!


问题是你打电话给scheduleMeeting在你的createMeeting方法,或者更准确地说,您实际上并没有导入函数,而是包含该函数的对象。

您的出口来自meeting.js

import session from "./session";

export default {
    scheduleMeeting(meeting) {
        return session.post("/meeting/create/", {
            ...meeting
        })
    }
};

这是导出您要分配给的对象scheduleMeeting在你的import陈述。

import scheduleMeeting from "../api/meeting"

所以你的函数实际上是在scheduleMeeting.scheduleMeeting在你的代码里面。

以这种方式导出对象有点不寻常 - 默认导出与设置export.modulescommonjs 导出的对象。我建议你遵循更ES6的方法:

Change meeting.js to

import session from "./session";

export function scheduleMeeting(meeting) {
    return session.post("/meeting/create/", {
        ...meeting
    })
}

以及您的进口声明

import {scheduleMeeting} from "../api/meeting"

当然,还有其他方法可以构建它来修复它,但我认为这是最清楚的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

类型错误:Object(...) 不是 Vue 中的函数 的相关文章

  • Font Awesome 图标未按预期在选项列表中加载(但在选择时加载)

    我有一个使用 bootstrap vue 的选项列表 如下所示 它在选择窗口中看起来不错 但打开下拉菜单时并非所有图标都显示 选择图标后 将显示 IE 螺栓显示 但选择时 图标列的代码
  • 解决方案:动态加载独立编译的 Webpack 2 包 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想分享如何捆绑一个充当插件主机以及它如何加载已安装的插件动态地 应用程序和插件都与 Webpack 捆绑在一起 应用程序和插件被编译和分
  • 修复 JSLint“意外的‘this’。”错误?

    我试图让以下代码成为符合 jslint 标准 http jslint com 但我陷入以下两个错误 本来应该看到一个声明 结果却看到了一个块 and 意想不到的 这个 我应该对我的代码进行哪些更改才能使 JSLint 满意 var pvAc
  • D3.js分组条形图

    I am making a bar chart using D3 js like this source statcan gc ca http www statcan gc ca pub 12 593 x 2007001 figures f
  • 在网页上写乐谱[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我希望能够在网页中编写乐谱和和弦 有没有可用的库 例如用于数学的 Mathjax 如果没有 那么还有其
  • contenteditable,在文本末尾设置插入符号(跨浏览器)

    输出在Chrome div style border 1px solid 000 width 500px height 40px hey div what s up div div div div
  • 如何在 Javascript 中获取时区名称(PDT、EST 等)? [复制]

    这个问题在这里已经有答案了 使用 Javascript 有没有办法根据用户的设备获取用户的时区名称 PDT EST 等 我尝试过的代码 const timezone jstz determine const userTimezone tim
  • Vuejs 在模板中添加多行?

    我想知道在构建 Vuejs 模板时如何最好地安排新行 我的代码不起作用 因为它破坏了 JavaScript 容器 Vue js 希望我将整个 html 放在一行中 当我计划添加页脚内容时 这有点不切实际 Vue component foot
  • 页面其余部分完成加载后延迟加载 html5 视频

    我有一个视频元素用作我正在构建的页面底部部分的背景 我试图通过将 src 存储为 data src 属性并使用 jQuery 在其他资源加载后将其应用到 src 属性 因为它不是英雄图像或任何东西 我想加载海报以节省加载时间 然后稍后加载视
  • Ng Bootstrap 日期范围选择器 [markDisabled] 不适用于输入

    我正在尝试禁用某些日期ng 引导范围选择器 https ng bootstrap github io components datepicker overview 目前 我在弹出窗口中有一个范围选择器 并且我正在使用 markDisable
  • 使用 Jquery 更改 css 属性时的事件检测

    有没有办法检测元素的 显示 css 属性是否更改 是否更改为无 块或内联块 如果没有的话有什么插件吗 谢谢 Note 突变事件 https developer mozilla org en US docs Web Guide Events
  • Javascript:打乱数组中的对象组

    我有一个对象数组 我已按键排序 group如下 使得所有具有相同值的对象group在索引中彼此相邻data 例如 var data foo cat group house foo cat group house foo cat group
  • ajax 调用成功后点击链接 href

    我有一个正常的链接 a href http www google com class continue Continue a 我已将点击绑定到一个事件来发布 ajax 请求 如下所示 continue click function ajax
  • Antd 选择搜索框未呈现匹配项

    我有产品数据 我正在使用搜索值过滤数据 然后使用过滤后的数据呈现选项 产品数据作为道具来自全局 redux 存储 由于某种原因 下拉列表仅在搜索值为空时显示数据 当我开始输入时 filteredData已更新 组件也重新渲染 但选项不显示任
  • 如何在javascript中删除一组表情符号中的最后一个表情符号?

    假设我的字符串中有 3 个表情符号 字符串中没有任何空格或除表情符号之外的任何其他字符 如何删除javascript中最后一个表情符号 下面的答案不使用任何特殊的包并安全地删除最后一个表情符号 function safeEmojiBacks
  • 主干集合排序

    我制作了我的第一个主干应用程序 但在集合排序方面遇到了一些问题 使用这个后 var SortedFriends MyFriends sortBy function friend return friend get uid console l
  • 将罗马数字转换为阿拉伯数字--recursiv

    我是 JavaScript 新手 正在网站的帮助下学习https www jshero net koans roman1 html https www jshero net koans roman1 html 本练习是编写一个转换器 将罗马
  • Google 折线图添加对象数组

    我有一个通过解析 JSON 字符串创建的对象数组 var measurementData Html Raw JsonConvert SerializeObject this Model Item1 var stringifiedData J
  • 如何在javascript中设置从数据库输入的最大数量?

    我希望根据数据库中的数量设置 输入类型 数字 中输入的最大数量 目前 我正在尝试让它在数据最大的基础上工作 然后再尝试从数据库中获取最大值 但它似乎无法工作 之前已经在这里问过 但我仍然无法理解 在 php javascript 中设置数据
  • html 下钻下拉所选值未插入 MYSQL

    我有两个下拉列表 首先从数据库下拉填充 根据第一个下拉列表的选定值从数据库填充第二个下拉列表 document ready function c change function var c1 c selected text if c1 aj

随机推荐

  • 如何在 Mathematica 8 中并行集成

    有人知道如何使用所有核心来计算积分吗 我需要使用并行化或并行表 但如何使用 f r Sum 1 n 2 r 2 n 7 2 n n r 2 n 1 x r 2 n 1 n 0 r 2 Nw Transpose Table f j i 1 j
  • Clojure:在特定命名空间中启动 repl

    我安装了 boot clj 并且希望能够在外部编辑器中编辑 clj 文件 并单独运行一个命令行 REPL 我可以从中调用我在 clj 文件中更改的函数 不需要特殊的重新加载命令 另一件事是我不想手动键入命令来包含命名空间 我只想运行一个将我
  • 无需打开/保存即可评估 Excel 文件

    有没有一种方法可以在不手动打开文件的情况下计算Excel公式 如果 openxlsx 不是最佳选择 请随时推荐其他软件包 谢谢 我的目标是将数据粘贴到 Excel 文件 已经存在 中 其中的公式引用我要粘贴数据的范围 并让 Excel 刷新
  • 播种数据透视表的更好方法

    我有以下表格users roles和数据透视表角色 用户具有以下表结构 users id username password roles id role 角色 用户 id role id user id
  • 配置 IIS 以接收电子邮件

    根据这个答案 https stackoverflow com a 929797 939213可以配置 IIS 来接收电子邮件 这就是我想做的 但答案说它是在下面完成的IIS SMTP under domains 我使用 IIS 管理器连接到
  • 更改自定义产品类型的 WooCommerce“库存”文本(预购)

    一点背景知识 我目前正在使用WooCommerce 插件的产品预订单 https wordpress org plugins product pre orders for woo 由别墅主题 总的来说 除了这一件事之外 它对于我的目的来说效
  • Python argparse 切换标志

    argparse 有什么方法可以解析类似的标志 a b c d foo py s b 应该将 True 存储在dest of s和 False 中dest of b 很像 Windows 所做的attrib或Linuxchmod 目前 我正
  • 在 Mac osx 中将 .a 转换为 .dylib

    是否可以在 Mac osx 中将 a 文件转换为 dylib 文件 我目前有libraryname a 它似乎无法将其包含在我的程序中 因为仅包含 dylib 库 还有一个命令可以通过 mac osx 终端显示程序中使用的静态库吗 是的 这
  • 如何从字符串列表中提取数字?

    我应该如何仅从中提取数字 a 1 2 3 4 5 6 invalid 我努力了 mynewlist s for s in a if s isdigit print mynewlist and for strn in a values map
  • python 中的 Selenium Webdriver:跨测试用例重复使用相同的 Web 浏览器

    Python 新手在这里 我试图在整个测试用例中重复使用相同的浏览器 但是 我不知道如何传递全局变量来完成这项工作 现在 我有一个 main py 看起来像这样 C Python27 python exe import unittest i
  • 您的目标项目“XXX”未引用EntityFramework。这个包是必需的

    谁能指出我出错的方向 我正在尝试使用 SQLite 进行迁移以在 EFCore 上工作 控制台应用程序 NET Core 3 1 运行任何命令 例如enable migrations或update database 都会出现错误 您的目标项
  • 核心动画“翻转”动画

    我希望使用 Core Animation 在 Mac 应用程序中模拟翻转时钟动画 目前我有三个 CALayer 代表数字的上半部分和下半部分 第三个用于代表翻转动画 在以下文章中找到了解决方案 使用 Core Animation 创建 iP
  • HTML 5 音频标记多个文件

    我正在尝试在一个 HTML 5 音频标签中放置两个文件 并依次播放 到目前为止我的代码是
  • 获取设备的方向?

    我有一个相机预览活动 它被迫保持在横向模式 有没有办法可以告诉我手机当前的方向 而不是屏幕方向 基本上我想知道用户是否以纵向模式或横向模式握住手机 以便我可以正确旋转输出捕获的位图 现在它总是以横向模式输出 Thanks if getRes
  • 异常字符串插值不替换变量

    我们正在使用 Scala Play 我试图确保所有 SQL 查询都使用 Anorm 的字符串插值 它适用于某些查询 但许多查询实际上并未在执行查询之前替换变量 import anorm SQL import anorm SqlStringI
  • 获取maven插件在自己的Mojo中的目录路径

    我正在创建一个自定义 Maven 插件 在其中一篇 Mojos 中 我正在读一本Xpp3Dom使用以下代码段从 XML 文件中获取对象 File pluginsFile new File absolute path to file plug
  • Django:如何计算浏览的人数

    我正在 Django 中制作一个简单的 BBS 应用程序 我希望每当有人看到帖子时 该帖子的浏览量 post view no 就会增加 目前我面临两个困难 我需要限制 post view no 的增加 以便一个用户只能增加一次 无论用户刷新
  • 使用 Rails 动态构建 RESTful 路由

    我正在尝试编写一个辅助方法 该方法接受复数资源的名称并返回相应的链接 该方法的本质是 def get link resource link to resource capitalize resource path end 显然resourc
  • Django CMS 多级下拉菜单

    我对 Django CMS 有点陌生 我尽力避免询问 但这让我发疯 我制作了一个带有主题和类别模型的 Wiki 应用程序 我将它连接到我的 CMS 上的一个站点并将其添加到我的菜单中 现在我希望能够在我的菜单上显示所有顶级类别 其子类别和主
  • 类型错误:Object(...) 不是 Vue 中的函数

    我是 Vue 新手 正在尝试处理表单 我正在制作一个网络应用程序来管理会议 为此我有一个多步骤表单来处理访客和主持人数据 当我单击提交按钮时 出现以下错误 TypeError Object is not a function 我在 stac