来自官方文档
引入Vue
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
声明式渲染
<div id="app">
{{ message }}
div>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
Vue实例的作用范围
Vue会管理el选项命中的元素及其内部的后代元素
是否可以使用其他的选择器
可以使用其他的选择器,但是建议使用ID选择器
是否可以设置其他的dom元素
可以使用其他的双标签,不能使用HTML和body
<body>
<div id="app">
{{ message }}
<h2>
{{school.name}}
{{school.mobile}}
h2>
<ul>
<li>{{campus[0]}}li>
<li>{{campus[1]}}li>
ul>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
school:{
name:"江西师范大学",
mobile:"123-321-9000"
},
campus:["瑶湖校区","青山湖校区"]
}
})
script>
body>
<body>
<div id="app">
<h1>{{ message }}h1>
<h1 v-once>{{ message }}h1>
<p>{{ rawHtml }}p>
<p><span v-html="rawHtml">span>p>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
rawHtml:'hello'
}
})
script>
body>
<body>
<div id="app">
<br>
<img :src="imgSrc" style="width: 10em;" alt="" :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:"img/1.jpg",
imgTitle:"哈哈哈哈哈",
isActive:false
},
methods: {
toggleActive:function(){
this.isActive = !this.isActive;
}
},
})
script>
body>
<body>
<div id="app">
<h2 v-text="message + '!'">testh2>
<h2 v-text="info + '!'">testh2>
<h2>{{message + '!'}}testh2>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el:"#app",
data:{
message:"hello",
info:"This is v-text"
}
})
script>
body>
事件修饰符
.stop
.prevent
.capture
.self
.once
.passive
<a v-on:click.stop="doThis">a>
<form v-on:submit.prevent="onSubmit">form>
<a v-on:click.stop.prevent="doThat">a>
<form v-on:submit.prevent>form>
<div v-on:click.capture="doThis">...div>
<div v-on:click.self="doThat">...div>
<a v-on:click.once="doThis">a>
<div v-on:scroll.passive="onScroll">...div>
注意:使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。
按键修饰符
<input v-on:keyup.enter="submit">
<input v-on:keyup.page-down="onPageDown">
按键码
.enter
.tab
.delete
(捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right
系统修饰键
可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。
.ctrl
.alt
.shift
.meta
.exact修饰符
.exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。
<button v-on:click.ctrl="onClick">Abutton>
<button v-on:click.ctrl.exact="onCtrlClick">Abutton>
<button v-on:click.exact="onClick">Abutton>
<body>
<div id="app">
<input type="button" value="v-on指令" v-on:click="doTest">
<input type="button" value="v-on简写" @click="doTest">
<input type="button" value="双击事件" @dblclick="doTest">
<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: {
doTest:function(){
alert("v-on指令");
},
changeFood:function(){
this.food += "好好吃!"
}
},
})
script>
body>
计算属性会将计算的结果进行缓存
<body>
<div id="example">
<p>{{ message }}p>
<p>{{ reversedMessage }}p>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var vm = new Vue({
el: '#example',
data: {
message: 'Hello'
},
computed: {
// 计算属性的 getter
reversedMessage: function () {
// `this` 指向 vm 实例,会将计算的结果进行缓存
return this.message.split('').reverse().join('')
}
}
})
script>
body>
Vue 通过 watch 选项提供了一个更通用的方法,来响应数据的变化。当需要在数据变化时执行异步或开销较大的操作时,这个方式是最有用的。
<body>
<div id="app">
{{ message }}
<ul>
<li v-for="item in arr">{{item}}li>
ul>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!',
arr:['小明','小红','小军']
},
computed: {
},
watch: {
message:function(val){
console.log("监听事件~~~~~~~");
console.log(val);
},
arr:function(val){
console.log(val);
}
},
})
script>
body>
<body>
<div id="app">
<div class="static" :class="{ active: isActive}">div>
<div v-bind:class="classObject">div>
<div v-bind:class="[activeClass, errorClass]">div>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data: {
isActive: true,
classObject:{
active:true
},
activeClass: 'active',
errorClass: 'text-danger'
}
})
script>
body>
v-else-if
<body>
<div id="app">
<input type="button" value="切换显示" @click="toggleIsShow">
<input type="button" value="切换选项显示" @click="ABIsShow">
<h1 v-if="awesome">Vue is awesome!h1>
<h1 v-else>Oh no h1>
<br/>
<h3 v-if="type === 'A'">Ah3>
<h3 v-else-if="type === 'B'">Bh3>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data:{
awesome:true,
type:'A',
},
methods: {
toggleIsShow:function(){
this.awesome = !this.awesome;
},
ABIsShow:function(){
this.type = (this.type == 'A') ? 'B': 'A'
}
},
})
script>
body>
<body>
<div id="app">
<input type="button" value="切换显示状态" @click="changeIsShow">
<input type="button" value="切换图片" @click="changeImg">
<img v-show="isShow" :src="imgUrl" alt="">
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el:"#app",
data:{
isShow:false,
imgUrl:"img/1.jpg"
},
methods: {
changeIsShow:function(){
this.isShow = !this.isShow
},
changeImg:function(){
if(this.imgUrl == "img/1.jpg")
this.imgUrl = "img/2.jpg"
else
this.imgUrl = "img/1.jpg"
}
},
})
script>
body>
v-if:不显示时,第一次就直接不渲染,如果内容已经显示将其改为不显示,将内容直接从dom去除
v-show:不显示时,就会改为display:none,但是会渲染在dom上
频繁的切换v-show,反之使用v-if,前者的切换消耗小
<body>
<div id="app">
<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:"西红柿"}
]
}
})
script>
body>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>表单输入绑定title>
head>
<body>
<div id="app">
<input v-model="message" placeholder="edit me">
<p>Message is: {{ message }}p>
<br>
<textarea v-model="messages" placeholder="多行文本">textarea><br>
<span>Multiline message is:span>
<p style="white-space: pre-line;">{{ messages }}p>
<br>
<input type="checkbox" id="checkbox" v-model="checked">
<label for="checkbox">{{ checked }}label>
<br><br>
<input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
<label for="jack">Jacklabel>
<input type="checkbox" id="john" value="John" v-model="checkedNames">
<label for="john">Johnlabel>
<input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
<label for="mike">Mikelabel>
<br>
<span>Checked names: {{ checkedNames }}span><br>
<br>
<div id="example-4">
<input type="radio" id="one" value="One" v-model="picked">
<label for="one">Onelabel>
<br>
<input type="radio" id="two" value="Two" v-model="picked">
<label for="two">Twolabel>
<br>
<span>Picked: {{ picked }}span>
div>
<div id="example-5">
<select v-model="selected">
<option disabled value="">请选择option>
<option>Aoption>
<option>Boption>
<option>Coption>
select>
<span>Selected: {{ selected }}span>
div>
<br><br>
div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Tsundere',
messages: 'tsundere',
checked: false,
checkedNames:[],
selected: '',
picked: '',
selecteds:[]
},
})
script>
body>
html>
// 定义一个名为 button-counter 的新组件
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: ''
})
组件是可复用的 Vue 实例,且带有一个名字:在这个例子中是 。我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用:
<div id="components-demo">
<button-counter>button-counter>
div>
new Vue({ el: '#components-demo' })
注意:data
必须是一个函数
注意:每个组件必须只有一个根元素
<body>
<div id="components-demo">
<button-counter>button-counter>
div>
<hr>
<div id="blog-post-demo">
<blog-post v-for="post in posts" :key="post.id" :title="post.title" >blog-post>
div>
<hr>
<div id="post">
<div :style="{ fontSize: postFontSize + 'em' }">
<blog v-for="post in posts" :post="post" v-on:enlarge-text="postFontSize += $event">blog>
div>
div>
<hr>
<div id="text">
<custom-input v-model="searchText">custom-input>
<p>{{searchText}}p>
div>
<hr>
<div id="alert">
<alert-box>alert-box>
div>
<hr>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script>
<script>
// 定义一个名为 button-counter 的新组件
Vue.component('button-counter', {
data: function () {
return {
count: 0
}
},
template: ''
})
new Vue({
el: '#components-demo'
})
// 定义一个名为blog-post的组件
Vue.component('blog-post', {
props: ['title'],
template: '{{ title }}
'
})
new Vue({
el: '#blog-post-demo',
data:{
posts: [
{ id: 1, title: 'My journey with Vue' },
{ id: 2, title: 'Blogging with Vue' },
{ id: 3, title: 'Why Vue is so fun' }
]
}
})
// 定义一个名为post的组件
// 子组件可以通过调用内建的 $emit 方法并传入事件名称来触发一个事件:
Vue.component('blog',{
props:['post'],
template:'\
{{ post.title }}
\
\
\
'
})
new Vue({
el:"#post",
data:{
posts:[
{ id: 1, title: 'My journey with Vue',content:'123' },
{ id: 2, title: 'Blogging with Vue' ,content:'456' },
{ id: 3, title: 'Why Vue is so fun',content:'789' }
],
postFontSize:1
}
})
Vue.component('custom-input', {
props: ['value'],
template: `
`
})
new Vue({
el:"#text",
data:{
searchText:''
}
})
Vue.component('alert-box', {
template: `
Error!
`
})
new Vue({
el:"#alert"
})
script>
body>
官网地址:https://github.com/axios/axios