Uncaught TypeError: this.set is not a function in vue js
Uncaught TypeError: this.set is not a function in vue js
this is what error i am getting when i try to edit the array value
我想更改特定索引上的数组值,但是当我尝试这样做时,控制台中显示错误,任何人都可以帮我解决这个问题。
<script>
//import Vue from 'vue'
import Task from "./Task.vue";
import TaskName from "./TaskName.vue";
export default {
components: {
Task,
TaskName,
},
data() {
return {
Task: [],
};
},
methods: {
sectionTask(Task) {
const newTaskTitle = {
Task: Task,
};
this.Task.push(newTaskTitle);
},
onremoveTask(Index){
this.Task.splice(Index, 1)
},
onUpdateTaskTitle(Index,newTaskTitle){
console.log(Index);
console.log(newTaskTitle);
this.$set(this.Task, Index, newTaskTitle);
},
},
};
</script>
<template>
<TaskName @section-task="sectionTask" />
<Task :Task="Task" @remove="onremoveTask" @update="onUpdateTaskTitle"/>
</template>
在 Vue 3 中,this.$set
被移除。参见 breaking changes docs。
[].splice
can take values to add new values to the array。因此,对于您的示例,您可以将 this.$set
替换为:
this.Task.splice(Index, 1, newTaskTitle);
这将从 Index
开始的 1 个值替换为 newTaskTitle
。
我使用 Vue.js 中的“地图”函数解决了这个错误。下面我正在更新代码你可以看看
这是发生了什么:当您尝试更新将在某处引用的数组时,Vue 将无法直接更新它,因此首先制作一个副本数组并对其进行更改,然后您可以更新数组使用地图功能。希望你能得到答案!
<script>
//import Vue from 'vue'
import Task from "./Task.vue";
import TaskName from "./TaskName.vue";
export default {
components: {
Task,
TaskName,
},
data() {
return {
Task: [],
};
},
methods: {
sectionTask(Task) {
const newTaskTitle = {
Task: Task,
};
this.Task.push(newTaskTitle);
},
onremoveTask(Index){
this.Task.splice(Index, 1)
},
onUpdateTaskTitle(Index,newTaskTitle){
console.log(Index);
console.log(newTaskTitle);
console.log(this.Task);
const TaskCopy = this.Task.map(function(element, index) {
if(index === Index){
element.Task = newTaskTitle
}
return TaskCopy;
});
},
},
};
</script>
<template>
<TaskName @section-task="sectionTask" />
<Task :Task="Task" @remove="onremoveTask" @update="onUpdateTaskTitle"/>
</template>
this is what error i am getting when i try to edit the array value
我想更改特定索引上的数组值,但是当我尝试这样做时,控制台中显示错误,任何人都可以帮我解决这个问题。
<script>
//import Vue from 'vue'
import Task from "./Task.vue";
import TaskName from "./TaskName.vue";
export default {
components: {
Task,
TaskName,
},
data() {
return {
Task: [],
};
},
methods: {
sectionTask(Task) {
const newTaskTitle = {
Task: Task,
};
this.Task.push(newTaskTitle);
},
onremoveTask(Index){
this.Task.splice(Index, 1)
},
onUpdateTaskTitle(Index,newTaskTitle){
console.log(Index);
console.log(newTaskTitle);
this.$set(this.Task, Index, newTaskTitle);
},
},
};
</script>
<template>
<TaskName @section-task="sectionTask" />
<Task :Task="Task" @remove="onremoveTask" @update="onUpdateTaskTitle"/>
</template>
在 Vue 3 中,this.$set
被移除。参见 breaking changes docs。
[].splice
can take values to add new values to the array。因此,对于您的示例,您可以将 this.$set
替换为:
this.Task.splice(Index, 1, newTaskTitle);
这将从 Index
开始的 1 个值替换为 newTaskTitle
。
我使用 Vue.js 中的“地图”函数解决了这个错误。下面我正在更新代码你可以看看
这是发生了什么:当您尝试更新将在某处引用的数组时,Vue 将无法直接更新它,因此首先制作一个副本数组并对其进行更改,然后您可以更新数组使用地图功能。希望你能得到答案!
<script>
//import Vue from 'vue'
import Task from "./Task.vue";
import TaskName from "./TaskName.vue";
export default {
components: {
Task,
TaskName,
},
data() {
return {
Task: [],
};
},
methods: {
sectionTask(Task) {
const newTaskTitle = {
Task: Task,
};
this.Task.push(newTaskTitle);
},
onremoveTask(Index){
this.Task.splice(Index, 1)
},
onUpdateTaskTitle(Index,newTaskTitle){
console.log(Index);
console.log(newTaskTitle);
console.log(this.Task);
const TaskCopy = this.Task.map(function(element, index) {
if(index === Index){
element.Task = newTaskTitle
}
return TaskCopy;
});
},
},
};
</script>
<template>
<TaskName @section-task="sectionTask" />
<Task :Task="Task" @remove="onremoveTask" @update="onUpdateTaskTitle"/>
</template>