【问题标题】:In Vue, is it possible to allow users to create Router Links?在 Vue 中,是否可以允许用户创建路由器链接?
【发布时间】:2021-06-05 02:42:10
【问题描述】:

我正在使用 Vue 制作一个 CRUD 系统。到目前为止,我已经做到了,登录用户可以管理应用程序中的内容,例如添加/更新/删除文本和图像。 但是让我们假设用户想要创建一个按钮,并且该按钮需要链接到某个地方,比如链接到不同的组件。 这是如何实现的?

如果无法创建路由器链接,那么至少有什么方法可以让用户将正常的 url 地址添加到文本块中?

示例:

“输入链接名称”

“输入链接的 URL”

这就是我当前的代码的样子。我添加了一个 url 类型的输入字段,因为我相信这是我需要开始的地方,但我不知道从哪里开始。

<template>
<AdminNavbar/>
   <form @submit.prevent="handleSubmit">
      <h4>Create new content</h4>
      <input type="text" required placeholder="Insert title" v-model="cardTitle">
      <input type="text" required placeholder="Insert descriptiob" v-model="cardDescription">
      <label>Add a link:</label>
      <input type="url" v-model="cardLink">
      <label>Upload image</label>
      <input type="file" @change="handleChange">
      <div class="error">{{ fileError }}</div>
      <button v-if="!isPending">Create</button>
      <button v-else disabled>Saving...</button>
   </form>
</template>

<script>

import slugify from 'slugify'
import { ref } from 'vue'
import useStorage from '@/composables/useStorage'
import useCollection from '@/composables/useCollection'
import { timestamp } from '@/firebase/config'
import AdminNavbar from '@/components/AdminNavbar.vue'
import { useRouter } from 'vue-router' 

export default {

   components: {
      AdminNavbar
   },

    setup() {
       const slug = ref(null)
       const { filePath, url, uploadImage } = useStorage()
       const { error, addDoc } = useCollection('cards')
       const cardTitle = ref('')
       const cardDescription = ref('')
       const cardLink = ref('')
       const file = ref(null)
       const fileError = ref(null)
       const isPending = ref(false)
       const router = useRouter();

       const handleSubmit = async () => {
         if (cardTitle.value) {
             slug.value = slugify(cardTitle.value, {
                replacement: '-',
                remove: /[*+~.()'"!:@]/g,
                lower: true
             })
          }
          if (file.value) {
             isPending.value = true
             await uploadImage(file.value)
             await addDoc({
                slug: slug.value,
                cardTitle: cardTitle.value,
                cardDescription: cardDescription.value,
                cardLink: cardLink.value,
                cardImage: url.value,
                filePath: filePath.value,
                createdAt: timestamp()
             })
             isPending.value = false
             if(!error.value) {
                router.push({ name: "Home" })
             }
          }
       }

       // allowed file types

       const types = ['image/png', 'image/jpeg']

       const handleChange = (e) => {
          const selected = e.target.files[0]
          console.log(selected)

          if (selected && types.includes(selected.type)) {
             file.value = selected
             fileError.value = null 
          } else {
             file.value = null
             fileError.value = 'Please select an image of the type JPG or PNG'
          }
       }

       return {
          slug,
          cardTitle,
          cardDescription,
          cardLink,
          handleSubmit,
          handleChange,
          fileError,
          file,
          isPending
       }
    }
}
</script>

【问题讨论】:

    标签: javascript vue.js vuejs3


    【解决方案1】:

    因此,您将创建一个接受 2 个参数的路由。示例:/images/{user}/{image-slug}。因此,现在链接图像时,此路由将路由到组件,您可以根据用户和 slug 加载图像。示例:http://example.com/images/1/imagename

    【讨论】:

    • 对不起。我读了几次你的答案,但我认为我并不完全理解它。据我了解,您建议我将路线链接到特定元素(在本例中为图像),但我想要用户在输入字段中输入一些文本,然后我想给他们选择的选项一条路线(或超链接)并将其添加到那段文本中。我知道这可以通过所见即所得编辑器中的超链接轻松实现,但我正在寻找一种类似于您在 WordPress 和其他 CMS 应用程序中所做的方法。
    猜你喜欢
    • 2020-10-02
    • 2021-02-26
    • 2012-04-10
    • 2018-02-10
    • 2020-10-11
    • 2019-05-20
    • 2018-04-30
    • 1970-01-01
    • 2011-10-13
    相关资源
    最近更新 更多