【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了

原因 :vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({``{ goal }} - {``{ index }})复制到第一个dom元素中,input元素仍然是老元素。

html 复制代码
  <body>
    <header>
      <h1>Vue Course Goals</h1>
    </header>
    <section id="user-goals">
      <h2>My course goals</h2>
      <input type="text" v-model="enteredGoalValue" />
      <button @click="addGoal">Add Goal</button>
      <p v-if="goals.length === 0">
        No goals have been added yet - please start adding some!
      </p>
      <ul v-else>
        <li
          v-for="(goal, index) in goals"
          @click="removeGoal(index)"
        >
          {{ goal }} - {{ index }}<input type="text" @click.stop />
        </li>
      </ul>
    </section>
  </body>
</html>
javascript 复制代码
const app = Vue.createApp({
	data() {
		return {
			enteredGoalValue: '',
			goals: [],
		};
	},
	methods: {
		addGoal() {
			this.goals.push(this.enteredGoalValue);
		},
		removeGoal(idx) {
			this.goals.splice(idx, 1);
		},
	},
});

app.mount('#user-goals');

为此引入key属性,可以在所有带有v-for的html标签使用,就像是id,给每个<li>添加不同的key属性,用来告知vue区分不同的<li>,这样做可以保证input中的内容不会丢失。

html 复制代码
<li
          v-for="(goal, index) in goals"
          :key="goal"
          @click="removeGoal(index)"
        >
        ```
相关推荐
codingFunTime3 分钟前
vue3 snapdom 导出图片和pdf
前端·javascript·pdf
成为大佬先秃头10 分钟前
渐进式JavaScript框架:Vue 组件
前端·javascript·vue.js
赵庆明老师13 分钟前
uniapp 微信小程序页面JS模板
javascript·微信小程序·uni-app
登山人在路上16 分钟前
Vue 2 中响应式失效的常见情况
开发语言·前端·javascript
海市公约26 分钟前
JavaScript零基础入门指南:从语法到实战的核心知识点解析
javascript·ecmascript·前端开发·dom·bom·定时器与事件·js语法实战
码界奇点31 分钟前
基于Spring Boot和Vue.js的房屋出租管理系统设计与实现
vue.js·spring boot·后端·车载系统·毕业设计·源代码管理
jiedaodezhuti36 分钟前
秒级定位线上Bug的一些命令
bug
Irene199136 分钟前
JavaScript 字符串和数组方法总结(默写版:同9则6 Str21 Arr27)
javascript·字符串·数组·方法总结
可触的未来,发芽的智生38 分钟前
新奇特:象棋与麻将,解析生成大模型的两种哲学
javascript·人工智能·python·程序人生·自然语言处理
程序员修心1 小时前
CSS 盒子模型与布局核心知识点总结
开发语言·前端·javascript