龙空技术网

SpringBoot + Vue(八)Vue前端框架快速上手

龙城星夜雨 267

前言:

现时我们对“css站位”大致比较关注,各位老铁们都需要剖析一些“css站位”的相关知识。那么小编在网络上汇集了一些关于“css站位””的相关资讯,希望各位老铁们能喜欢,大家快快来了解一下吧!

前端环境的准备

编码工具:VSCode

依赖管理:NPM

项目构建:VueCli

Vue框架介绍

学习Vue前端框架需要有html,css,js的基础。

关于MVVM模式:

Vue快速入门

下面开始设计:

新建一个文件夹 D:\code\demo,打开Visual Studio Code,将demo文件夹拖拽到Visual Studio Code中。

新建一个文件,保存到D:\code\demo文件夹中,文件名为demo.html

输入英文的 !,然后回车,就可以得到html主要代码

在<body> </body>编写如下代码:

<body> <script src=";></script><div id="app">{{ message }}</div><script> const { createApp } = Vue createApp({ data() { return { message: 'Hello Vue!' } } }).mount('#app')</script></body>

说明:

1.添加如下代码,导入Vue脚本

<script src=";></script>

2.设置视图(View)。<div></div>标签之间的内容归View管理,声明要被vue所控制的DOM区域

<div id="app">{{ message }}</div>

3创建ViewModel(创建vue的实例对象),

<script> const { createApp } = Vue createApp({ data() { return { message: 'Hello Vue!' } } }).mount('#app')</script>

data里面规定的是数据,现在把数据渲染到上面的主键里面去,使用{{ message }},里面的message就是data里面的属性值。还要通过.mount('#app')确定渲染的范围,这里就是<div></div>这个标签范围内。

这里安装一个插件,open in browser。

安装插件有就可以在代码中右键,直接在浏览器中看效果。

可以得到如下效果

进入Vue官网: 在快手上手里面有基本用法。

1.基本用法

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <!--2.声明要被 vue 所控制的DOM区域-->    <div id="app">{{message}}</div><!--3.创建 vue 的实例对象 --><script>const hello = {    //指定数据源,即MVVM中的Model    data:function(){        return {            message:'Hello Vue'        }    }}const app = Vue.createApp(hello)app.mount('#app')</script></body></html>
2.内容渲染指令
<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <div id="app">        <p>姓名:{{username}}</p>        <p>性别:{{gender}}</p>        <p>{{desc}}}</p>        <p v-html="desc"></p>    </div>    <script>        const vm={            data:function(){                return {                    username:'张三',                    gender:'男',                    desc:'<a href=";>百度</a>'                }            }        }        const app = Vue.createApp(vm)        app.mount('#app')    </script></body></html>

注意:{{ }}为模板语法;{{desc}} 只会显示原始内容;

使用v-html指令就能将 desc:'<a href=";>百度</a>' 这部分内容以HTML的方式渲染出来,在浏览器中就会变成一个超链接的形式。

3.属性绑定指令

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>        <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <div id = "app">        <a :href="link">百度</a>        <input type="text" :placeholder = "inputValue">        <img :src="imgSrc" :style="{width:w}" alt="">    </div>    <script>        const vm={            data:function(){                return{                    link:";,                    //文本框的站位符号                    inputValue:'请输入内容',                    //图片的 src 地址                    imgSrc:'./images/test.jpg',                    w:'500px'                }            }        }        const app=Vue.createApp(vm)        app.mount('#app')    </script></body></html>

标签是有属性的,属性的绑定需要叫冒号 “ :”

还有一个写法就是加 v-bind: 但是一般都会把 v-bind 省略,就保留 :号。

比如: input输入框 有 type属性,placeholder属性;img图片的src属性,style样式属性等,都要在前面加 :号。

:号后面的是一个变量或表达式。

4.使用javaScript表达式

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>      <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <!--Vue 实例要控制的 DOM 区域-->    <div id="app">        <p>{{number + 1}}</p>        <p>{{ok ? 'True' : 'False'}}</p>        <p>{{message.split('').reverse().join('')}}</p>        <p :id="'list-' + id ">xxx</p>        <p>{{user.name}}</p>    </div>    <script>        const vm={            data :function(){                return{                    number: 9,                    ok:false,                    message:'ABC',                    id:3,                    user:{                        name:'zs',                    }                }            }        }        const app = Vue.createApp(vm)        app.mount('#app')    </script></body></html>

解释:

number + 1 变量加1

ok ? 'True' : 'False' 三元表达式

message.split('').reverse().join('') 字符断点翻转

user.name 调用user的name属性。

5.事件绑定指令

前端绑定事件操作:比如点击后加1;

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>      <!--1.导入 vue 的脚本文件-->      <script src=";></script></head><!--Vue 实例要控制的 DOM 区域-->  <div id = "app">    <h3>count 的值为:{{count}}</h3>    <button v-on:click="addCount">+1</button>    <button @click="count+=1">+1</button>  </div>  <script>    const vm={        data:function(){            return{                count:0,            }        },        methods:{            //点击按钮,让count 自增 +1            addCount(){                this.count +=1            }        },    }    const app = Vue.createApp(vm)    app.mount('#app')  </script><body>    </body></html>

说明:count的值初始定为0。

<button v-on:click="addCount"> 按钮点击会触动"addCount"方法。在下面的addCount()方法中定义了count的值自增1。

v-on: 在这里可以简写成 @

<button @click="count+=1"> 直接在按钮中定义了表达式。

如果逻辑简单可以直接用表达式,逻辑复杂可以定义函数来完成。

按钮中的count数据发生变化,<h3>{{count}}里面的count的值自动变化,页面也自动刷新。

自定义的方法定到methods里面,这里的this就是指vm对象,用 this. 就可以访问上面的初始count = 0 。

6.条件渲染指令

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <div id="app">        <button @click="flag=!flag">Toggle Flag</button>        <p v-if="flag">请求成功----被 v-if 控制</p>        <p v-show="flag">请求成功----被 v-if 控制</p>    </div>    <script>        const vm = {            data:function(){                return{                    flag:false,                                    }            }        }        const app = Vue.createApp(vm)        app.mount('#app')    </script>    </body></html>

说明:

v-if 传递的是一个布尔值,如果值为 true,标签被渲染,如果为false 标签就不会被渲染。

运行结果,可以看到两个<p>标签在浏览器中都看不到,区别为

v-if 的值为false,该标签不会创建出来;

v-show 的值为false,该标签会被创建出来,但是会隐藏起来,不会在浏览器中显示出来。

如果标签频繁被切换,使用v-show 效率更加高一点。

点击按钮:<button @click="flag=!flag">,里面通过 !flag 将 flag 值取反,这样 flag 的值就由 false 变成了 true ,这样两个<p>标签的内容就显示在浏览器上了。

7.v-else和v-else-if指令

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <div id="app">        <p v-if="num > 0.5">随机数 > 0.5</p>        <p v-else>随机数≤0.5</p>        <hr/>        <p v-if="type === 'A'">优秀</p>        <p v-else-if="type === 'B'">良好</p>        <p v-else-if="type === 'C'">一般</p>        <p v-else>差</p>      <div v-show="a">        测试      </div>      <button @click="a=!a">点击</button>    </div><script>    const vm = {            data:function(){                return{                    //设置1以内的随机数                    num:Math.random(0.99),                    //设置type的值                    type:'B',                    //给变量 a 赋值                    a:false,                                                     }            }        }        const app = Vue.createApp(vm)        app.mount('#app')</script></body></html>

v-else和v-else-if指令就是判断语句的用法

num:Math.random(0.99)

设置1以内的随机数赋值给 num ,两个<p>标签中根据 num 的值显示不同内容

<p v-if="num > 0.5">随机数 > 0.5</p><p v-else>随机数≤0.5</p>

这里直接给 type 赋值了 B ,有兴趣了可以自己写一个方法,随机赋值 A B C D,这样就可以在浏览器中出现相应的成绩。

type:'B'

运行结果:

8.列表渲染指令

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>    <!--1.导入 vue 的脚本文件-->    <script src=";></script></head><body>    <div id="app">        <ul>            <li v-for="(user,i) in userList">索引是{{i}},姓名是:{{user.name}}</li>        </ul>    </div>    <script>        const vm = {            data:function(){                return{                    userList:[                        {id:1,name:'zhangsan'},                        {id:2,name:'lisi'},                        {id:3,name:'wangwu'},                    ] ,                                              }            },        }        const app = Vue.createApp(vm)        app.mount('#app')    </script>    </body></html>

定义了一个 userList 数组(注意:数组用 [ ] 符号)用于存数据,里面赋值了3个有 id 和 name 属性的对象。这里的数据也可以从后端传过来,后面会讲前后端的联调。

<li v-for="(user,i) in userList">

v-for 后面的可以带一个参数,这时取出来就是对应的元素。这里的两个参数(user,i),前面的是元素,后面的是索引 。in 后面是需要循环的数据 userList,这时userList 里面有多少个元素,<li> 标签就会被创建几个。所以这里写的是一个<li>标签,浏览器显示出来的是三个<li>标签的内容。

运行结果

9.v-for中的key

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <meta name="viewport" content="width=device-width, initial-scale=1.0">    <title>Document</title>     <!--1.导入 vue 的脚本文件-->     <script src=";></script></head><body>    <div id="app">      <!---添加用户的区域--->      <div >        <input type="text" v-model="name">        <button @click="addNewUser">添加新用户</button>      </div>        <!---用户列表区域--->      <ul>       <li v-for="(user,index) in userList">        <input type="checkbox" />        姓名:{{user.name}}         </li>       </ul>    </div>    <script>        const vm = {            data:function(){                return{                    userList:[                        {id:1,name:'zhangsan'},                        {id:2,name:'lisi'},                    ] ,                     //输入的用户名                    name:'',                    //下一个可用的 id 值                    nextId:3                                             }            },            methods:{                //点击添加按钮                addNewUser(){                    this.userList.unshift({id:this.nextId,name:this.name})                    this.name=''                    this.nextId++                }            }        }        const app = Vue.createApp(vm)        app.mount('#app')    </script></body></html>

运行结果:

对文本框中输入新用户姓名,比如: george 点击 添加新用户按钮,结果如下:

标签: #css站位