目录
前端开发教程链接
vuejs官方教程
框架:vue2
编译器:Webstore
测试案例1:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--1、引入vue.js文件-->
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<!--2、指定区域,该区域的内容希望由vue.js来接管-->
<div id="app">
<h1>Hello Vue.js</h1>
<div> 我是{
{
name}},QQ:{
{
qq}}</div>
<input type="button" value="click" v-on:click="clickMe">
</div>
<script>
<!--3、创建vue对象,并关联HTML区域-->
var app = new Vue({
el: "#app",
data: {
name: 'CodeKnight',
qq: '2131231'
},
methods: {
clickMe: function () {
this.name = "代码骑士";
this.qq = "123213";
}
}
})
</script>
</body>
</html>
使用cdn:
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
使用vue.js
vue.js下载
ctrl+s保存页面代码到桌面再拷贝到项目文件,然后直接使用
Vue常见指令:
1、插值表达式
一般在显示文本内容的标签中使用。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--1、引入vue.js文件-->
<script src="vue.js"></script>
</head>
<body>
<!--2、指定区域,该区域的内容希望由vue.js来接管-->
<div id="app">
<h1>Hello Vue.js</h1>
<div> 姓名:{
{
name}},性别:{
{
sex}},兴趣:{
{
interest}},邮箱:{
{
email}}</div>
<ul>
<li>{
{
'丽丽'}}</li>
<li>{
{
"丽丽:"+'18'}}</li>
<li>{
{
base+1+1}}</li>
<li>{
{
1===1?"丽丽":"alex"}}</li><!--三元运算,相当于C语言三目运算符-->
</ul>
<ul>
<li>{
{
condition?"丽丽":"alex" }}</li>
</ul>
<input type="button" value="click" v-on:click="clickMe">
</div>
<script>
<!--3、创建vue对象,并关联HTML区域-->
var app = new Vue({
el: "#app",
data: {
name: 'CodeKnight',
sex: "男",
interest: "敲代码",
dataInfo: {
id: 1,
email: "[email protected]",
},
condition: false,
base: 1
},
methods: {
clickMe: function () {
this.name = "代码骑士";
this.condition = true;
this.dataInfo.email = "[email protected]";
this.base += 100;
}
}
})
</script>
</body>
</html>
2、v-bind指令
一般用于对标签中的属性进行操作。
在项目中添加一张图片
示例代码1:用v-bind给图片添加一个自定义的css样式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.ig{
border: 10px solid red;
}
</style>
</head>
<body>
<div id="app">
<img alt="" v-bind:src="imgUrl" v-bind:class="cls">
</div>
<script>
var app = new Vue({
el:'#app',
data:{
imgUrl:'t011a27237030b8a9ee.jpg',
cls:"ig",
}
})
</script>
</body>
</html>
可以看到,我们的图片已经绑定了自定义的格式
示例代码2:用v-bind给标签添加多个属性(只要类型为True就会显示)
与普通写法相比优点是:可以传递参数,方便样式动态修改。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.ig {
border: 10px solid red;
}
.info {
color: red;
}
.danger {
font-size: 100px;
}
</style>
</head>
<body>
<div id="app">
<img alt="" v-bind:src="imgUrl" v-bind:class="cls">
<p v-bind:class="{info:v1,danger:v2}">你好呀~</p>
</div>
<script>
var app = new Vue({
el:'#app',
data:{
imgUrl:'神仙姐姐.jpg',
cls:"ig",
v1:true,
v2:true,
}
})
</script>
</body>
</html>
也可以对代码进一步简化
上述是以字典形式读取变量,下面介绍以列表形式读取
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.ig {
border: 10px solid red;
}
.info {
color: red;
}
.danger {
font-size: 100px;
}
</style>
</head>
<body>
<div id="app">
<img alt="" v-bind:src="imgUrl" v-bind:class="cls">
<p v-bind:class="clsDict">你好呀~</p>
<p v-bind:class="[a1,a2]">我是FeiFei~</p>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
imgUrl: '神仙姐姐.jpg',
cls: "ig",
clsDict: {
info: true,
danger: true,
},
a1: "info",
a2: "danger",
}
})
</script>
</body>
</html>
也可以使用三元运算符调整样式
<p v-bind:class="[1===2?a1:'a',a2]">我是FeiFei~</p>
除了对class使用bind外,其他属性也可以使用,比如style:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.ig {
border: 10px solid red;
}
.info {
color: red;
}
.danger {
font-size: 100px;
}
</style>
</head>
<body>
<div id="app">
<img alt="" v-bind:src="imgUrl" v-bind:class="cls">
<!--一般写法-->
<p class="danger info ig">Hi~</p>
<!--bind写法-->
<p v-bind:class="clsDict">你好呀~</p>
<p v-bind:class="[1===2?a1:'a',a2]">我是FeiFei~</p>
<!--一般写法-->
<p style="color: blue;font-size: 20px">这是我的手机号:********</p>
<!--bind写法-->
<p v-bind:style="{color:clr,fontSize: fSize+'px'}">这是我的手机号:********</p>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
imgUrl: '神仙姐姐.jpg',
cls: "ig",
clsDict: {
info: true,
danger: true,
},
a1: "info",
a2: "danger",
clr: "red",
fftSize: "20",
}
})
</script>
</body>
</html>
所以,当使用bind动态绑定时,只要data中的值发生变化,标签中的属性也会发生改变。
写一个点击按钮进行测试:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
.ig {
border: 10px solid red;
}
.info {
color: red;
}
.danger {
font-size: 100px;
}
</style>
</head>
<body>
<div id="app">
<img alt="" v-bind:src="imgUrl" v-bind:class="cls">
<!--一般写法-->
<p class="danger info ig">Hi~</p>
<!--bind写法-->
<p v-bind:class="{info:v1,danger: v2}">hello~</p>
<p v-bind:class="clsDict">你好呀~</p>
<p v-bind:class="[a1,a2]">我是FeiFei~</p>
<!--一般写法-->
<p style="color: blue;font-size: 20px">这是我的手机号:********</p>
<!--bind写法-->
<p v-bind:style="{color:clr,fontSize: fSize+'px'}">这是我的手机号:********</p>
<input type="button" value="点我" v-on:click="clickMe">
</div>
<script>
var app = new Vue({
el: '#app',
data: {
imgUrl: '神仙姐姐.jpg',
cls: "ig",
v1:true,
v2:true,
clsDict: {
info: true,
danger: true,
},
a1: "info",
a2: "danger",
clr: "red",
fftSize: "20",
},
methods:{
clickMe:function (){
this.v1 = false;
}
}
})
</script>
</body>
</html>
原始
点击按钮
v-bind指令注意事项
简写v-bind
简写格式:属性名=xxx,如:
v-bind属于单向绑定(JS修改->HTML修改)
意思是,只要JS中的变量值发生变化,html中的参数值也会发生变化。
例如:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{
{
txt}}</h1>
<input type="text" v-bind:value="txt">
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
txt:"代码骑士",
}
})
</script>
</html>
修改:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{
{
txt}}</h1>
<input type="text" v-bind:value="txt">
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
txt:"CodeKnight",
}
})
</script>
</html>
也可以通过按钮来实现
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{
{
txt}}</h1>
<input type="text" v-bind:value="txt">
<input type="button" value="点击" v-on:click="clickMe">
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
txt: "CodeKnight",
},
methods: {
clickMe:function (){
this.txt="代码骑士";
}
}
})
</script>
</html>
上面的示例,说明只有当js变化时,html中的值才会边,方向是单一的。那么,如果我们想让html中的值变化从而让js中的变量值也跟着变,也就是实现“双向绑定”我们就需要使用关键字v-model
。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h1>{
{
txt}}</h1>
<input type="text" v-model:value="txt">
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
txt: "CodeKnight",
}
})
</script>
</html>
3、v-model指令
一般用于在交互的表中使用,例如:input、select、textarea等。【双向绑定】
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div>
用户名:<input type="text" v-model="user">
</div>
<div>
密码:<input type="text" v-model="pwd">
</div>
<input type="button" value="登录" v-on:click="clickMe"/>
<input type="button" value="重置" v-on:click="clickForm"/>
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
user: "",
pwd: "",
},
methods: {
clickMe: function () {
console.log(this.user, this.pwd);
},
clickForm: function () {
this.user = "";
this.pwd = "";
}
}
})
</script>
</html>
效果:
点击重置
v-model常用标签
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div>
用户名:<input type="text" v-model="user">
</div>
<div>
密码:<input type="text" v-model="pwd">
</div>
<div>
性别:
<input type="radio" v-model="sex" value="1">男
<input type="radio" v-model="sex" value="2">女
</div>
<div>
爱好:
<input type="checkbox" v-model="hobby" value="11">蓝球
<input type="checkbox" v-model="hobby" value="22">足球
<input type="checkbox" v-model="hobby" value="33">排球
</div>
<div>
城市:
<select v-model="city">
<option value="sh">上海</option>
<option value="bj">北京</option>
<option value="sz">深圳</option>
</select>
</div>
<div>
擅长领域:
<select v-model="company" multiple>
<option value="11">技术</option>
<option value="22">销售</option>
<option value="33">运营</option>
</select>
</div>
<div>
其他:<textarea v-model="more"></textarea>
</div>
<input type="button" value="注册" v-on:click="clickMe"/>
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
user: "",
pwd: "",
sex: "2",
hobby: ["22"],
city: "sz",
company: ["22", "33"],
more: '...',
},
methods: {
clickMe: function () {
console.log(this.user, this.pwd, this.sex, this.hobby, this.city, this.company, this.more);
},
}
})
</script>
</html>
也可以将所有变量值放在一个字典里
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<div>
用户名:<input type="text" v-model="info.user">
</div>
<div>
密码:<input type="text" v-model="info.pwd">
</div>
<div>
性别:
<input type="radio" v-model="info.sex" value="1">男
<input type="radio" v-model="info.sex" value="2">女
</div>
<div>
爱好:
<input type="checkbox" v-model="info.hobby" value="11">蓝球
<input type="checkbox" v-model="info.hobby" value="22">足球
<input type="checkbox" v-model="info.hobby" value="33">排球
</div>
<div>
城市:
<select v-model="info.city">
<option value="sh">上海</option>
<option value="bj">北京</option>
<option value="sz">深圳</option>
</select>
</div>
<div>
擅长领域:
<select v-model="info.company" multiple>
<option value="11">技术</option>
<option value="22">销售</option>
<option value="33">运营</option>
</select>
</div>
<div>
其他:<textarea v-model="info.more"></textarea>
</div>
<input type="button" value="注册" v-on:click="clickMe"/>
</div>
</body>
<script>
var app = new Vue({
el: "#app",
data: {
info: {
user: "",
pwd: "",
sex: "2",
hobby: ["22"],
city: "sz",
company: ["22", "33"],
more: '...',
}
},
methods: {
clickMe: function () {
console.log(this.info);
},
}
})
</script>
</html>
这样就可以直接输出一个字典
4、v-for指令
用户数据进行循环展示。
代码示例1:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="item in dataList">{
{
item }}</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
dataList: ["小明", "小囧", "朵拉"],
}
})
</script>
</html>
输出
代码示例2:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,idx) in dataList">{
{
idx }}-{
{
item }}</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
dataList: ["小明", "小囧", "朵拉"],
}
})
</script>
</html>
代码示例3:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(value,key) in dataDict">{
{
key }}-{
{
value }}</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
dataDict: {
id:1,
age:18,
name:"小鸟",
}
}
})
</script>
</html>
输出
代码示例4:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,idx) in cityList">{
{
item.id }}-{
{
item.text }}</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
cityList:[
{
id:1,text:"上海"},
{
id:2,text:"北京"},
{
id:3,text:"广州"},
]
}
})
</script>
</html>
输出
代码示例5:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-for="(item,idx) in cityList">
<span v-for="(v,k) in item">{
{
k }}-{
{
v }}</span>
</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
cityList:[
{
id:1,text:"上海"},
{
id:2,text:"北京"},
{
id:3,text:"广州"},
]
}
})
</script>
</html>
输出
5、v-on事件
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
</head>
<body>
<div id="app">
<ul>
<li v-on:click="clickMe">点击</li>
<li v-on:dblclick="doSomething('双击')">双击</li>
<li v-on:mouseover="doSomething('进入')" v-on:mouseout="doSomething('离开')">进入&离开</li>
</ul>
</div>
</body>
<script>
var app = new Vue({
el: '#app',
data: {
},
methods:{
clickMe:function (){
alert("点击了")
},
doSomething:function (msg){
console.log(msg)
}
}
})
</script>
</html>
输出