【问题标题】:Why is my imported VueJS Component not displayed?为什么我导入的 VueJS 组件不显示?
【发布时间】:2020-01-10 11:23:20
【问题描述】:

我有以下名为“PasswordResetView”的 Vue 视图:

<template>
  <v-content>
    <v-card>
      <v-card-title primary-title>
        Passwort ändern
      </v-card-title>

      <v-card-text>
        <v-text-field
                id="password"
                label="Passwort"
                name="password"
                prepend-icon="mdi-lock"
                type="password"
        />
        <v-text-field
                id="passwordRepeated"
                label="Passwort wiederholen"
                name="passwordRepeated"
                prepend-icon="mdi-lock"
                type="password"
        />
        <v-text-field
                id="mail"
                label="E-Mail"
                name="mail"
                prepend-icon="mdi-lock"
                type="text"
        />
      </v-card-text>

    </v-card>
  </v-content>
</template>

<script>
import axios from "axios";

export default {

  name: "passwordreset",
  data() {
    return {
      password: "",
      passwordRepeated: "",
      mail: "",
      errormessage: "",
    };
  },
  methods: {
    changePassword() {
      let payload = {mail: this.mail, password:this.password, passwordRepeated: this.passwordRepeated};
      axios({
        method: "post",
        url: "/api/anonymous/register/pwreset",
        data: payload,
      }).then(() => {
        this.$props.passwortresetkey = "good"
      })
    },

  }
};
</script>

<style scoped/>

视图由另一个 vue 组件“PasswordReset”导入,如下:

<template>
  <div>
    <PasswordReset v-if="pwresetkey === 'good'"></PasswordReset>
    <div v-else>
      <v-card>
        <v-card-title primary-title>
          Passwort ändern
        </v-card-title>

        <v-card-text>
          Leider ist der Link ungültig.
        </v-card-text>
      </v-card>
    </div>
  </div>

</template>

<script>
import PasswordReset from "../../../components/anon/PasswordReset";

export default {
    name:"passwordreset",
    components: PasswordReset
};
</script>

对应的路由器:

{
        path: "/pwreset",
        name: "pwreset",
        meta: {
            requiresDisponent: false,
            requiresRecurring: false,
            requiresOneTime: false,
            requiresAnon: true
        },
        component: () => import("@/views/recurring/account/PasswordReset"),
        props: true
    },

但是,当我启动应用程序时,仅显示“PasswordReset”中的内容(v-card),但不显示输入字段。 此外,在“PasswordReset”组件中,它表示导出默认值未取消。

为什么它被标记为未使用并且视图没有被导入?

【问题讨论】:

  • components: PasswordReset -> components: {PasswordReset}
  • &lt;password-reset&gt;?
  • 两个组件具有相同的name 值。您是否尝试过更改其中之一?我想你可能会混淆模板编译器...
  • 改名没有解决问题。我将视图更改为“PasswordResetFormular”现在它说“PasswordResetFormular”组件已注册但未使用

标签: vue.js


【解决方案1】:

来自 vuejs docs:

如果你使用 kebab-case

Vue.component('my-component-name', { /* ... */ })

使用 kebab-case 定义组件时,在引用其自定义元素时也必须使用 kebab-case,例如在 .

如果你使用 PascalCase

Vue.component('MyComponentName', { /* ... */ })

使用 PascalCase 定义组件时,您可以在引用其自定义元素时使用任何一种情况。这意味着两者都可以接受。但是请注意,只有 kebab-case 名称在 DOM 中直接有效(即非字符串模板)。

【讨论】:

  • 我应该把这行代码放在哪里?在组件注册vuejs文件中还是在不显示的文件中?
  • 你是什么意思..不明白你的问题。 @Panzerkroete
  • 我应该在哪个文件中写入Vue.component(...) 行?
  • 取决于...你是用vue-cli创建项目的吗?
【解决方案2】:

尝试像这样更改密码重置组件:

<script>
import PasswordReset from "../../../components/anon/PasswordReset";

export default {
    name:"passwordreset",
    components: {PasswordReset}
};
</script>

VueJS Component Registration

【讨论】:

    猜你喜欢
    • 2016-03-03
    • 2018-09-17
    • 1970-01-01
    • 2022-07-25
    • 2021-05-13
    • 2020-01-09
    • 1970-01-01
    • 2021-06-25
    • 2019-05-28
    相关资源
    最近更新 更多