Vue.js - 如何根据状态动态绑定v-model到路由参数
Vue.js - How to dynamically bind v-model to route parameters based on state
我正在构建一个应用程序来为连锁餐厅的网站后端提供支持。用户将需要编辑页面内容和图像。该站点相当复杂,并且这些页面中有许多嵌套页面和部分。我试图制作一个标准模板,可以根据路线中的数据编辑所有页面,而不是对模板进行硬编码来编辑每个页面和部分。
我的文本输入卡在了 v-model 上。
这是我的路由器代码:
{
path: '/dashboard/:id/sections/:section',
name: 'section',
component: () => import('../views/Dashboard/Restaurants/Restaurant/Sections/Section.vue'),
meta: {
requiresAuth: true
},
},
然后,在我的 Section.vue 中,这是我对 v 模型的输入。在这种情况下,我正在尝试编辑餐厅的欢迎部分。如果我只是构建一个页面来编辑欢迎文本,那将没有问题。:
<vue-editor v-model="restInfo.welcome" placeholder="Update Text"></vue-editor>
这个问题是我需要动态引用 v-model 的“welcome”部分,因为我有大约 40 个 Sections 需要处理。
我可以参考要编辑的部分。$route.params.section。如果我可以使用 v-model="restInfo.
+ section" 就好了,但这不起作用。
有没有办法根据路由参数更新v-model?
谢谢!
更新...
这是我的全部Section.vue
<template>
<div>
<Breadcrumbs :items="crumbs" />
<div v-if="restInfo">
<h3>Update {{section}}</h3>
<div class="flex flex-wrap">
<div class="form__content">
<form @submit.prevent>
<vue-editor v-model="restInfo.welcome" placeholder="Update Text"></vue-editor>
<div class="flex">
<button class="btn btn__primary mb-3" @click="editText()">
Update
<transition name="fade">
<span class="ml-2" v-if="performingRequest">
<i class="fa fa-spinner fa-spin"></i>
</span>
</transition>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
import { VueEditor } from "vue2-editor"
import Loader from '@/components/Loader.vue'
import Breadcrumbs from '@/components/Breadcrumbs.vue'
export default {
data() {
return {
performingRequest: false,
}
},
created () {
this.$store.dispatch("getRestFromId", this.$route.params.id);
},
computed: {
...mapState(['currentUser', 'restInfo']),
section() {
return this.$route.params.section
},
identifier() {
return this.restInfo.id
},
model() {
return this.restInfo.id + `.` + this.section
},
crumbs () {
if (this.restInfo) {
let rest = this.restInfo
let crumbsArray = []
let step1 = { title: "Dashboard", to: { name: "dashboard"}}
let step2 = { title: rest.name, to: { name: "resthome"}}
let step3 = { title: 'Page Sections', to: { name: 'restsections'}}
let step4 = { title: this.$route.params.section, to: false}
crumbsArray.push(step1)
crumbsArray.push(step2)
crumbsArray.push(step3)
crumbsArray.push(step4)
return crumbsArray
} else {
return []
}
},
},
methods: {
editText() {
this.performingRequest = true
this.$store.dispatch("updateRest", {
id: this.rest.id,
content: this.rest
});
setTimeout(() => {
this.performingRequest = false
}, 2000)
}
},
components: {
Loader,
VueEditor,
Breadcrumbs
},
beforeDestroy(){
this.performingRequest = false
delete this.performingRequest
}
}
</script>
尝试使用括号访问器 []
而不是 .
:
<vue-editor v-model="restInfo[section]"
我正在构建一个应用程序来为连锁餐厅的网站后端提供支持。用户将需要编辑页面内容和图像。该站点相当复杂,并且这些页面中有许多嵌套页面和部分。我试图制作一个标准模板,可以根据路线中的数据编辑所有页面,而不是对模板进行硬编码来编辑每个页面和部分。
我的文本输入卡在了 v-model 上。
这是我的路由器代码:
{
path: '/dashboard/:id/sections/:section',
name: 'section',
component: () => import('../views/Dashboard/Restaurants/Restaurant/Sections/Section.vue'),
meta: {
requiresAuth: true
},
},
然后,在我的 Section.vue 中,这是我对 v 模型的输入。在这种情况下,我正在尝试编辑餐厅的欢迎部分。如果我只是构建一个页面来编辑欢迎文本,那将没有问题。:
<vue-editor v-model="restInfo.welcome" placeholder="Update Text"></vue-editor>
这个问题是我需要动态引用 v-model 的“welcome”部分,因为我有大约 40 个 Sections 需要处理。
我可以参考要编辑的部分。$route.params.section。如果我可以使用 v-model="restInfo.
+ section" 就好了,但这不起作用。
有没有办法根据路由参数更新v-model?
谢谢!
更新...
这是我的全部Section.vue
<template>
<div>
<Breadcrumbs :items="crumbs" />
<div v-if="restInfo">
<h3>Update {{section}}</h3>
<div class="flex flex-wrap">
<div class="form__content">
<form @submit.prevent>
<vue-editor v-model="restInfo.welcome" placeholder="Update Text"></vue-editor>
<div class="flex">
<button class="btn btn__primary mb-3" @click="editText()">
Update
<transition name="fade">
<span class="ml-2" v-if="performingRequest">
<i class="fa fa-spinner fa-spin"></i>
</span>
</transition>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</template>
<script>
import { mapState } from 'vuex'
import { VueEditor } from "vue2-editor"
import Loader from '@/components/Loader.vue'
import Breadcrumbs from '@/components/Breadcrumbs.vue'
export default {
data() {
return {
performingRequest: false,
}
},
created () {
this.$store.dispatch("getRestFromId", this.$route.params.id);
},
computed: {
...mapState(['currentUser', 'restInfo']),
section() {
return this.$route.params.section
},
identifier() {
return this.restInfo.id
},
model() {
return this.restInfo.id + `.` + this.section
},
crumbs () {
if (this.restInfo) {
let rest = this.restInfo
let crumbsArray = []
let step1 = { title: "Dashboard", to: { name: "dashboard"}}
let step2 = { title: rest.name, to: { name: "resthome"}}
let step3 = { title: 'Page Sections', to: { name: 'restsections'}}
let step4 = { title: this.$route.params.section, to: false}
crumbsArray.push(step1)
crumbsArray.push(step2)
crumbsArray.push(step3)
crumbsArray.push(step4)
return crumbsArray
} else {
return []
}
},
},
methods: {
editText() {
this.performingRequest = true
this.$store.dispatch("updateRest", {
id: this.rest.id,
content: this.rest
});
setTimeout(() => {
this.performingRequest = false
}, 2000)
}
},
components: {
Loader,
VueEditor,
Breadcrumbs
},
beforeDestroy(){
this.performingRequest = false
delete this.performingRequest
}
}
</script>
尝试使用括号访问器 []
而不是 .
:
<vue-editor v-model="restInfo[section]"