批改状态:合格
老师批语:
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>key的作用</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}</style></head><body><div id="app"><ul><li v-for="(item,name,index) of list" :key="item.index"><input type="radio" name="name">{{item.id}}、{{item.name}}</li></ul><input type="submit" value="提交答案" @click.prevent='handle'></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '#app',data() {return{ list: [{ id: "a", name: "天蓬老师" },{ id: "b", name: "灭绝老师" },{ id: "c", name: "西门老师" },{ id: "d", name: "郭靖老师" },]}},methods: {handle() {console.log(this.list);}},});</script></body></html>
v-if应用于数据渲染
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>key的作用</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}</style></head><body><div id="app"><button @click='flag=!flag' v-text="tips = flag ? `隐藏答案` : `显示答案`"></button><span v-if="flag">{{msg}}</span></div></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '#app',data() {return {msg: "A",flag: "ture",tips: "隐藏当"}},methods: {handle() {console.log(this.list);}},});</script></body></html>
按钮提交enter事件
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>key的作用</title><style>* {margin: 0;padding: 0;box-sizing: border-box;}</style></head><body><div id="app"><button >提交</button><input type="text" @keyup.enter="submit($event)" /><p v-if="list.length > 0"><span v-for="(item,index) of list" :key="index">{{item}}</p></span></div></div><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const vm = new Vue({el: '#app',data() {return {list: []};},methods: {submit(ev) {this.list.unshift(ev.target.value);ev.target.value = null;}},});</script></body></html>
vue实例从创建到销毁的全过程
出生到结束的过程(创建、运行、销毁)
生命周期钩子=生命周期函数=生命周期函数
生命周期函数
beforecreate:表示实例被创建出来之前,执行
create:data,methods可以被初始化了
mounted::el可以挂载了,data,methods可以被初始化了
updated:更新完可以输出
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>生命周期</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div id="app">{{words}}</div><script>// vue实例从创建到销毁的全过程// 像一个人从出生到死亡的完整流程// vue生命周期是函数,为每个周期提供了一个编程接口/钩子,开放出来供用户自定义const vm = new Vue({el: document.querySelector("#app"),data() {return {words: "大家晚上吃了吗?",};},// 实例创建之前,data不能用,el不可用beforeCreate() {console.log("实例创建前:", this.$el, this.words);},// 实例创建之后created() {console.log("实例创建完成:", this.$el, this.words);},// 挂载完成, 类似于"load"mounted() {console.log("挂载创建完成:", this.$el, this.words);},// 更新完成updated() {console.log("更新完成 data.words =", this.words);},});vm.words = "大家早上好";</script></body></html>
计算器属性
使代码更加简洁
基于data中数据做改变
get():取值
set( ):取值后改值
watch():监听器属性
使用时候,写函数名
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>计算属性</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div class="app"><p>数量:<!-- <inputtype="number"v-model="num"style="width: 5em"min="0"@change="calc"/> --><input type="text" v-model="num" /></p><p>单选题: {{price}} 分</p><!-- <p>金额: {{num * price}} 元</p> --><!-- <p>金额: {{res}} 元</p> --><!-- <p>金额: {{res}} 元</p> --><!-- 计算属性,本质上就是原生的访问器属性 --><p>单选题总分: {{amount}} 分</p></div><script>const vm = new Vue({el: document.querySelector(".app"),data() {return {num: 0,price: 2,res: 0,};},// 计算属性: 最终会和data合并,所以不要和data中已有属性重名computed: {// amount() {// return this.num * this.price;// },// 访问器属性有getter/setter// 计算属性默认是getteramount: {get() {return this.num * this.price;},},},// methods: {// calc() {// this.res = this.num * this.price;// },// },});vm.amount = 1001;</script></body></html>
<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>侦听器属性</title><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script></head><body><div class="app"><p><inputtype="number"v-model="num"style="width: 5em"min="0":max="max"/></p><p>单价: {{price}} 元</p><p>金额: {{res}} 元</p></div><script>const vm = new Vue({el: document.querySelector(".app"),data() {return {num: 0,price: 50,res: 0,max: 100,};},// 侦听器属性watch: {// 侦听的是某一个属性的值的变化,它的属性名与data中要监听的属性同名num(newValut, oldValue) {console.log(newValut, oldValue);// this.res = this.num * this.price;this.res = newValut * this.price;// 监听库存if (newValut >= 20) {this.max = newValut;alert("库存不足,请补货");}},},});// key: 主要是为了弥补列表渲染时,自动触发diff算法// v-if, v-else-if, v-show: 条件渲染// 键盘修饰符// 计算属性: 相当于原生的访问器属性// 侦听器属性: 监听数据对象的变化// 用计算属性完成的功能,侦听器几乎都可以完成</script></body></html>
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号