Vue简介:
1.vue是javaScript框架
2.简化Dom操作
3.响应式的数据驱动
第一个vue程序:
el:挂载点
data:数据对象
<body>
<div id="app">
{{msg}}
<br>
{{student.name}} {{student.age}} //对象.属性
<br>
{{school[0]}} {{school[1]}} {{school[2]}} //对象[num]
</div>
</body>
<script>
new Vue({ // 1.创建vue实例对象
el: "#app", // 2.设置el属性
data: { // 3. data属性
// 字符串
msg: "hello vue!",
// 对象
student: {
name: "王一",
age: "21"
},
// 数组
school: ["清华大学", "北京大学", "复旦大学"]
}
})
//输出:hello vue!
//王一 21
//清华大学 北京大学 复旦大学
</script>
vue指令:
1.内容绑定,事件绑定
v-text v-html v-on基础
2.显示切换,属性绑定
v-show v-if v-bind
3.列表循环,表单元素绑定
v-text
<body>
<div id="app">
<h2 v-text="msg">显示</h2> //所有内容都会被替换成msg对应的内容
<h2>显示{{msg}}</h2> //只有差值表达式{{}}中内容会被替换msg对应的内容
<h2 v-text="test+'世界'">显示</h2> //字符串拼接
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
msg: "hello vue",
test: "你好"
}
})
</script>
v-html
<body>
<div id="app">
<p v-html="msg"></p>
<p v-text="msg"></p>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
msg: "<a href='http: //www.baidu.com'>网址</a>"
}
})
</script>
v-on基础
<body>
<div id="app">
<input type="button" value="v-on指令" v-on:click="doIt">
<input type="button" value="@简写" @click="doIt">
<input type="button" value="双击事件" @dblclick="doIt">
<h2 @click="changeLike">{{like}}</h2>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
like: "足球"
},
methods: {
doIt: function () {
alert("hello vue!")
},
changeLike: function () {
this.like = "乒乓球"
}
}
})
</script>
v-on补充
<body>
<div id="app">
<input type="button" value="点击" @click="doIt(666,'老铁')">
<input type="text" @keyup.enter="sayHi">
</div>
</body>
<script>
new Vue({
el: "#app",
methods: {
doIt: function (a, b) {
console.log("hello vue");
console.log(a);
console.log(b);
},
sayHi: function () {
alert("吃了没")
}
}
})
</script>
计数器
<body>
<!-- 计数器 -->
<div id="app">
<div class="input-num">
<button @click="sub">-</button>
<span>{{num}}</span>
<button @click="add">+</button>
</div>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
num: 0
},
methods: {
add: function () {
this.num++
},
sub: function () {
this.num--
}
}
})
</script>
v-show
<body>
<!-- 切换显示 -->
<div id="app">
<input type="button" value="点击切换" @click=" changeShow">
<img v-show="isShow" src="./images/1.jpg">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
isShow: false
},
methods: {
changeShow: function () {
this.isShow = !this.isShow
}
}
})
</script>
v-if
<body>
<div id="app">
<input type="button" value="切换显示" @click="toggleIsShow">
<p v-if="isShow">hello v-if</p>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
isShow: false
},
methods: {
toggleIsShow: function () {
this.isShow = !this.isShow
}
}
})
</script>
v-bind
<body>
<div id="app">
<img v-bind:src="imgSrc" v-bind:title="imgTitle+'!!!'" v-bind:class="isActive?'active':''" @click="toggleActive">
<img :src="imgSrc" :title="imgTitle+'!!!'" :class="{active:isActive}" @click="toggleActive">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
imgSrc: "./images/1.jpg",
imgTitle: "hello vue",
isActive: false
},
methods: {
toggleActive: function () {
this.isActive = !this.isActive
}
}
})
</script>
v-for
<body>
<div id="app">
<input type="button" value="添加数据" @click="add">
<input type="button" value="移除数据" @click="remove">
<ul>
<li v-for="(item,index) in arr">
{{index+1}}{{item}}
</li>
</ul>
<h2 v-for="(item,index) in obj">
{{item.name}}{{item.age}}
</h2>
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
arr: ["北京", "上海", "广州"],
obj: [
{ name: "王一" },
{ age: 21 },
]
},
methods: {
add: function () {
this.obj.push({ name: "张三" }, { age: 31 })
},
remove: function () {
this.obj.shift()
}
}
})
</script>
v-model
<body>
<div id="app">
<input type="text" v-model="msg" @keyup.enter="getM()">
<h2>{{msg}}</h2>
<input type="button" value="修改" @click="setM()">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
msg: "hello vue!!!"
},
methods: {
getM() {
alert(this.msg)
},
setM() {
this.msg = "你好"
}
}
})
</script>
v-pre
不会渲染,直接以差值表达式形式显示
v-once
只渲染一次,后期数据有变化也不再渲染