Vue简介

  • JavaScript框架
  • 简化Dom操作
  • 响应式数据驱动

参考链接

官方文档

el挂载点

  • el命中的元素内部支持data
  • 不能挂在在body或html上,建议挂在div

Vue指令

  1. 内容绑定,事件绑定
  • v-text
    设置文本
    1
    2
    3
    // 下面两行作用相等
    <h1 v-text="'message:' + message"></h1>
    <h1>{{ 'message:' + message }}</h1>
  • v-html
    设置html
    1
    2
    3
    4
    5
    6
    <p v-html="contend"></p>

    // Vue
    data:{
    contend: '<a href="https://www.baidu.com">百度一下</a>'
    }
  • v-on基础
    为元素绑定事件 在这里v-on也可以写成@
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <div id="app">
    <button type="button" v-on:click="getdata">这是一个按钮</button>
    <button type="button" @dblclick="getdata">双击事件</button>
    <h2 @click="change">{{ message }}</h2>
    </div>
    <script type="text/javascript">
    var app = new Vue({
    el: "#app",
    data: {
    contend: '<a href="https://www.baidu.com">百度一下</a>',
    message: "Hello world!",
    state: 200,
    user: {
    name: "Alex",
    age: 21,
    mobile: "1110"
    }
    },
    methods:{
    getdata:function(){
    alert("Hello World!");
    },
    change:function(){
    this.message+="|---5cm---|"
    }
    }
    })
    </script>
    计数器实现
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <body>
    <div id="app01">
    <button type="button" @click="sub">-</button>
    {{ number }}
    <button type="button" @click="add">+</button>
    </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script type="text/javascript">
    var app = new Vue({
    el:"#app01",
    data:{
    number: 0,
    message: ""
    },
    methods:{
    add:function(){
    if(this.number >= 10){
    alert("不能再加了!")
    return
    }
    this.number += 1
    },
    sub:function(){
    if(this.number <= 0){
    alert("不能再减了!")
    return
    }
    this.number -= 1
    }
    }
    })
    </script>
  1. 显示切换,属性绑定
  • v-show
    根据表达式的真假,切换元素的显示和隐藏
    1
    2
    3
    <button type="button" @click="sub" v-show="isShow">-</button>
    // isShow = false
    // 也可以是v-show="!isShow" 即为表达式
  • v-if
    根据表达式的真假,切换元素的显示和隐藏(操作dom元素)
  • v-bind 简写为:
    设置元素的属性 例如src title class...
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <body>
    <div id="app">
    <a v-bind:href="is?site:'https://training.github.com/downloads/zh_CN/github-git-cheat-sheet/'">bind测试</a>
    </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script type="text/javascript">
    var app = new Vue({
    el:"#app",
    data:{
    is: false,
    site: "https://www.baidu.com"
    }
    })
    </script>
    图片切换
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    <body>
    <div id="app">
    <button type="button" @click="previous" v-show="now>0?true:false"><</button>
    <img :src="image[now]" >
    <button type="button" @click="next" v-show="now<image.length-1?true:false">></button>
    </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script type="text/javascript">
    var app = new Vue({
    el:"#app",
    data:{
    now: 0,
    image: ["img/image1.jpeg", "img/image2.jpeg", "img/image3.jpeg"]
    },
    methods:{
    previous:function(){
    if(this.now <= 0){
    this.now = this.image.length - 1
    }else{
    this.now--
    }
    },
    next:function(){
    if(this.now < this.image.length - 1){
    this.now++
    }else{
    this.now = 0
    }
    }
    }
    })
    </script>
  1. 列表循环,表单元素绑定
  • v-for
    根据数据生成列表结构
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <body>
    <div id="app">
    <span v-for="i in list">{{ i }}</span>
    <ul>
    <li v-for="(i, index) in list">index:{{ index+1 }}, data:{{ i }}</li>
    </ul>
    </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script type="text/javascript">
    var app = new Vue({
    el:"#app",
    data:{
    list: ['H', 'e', 'l', 'l', 'o']
    }
    })
    </script>
  • v-on补充
    传入自定义参数
  • v-model
    表单元素双向数据绑定
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <body>
    <div id="app">
    <input type="text" v-model="message" />
    <button type="button" @click="print">button</button>
    </div>
    </body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script type="text/javascript">
    var app = new Vue({
    el:"#app",
    data:{
    message: "Hello"
    },
    methods:{
    print:function(){
    alert(this.message)
    }
    }
    })
    </script>