通过以下代码获取Vue.js
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
Vue是一种声明式的变成,而原生js是命令式编程
命令式编程(原生JS):
创建div元素,设置id属性
定义一个变量叫message
将message变量放在div元素中显示
修改message数据
将修改的元素替换到div
声明式编程(Vue):
创建一个div元素,设置id属性
定义一个vue对象,将div挂载在vue对象上
在vue对象内定义变量message,并绑定数据
将message变量放在div元素上显示
修改vue对象中的变量message,div元素数据自动改变
下面是基础用法:
Vue 构造器中有一个el 参数,它是 DOM 元素中的 id。
data 用于定义属性,本实例中写了一个属性为message。
methods 用于定义的函数,可以通过 return 来返回函数值
{{ }} 用于输出对象属性和函数返回值。
<!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>创建一个动态的div</title> <script src="js/vue.js"></script> </head> <body> <!-- 首先创建一个div盒子他的ID为box --> <div id="box"> {{message}} <!-- {{ }} 用于输出对象属性和函数返回值。 --> </div> <button @click="fn1()">点击按钮</button> <!-- 点击事件的写法 --> <script> var box = new Vue({ el:'#box', <!-- 有一个el 参数,它是 DOM 元素中的 id,也就是上方div中的box --> data:{ <!-- data:定义属性 --> message:'你好'<!-- 如果要是多个属性就用,隔开 --> }, methods:{ <!-- methods 用于定义的函数,可以通过 return 来返回函数值--> fn1:function(){ console.log('你点击了此按钮'); } } }) </script> </body> </html>
效果如下:
可以通过F12调用到控制台,去更改Vue对象的message的值
Vue模板语法:
指令
指令是带有 v- 前缀的特殊属性,用于在表达式的值改变时,将某些行为应用到 DOM 上。
v-html :有时候我们不希望直接输出<h1>欢迎学习Vue</h1>这样的字符串,而输出被html自己转换的h1的文字,此时可以使用v-html
<div id="box"> <div v-html='message'></div> </div> <script> var box = new Vue({ el:'#box', data:{ message:'<h1>欢迎学习Vue</h1>', }, }) </script>
效果如下:
v-on :监听DOM v-on:click 也可以写成 @click 后者是其语法糖
举个例子:
<!-- 首先创建一个div盒子他的ID为box --> <div id="box"> <!-- <button v-on:click='add()'>+</button> --> <button @click='add()'>+</button> <!-- 这两种方法都可以 --> <h2>{{count}}</h2> </div> <script> var box = new Vue({ el:'#box', data:{ message:'欢迎学习Vue', count:0, }, methods:{ add:function(){ this.count++ } <!-- 两种写法都可 add(){ this.count++ } --> } }) </script>
效果如下:
v-once:表示该dom元素只渲染一次,之后数据改变,不会再次渲染
举个例子:
<div id="box"> <h2>{{message}}</h2> <div v-once>{{message}}</div> <div v-once>{{message}}</div> </div> <script> var box = new Vue({ el:'#box', data:{ message:'欢迎学习Vue', }, }) </script>
v-model:用来在 input、select、textarea、checkbox、radio 等表单控件元素上创建双向数据绑定,根据表单上的值,自动更新绑定的元素的值。
<div id="box"> <p>{{ message }}</p> <input v-model="message"> </div> <script> var box = new Vue({ el: '#box', data: { message: '欢迎学习Vue', }, }) </script>
v-bind :指令被用来响应地更新 HTML 属性
<!-- 完整语法 --> <a v-bind:href="url"></a> <!-- 缩写 --> <a :href="url"></a>
v-bind:title 我们也可以写成:title 后者是其语法糖,其作用当鼠标悬停在某段文字上时会出现提示
感兴趣的可以自己去尝试一下。
v-if:彻底消失
v-show此消失是等于display:none;经常做开销比较大的显示和消失,建议用v-show
<div id="box"> <h2 v-if="seen">seen</h2> <h2 v-show="show">show</h2> </div> <script> var box = new Vue({ el: '#box', data: { seen:true, show:false, }, }) </script>
v-pre:有时候我们期望直接输出{{message}}这样的字符串,而不是被{{}}语法转换的message的变量值,此时我们可以用v-pre标签
<div id="box"> <h1 v-pre>{{message}}</h1> </div> <script> var box = new Vue({ el: '#box', data: { message:'你好' }, }) </script>
效果如下:
v-text:覆盖dom元素中的数据,相当于js的innerHTML方法
<div id="box"> <h1 v-text='p'>{{message}}</h1> </div> <script> var box = new Vue({ el: '#box', data: { message:'你好', p:'我很好' }, }) </script>
Vue.js条件语句:v-if、v-else-if、v-else直接看例子:
<div id="box"> <h2 v-if="age<60">不及格</h2> <h2 v-else-if="age<95">良好</h2> <h2 v-else>优秀</h2> </div> <script> var box = new Vue({ el: '#box', data: { age:88 }, }) </script>
v-for :可以绑定数据到数组来渲染一个列表
切换栏效果:
<!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>遍历列表</title> <script src="js/vue.js"></script> <style> ul li{ cursor: pointer; } .active { color: #f00; } </style> </head> <body> <!-- 首先创建一个div盒子他的ID为box --> <div id="box"> <ul> <!-- <li v-for='(item,index) in movies' :key='index' :class="{active:currentIndex === index}" @click="change(index)">{{item}}-------{{index}}</li> --> <!-- <li v-for='(item,index) in movies' :key='index' :class="currentIndex === index?'active':''" @click="change(index)">{{item}}-------{{index}}</li> --> <li v-for="(item,index) in movies" :key="index" :class="getStyle2(index)" @click="change(index)">{{item}}-------{{index}}</li> </ul> </div> <script> var box = new Vue({ el: '#box', data: { movies: [ "海王", "海贼王", "火影忍者", "复仇者联盟" ], currentIndex: 0, }, methods: { change(index) { // this.currentIndex = index if (this.currentIndex === index) return; this.currentIndex = index }, getStyle() { return { active: this.isActive } }, getStyle2(index) { return { active: this.currentIndex === index } } } }) </script> </body> </html>
获取图片以及链接用法:
<!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>v-bind</title> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <style> img{ width: 300px; } </style> </head> <body> <div id="box"> <h2>{{message}}</h2> <img :src="imgURL" alt=""> <a :href="aHerf">百度一下</a> </div> <script> var box = new Vue({ el:'#box', data:{ message:'Hello Vue', aHerf:"https://www.baidu.com", imgURL:"https://desk-fd.zol-img.com.cn/g5/M00/02/00/ChMkJlbKw5aIY6PYAA0XnsktgwEAALG5QPtg4wADRe2915.jpg", }, methods:{ } }) </script> </body> </html>
效果如下: