文章目录
一、el挂载点
-
el的作用?
用来设置Vue实例挂载(管理)的元素 -
Vue实例的作用范围是什么?
el命中的元素及其后代元素 -
是否可以使用其他的选择器?(除id选择器之外的选择器)
id、标签、类选择器都可以,但是一般用id选择器,因为其他选择器可能会命中其他数据 -
是否可以设置其他的dom元素呢?
可以,都是必须是双标签。(但是不能使用html和body)
二、data数据对象
实例:
<script>
var app=new Vue({
el:"#app",
data:{
message:"你好 小黑!",
school:{
name:"黑马程序员",
mobile:"13850997126"
},
campus:["北京校区","上海校区","深圳校区","广州校区"]
}
})
</script>
效果:
学习点:
- Vue中用到的数据定义在data中
- data中可以写复杂类型的数据
- 渲染复杂类型数据时,遵守js的语法即可
三、本地应用
v-text
- v-text指令的作用:设置标签的内容(textContent)
- 默认写法会替换全部内容,使用差值表达式{{}}可以替换指定内容
<div id="app">
{{message}}
<h2 v-text="message">哈哈</h2>
<h2>{{message}}嘻嘻</h2>
</div>
<script>
var app=new Vue({
el:"#app",
data:{
message:"你好 小黑!"
}
})
</script>
效果
- 内部支持写表达式
<div id="app">
{{message}}
<h2 v-text="message+'haha'">哈哈</h2>
<h2>{{message+'haha'}}嘻嘻</h2>
</div>
v-html
- v-html指令的作用是:设置元素的innerHTML
- 内容中有html结构会被解析为标签
- v-text指令无论内容是什么,只会解析为文本
- 解析文本使用v-text,需要解析html结构使用v-html
<body>
<div id="app">
<p v-html="content"></p>
<p v-text="content"></p>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
content:"<a href='http://www.baidu.com'>百度</a>"
}
})
</script>
</body>
效果:
v-on
- v-on指令的作用是:为元素绑定事件
- 事件名不需要写on
- 指令可以简写@
- 绑定的方法定义在methods属性中
- 方法内部通过this关键字可以访问定义在data中数据
实例:
<body>
<div id="app">
<input type="button" value="v-on指令" v-on:click="doIt">
<input type="button" value="v-on简写" @click="doIt">
<input type="button" value="双击事件" @dblclick="doIt">
<h2 @click="changeFood">{{food}}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
food:"西兰花炒蛋"
},
methods:{
doIt:function(){
alert("hello");
},
changeFood:function(){
this.food += "好好吃!"
}
}
})
</script>
</body>
效果:
补充实例:
补充效果:
补充总结:
计数器-案例
- 创建Vue实例时:el(挂载点),data(数据),methods(方法)
- v-on指令的作用是绑定事件,简写为@
- 方法中通过this,关键字获取data中的数据
- v-text指令的作用是:设置元素的文本值,简写为{{}}
- v-html指令的作用是:设置元素的innerHTML
<body>
<div id="app">
<div class="input-num">
<button @click="sub">
-
</button>
<span>{{num}}</span>
<button @click="add">
+
</button>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
num:1
},
methods:{
add:function(){
// console.log("add");
if(this.num<10){
this.num++;
}else{
alert("别点了,最大了")
}
},
sub:function(){
// console.log("sub");
if(this.num>0){
this.num--;
}else{
alert("别点了,最小了")
}
}
}
})
</script>
</body>
效果:
效果1.效果2.
效果3.
v-show
实例:
<div id="app">
<h1 v-show="isShow">haha</h1>
<input type="button" value="切换显示状态" @click="changeIsShow">
<input type="button" value="累加年龄" @click="addAge">
<h2 v-show="age>=18">hahaha</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app =new Vue({
el:"#app",
data:{
isShow:false,
age:17
},
methods:{
changeIsShow:function(){
this.isShow=!this.isShow;
},
addAge:function(){
this.age++;
}
}
})
</script>
效果:
v-if
实例:
<div id="app">
<input type="button" value="切换显示" @click="toggleIsShow">
<p v-if="isShow">黑马程序员v-if</p>
<p v-show="isShow">v-show_isShow</p>
<h2 v-if="temperature>=35">热死啦</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
isShow:false,
temperature:20
},
methods:{
toggleIsShow:function(){
this.isShow=!this.isShow;
}
}
})
</script>
效果:
- 点击按钮之前:
- 点击按钮之后:
v-bind
实例:
<div id="app">
<img v-bind:src="imgSrc">
<br>
<img :src="imgSrc" title="imgTitle+'!!!'"
:class="isActive?'active':''"@click="toggleActive">
<br>
<img :src="imgSrc" title="imgTitle+'!!!'"
:class="{active:isActive}" @click="toggleActive">
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app= new Vue({
el:"#app",
data:{
imgSrc:"http://www.itheima.com/images/logo.png",
imgTitle:"黄玉兰",
isActive:false
},
methods:{
toggleActive:function(){
this.isActive=!this.isActive
}
}
})
</script>
效果:
- 点击之前:
- 点击之后:
v-for
实例:
<div id="app">
<input type="button" value="添加数据" @click="add">
<input type="button" value="移除数据" @click="remove">
<ul>
<li v-for="(it,index) in arr">
{{index+1}}校区:{{it}}
</li>
</ul>
<h2 v-for="item in vegetables" v-bind:title="item.name">{{item.name}}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
arr:["北京","上海","广州","深圳"],
vegetables:[
{name:"西兰花炒蛋"},
{name:"玉兰炒蛋"}
]
},
methods:{
add:function(){
this.vegetables.push({name:"xixihaha"});
},
remove:function(){
this.vegetables.shift();
}
}
})
</script>
效果:
v-model
实例:
<div id="app">
<input type="button" value="修改message" @click="setM">
<input type="text" v-model="message" @keyup.enter="getM">
<h2>{{ message }}</h2>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
var app=new Vue({
el:"#app",
data:{
message:"黑吗"
},
methods:{
getM:function(){
alert(this.message);
},
setM:function(){
this.message="玉兰";
}
},
})
</script>