之前在idea上写过的vue代码找不到了,为了防止下次再找不到,写一个md记录一下。
vue 的安装 需要15版本以上的npm
执行
根据需求选择合适的开发环境
1 2 3 4 5 6 7 8 √ Project name: ... vue01 √ Add TypeScript? ... No / Yes √ Add JSX Support? ... No / Yes √ Add Vue Router for Single Page Application development? ... No / Yes √ Add Pinia for state management? ... No / Yes √ Add Vitest for Unit Testing? ... No / Yes √ Add an End-to-End Testing Solution? » No √ Add ESLint for code quality? ... No / Yes
执行
1 2 3 cd vue01(创建项目的文件夹) npm install npm run dev
项目基本文件如图(删掉了一些)
在app.vue中导入一下component
1 2 3 4 5 6 7 <script setup> import Helloworld from './components/HelloWorld.vue' </script> <template> <Helloworld/> </template>
在HelloWorld.vue中随便写点东西
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script> export default { data() { return { msg: '一条消息', number: '2' } } } </script> <template> <div> {{ msg }} <h4>{{ number + 1 }}</h4> </div> </template>
在前端基本跑起来了
v-bind:绑定属性 主要用于绑定class和id(标签里的属性)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <script> export default { data ( ) { return { msg : '一条消息' , number : '2' , situation : 'active' , dynamicId : 'appld' } } } </script> <template > <div > {{ msg }} <h4 > {{ number + 1 }}</h4 > </div > <div v-bind:class ="situation" v-bind:id ="dynamicId" > </div > </template >
如果一个data的值是null或者undefined,则绑定不上
v-bind简写方式:
1 <div :class="situation" :id="dynamicId">
v-bind可以绑定对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 <script > export default { data ( ) { return { msg : '一条消息' , number : '2' , situation : 'active' , dynamicId : 'appld' , objectAttrs : { id : 'apple' , class : 'title' } } } } </script > <template > <div > {{ msg }} <h4 > {{ number + 1 }}</h4 > </div > <div v-bind:class ="situation" :id ="dynamicId" > v-bind绑定 </div > <div : ="objectAttrs" > v-bind可以绑定对象</div > </template >
条件渲染 v-if v-else
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 <script > export default { data ( ) { return { flag : true } } } </script > <template > <h3 > 条件渲染</h3 > <div v-if ="flag" > flag == true</div > <div v-else > flag == false</div > </template >
v-else-if
使用的时候的一般形式
1 2 3 <div v-if ="condiction==='a'" > </div > <div v-else-if ="condiction==='b'" > </div > <div v-else > </div >
不赘述
v-show,用法与v-if类似,但是只能判定自身true和false
v-show的标签始终都会渲染,只是如果为false,则不显示。而v-if,如果为false则不会渲染,只有当true的时候才会重新添加。
列表渲染 v-for
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script > export default { data ( ) { return { list : ["第一条" , "第二条" , "第三条" , "第四条" ] } } } </script > <template > <h3 > 聊表渲染</h3 > <p v-for ="(k, kk) in list" > {{ kk }}-{{ k }}</p > </template >
对于json串的渲染
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 <script > export default { data ( ) { return { list : ["第一条" , "第二条" , "第三条" , "第四条" ], people : [{ "name" : "John" , "age" : 30 , "city" : "New York" }, { "name" : "Alice" , "age" : 25 , "city" : "London" }, { "name" : "Michael" , "age" : 35 , "city" : "Paris" }] } } } </script > <template > <h3 > 聊表渲染</h3 > <p v-for ="(k, kk) in list" > {{ kk }}-{{ k }}</p > <div v-for ="item in people" > <h3 > 姓名:{{ item.name }}</h3 > <h4 > 年龄:{{ item.age }}</h4 > <h5 > 城市:{{ item.city }}</h5 > </div > </template >
<p v-for="(k, kk) in list">{{ kk }}-{{ k }}</p>
对于对象的遍历,可以用三个参数<p v-for="(value,item,index) in list">{{ index }}-{{ item }}-{{ value }}</p>
使用v-bind对遍历的数据加key属性可以减少更新数据时的内存消耗(使用唯一索引id)
事件处理 我们可以使用v-on指令(简写为 @)来监听DOM事件,并在事件触发时执行对应的JavaScript。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <script > export default { data ( ) { return { count : 0 } } } </script > <template > <h3 > 事件处理--内联方式</h3 > <button @click ="count++" > Add</button > <p > {{ count }}</p > <button @click ="count--" > Sub</button > </template >
事件参数
vue中的event对象就是原生JS中的Event对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 <script > export default { data ( ) { return { names : ["Shyee" , "Judy" , "Lissa" ] } }, methods : { getNameHandler (msg, e ) { console .log (msg) console .log (e) } } } </script > <template > <h3 > 事件处理--参数传递</h3 > <p @click ="getNameHandler(item, $event)" v-for ="(item, index) in names" :key ="index" > {{ item }}</p > </template >