Vue-学习笔记
基础
起步
<!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>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<p>{{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
}
})
</script>
</body>
</html>
模板语法
就是在页面上输出数据
{{文本}}
<div id="app"> <p>{{ message }}</p> </div>
v-html
使用 v-html 指令用于输出 html 代码:
<div id="app">
<div v-html="message"></div>
</div>
<script>
new Vue({
el: '#app',
data: {
message: '<h1>菜鸟教程</h1>'
}
})
</script>
v-if
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 测试实例 - 菜鸟教程(runoob.com)</title>
<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
</head>
<body>
<div id="app">
<div v-if="type === 'A'">
A
</div>
<div v-else-if="type === 'B'">
B
</div>
<div v-else-if="type === 'C'">
C
</div>
<div v-else>
Not A/B/C
</div>
<!-- v-show -->
<p v-show="is_show >= 10">v-show</p>
</div>
<script>
new Vue({
el: '#app',
data: {
type: 'C',
is_show:10
}
})
</script>
</body>
</html>
v-if v-show 的区别:
循环语句
循环使用 v-for 指令。
v-for 指令需要以 site in sites 形式的特殊语法, sites 是源数据数组并且 site 是数组元素迭代的别名。
渲染数组
v-for 可以绑定数据到数组来渲染一个列表:
<div id="app">
<ol>
<li v-for="site in sites">
{{ site.name }}
</li>
</ol>
</div>
<script>
new Vue({
el: '#app',
data: {
sites: [
{ name: 'Runoob' },
{ name: 'Google' },
{ name: 'Taobao' }
]
}
})
</script>
模板中使用v-for
<ul> <template v-for="site in sites"> <li>{{ site.name }}</li> <li>--------------</li> </template> </ul>
v-for 迭代对象
<div id="app">
<ul>
<li v-for="value in object">
{{ value }}
</li>
</ul>
</div>
<script>
new Vue({
el: '#app',
data: {
object: {
name: '菜鸟教程',
url: 'http://www.runoob.com',
slogan: '学的不仅是技术,更是梦想!'
}
}
})
</script>
第二个的参数为键名
<div id="app">
<ul>
<li v-for="(value, key) in object">
{{ key }} : {{ value }}
</li>
</ul>
</div>
第三个参数为索引
<div id="app">
<ul>
<li v-for="(value, key, index) in object">
{{ index }}. {{ key }} : {{ value }}
</li>
</ul>
</div>
循环整数
v-for 也可以循环整数
<div id="app">
<ul>
<li v-for="n in 10">
{{ n }}
</li>
</ul>
</div>
事件
onchange == @change
onclick == @click
onmouseover == @mouseover
onmouseout == @mouseout
v-on
事件监听可以使用 v-on 指令:
<div id="app">
<button v-on:click="counter += 1">增加 1</button>
<p>这个按钮被点击了 {{ counter }} 次。</p>
</div>
<script>
new Vue({
el: '#app',
data: {
counter: 0
}
})
</script>
@ == v-on 缩写形式
<button @click="greet">Greet</button>
事件修饰符
<!-- 阻止a链接跳转 --> <a href="http://www.baidu.com" @click.prevent="aa()">点击</a>
组件
使用步骤
在App根组件内使用子组件;先导入 再注册Header组件、最后以标签形式使用即可
Header
<template>
<div id="Header">
<p>{{ username }}</p>
<button @click="changeName()">修改测试</button>
</div>
</template>
<script>
export default {
// data 必须是个函数 数据在return内
data() {
return {
username:"我是Header组件"
}
},
methods: {
changeName() {
this.username = "测试修改方法"
}
}
}
</script>
<style scoped>
#Header{
background-color: red;
}
p {
color: red;
}
</style>
props
给组件自定义属性 灵活封装组件
给Demo组件封装属性init
<script>
export default {
//以数组形式使用props
// props:['init'],
// 属性都是只读的 要想改变属性值 可以再次赋值给data内的属性 再次修改
props: {
init: {
default: 0, // 默认值
type: Number, // 设置值类型
required: true // 设置是否传值
}
},
data() {
return {
count: this.init
}
}
}
</script>
在App组件内使用 并给init传值 count是app的属性
<Demo :init="count"/>
传值
父传子
子组件定义props属性
<template>
<p>{{name}}=== {{age}}</p>
</template>
<script>
export default {
props:['name','age'],
data() {
return {
}
}
}
</script>
<style scoped>
</style>
父组件传值过去
<Demo2 :name="demo2Name" :age="demo2Age"/>
子传父
使用$emit提供个事件给父组件用 调用emit的时候就会传给父组件
子组件 count+=1的时候 父组件也会同时接收的count的值
methods: {
changeCount() {
this.count += 1
// 调用的时候 就会传过去 getCount是提供给父组件的事件 就是用这个获取传的值的
this.$emit('getConut',this.count)
}
}
父组件接收
<Demo2 :name="demo2Name" :age="demo2Age" @getConut="getC"/> <p>获取子组件传的count:{{getNewCount}}</p>
methods: {
// val就是子组件传过来过来的数据
getC(val) {
this.getNewCount = val
}
},
兄弟组件传值
通过eventBus.js模块传值
子组件Demo
<button @click="sendStr">点击发送数据给Demo2子组件</button>
子组件Demo2
ref
ref可以给元素 或者 一个组件实例 绑定个名字来进行操作DOM
给元素绑定ref
<p ref="bt1" @click="update">点击修改自己的颜色</p>
update() {
this.$refs.bt1.style.color = 'red'
}
给组件绑定ref 在App组件内修改子组件Demo的元素颜色
<Demo :init="count" ref="demoRef"/> <p @click="updateDemoColor">点击修改demoRef的颜色</p>
updateDemoColor() {
this.$refs.demoRef.$refs.updateColor.style.color = 'red'
}