这里写目录标题

  • 开发的小工具
    • git-bash
    • vue-devtools扩展(chrome)
  • 创建vue实例
  • methods方法定义
  • computed计算属性
  • watch 监听
  • filters过滤器
    • 插值表达式中过滤
    • v-bind属性绑定中使用过滤器
  • 数据绑定
    • 样式
      • 绑定内联样式
      • 绑定样式类
  • 内置指令
    • v-model
    • v-text
    • v-html
    • v-bind
    • v-on
    • v-for
    • v-if和v-show

开发的小工具

git-bash

直接下载安装即可,类似于windows的cmd,但是交互性更好

vue-devtools扩展(chrome)

  • 使用git clone vue-devtools
    git clone https://github.com/vuejs/vue-devtools.git
  • npm install
  • num run build
  • 在chrome中添加插件

创建vue实例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>我是第一个Vue.js案例</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <p>{{name}}</p>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                name :'Vue实例创建成功!'
        }
        })
    </script>
</body>
</html>

{{name}}是vue特有的插值语法,可以将data中的name数据绑定到p元素中

methods方法定义

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>我是第一个Vue.js案例</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <button @click="showInfo">请点击</button>
        <p>{{name}}</p>
    </div>
    <script>
        
        var vm = new Vue({
            el:'#app',
            data:{
                name :'Vue实例创建成功!'
            },
            methods:{
                showInfo(){
                    this.name='触发单击事件'
                }
            }
        })
    </script>
</body>
</html>

button按钮上添加了@click属性,表示绑定单击事件,事件处理方法是showInfo
methods中定义了showInfo,用于改变name的内容

computed计算属性

观察和相应vue实例上的数据变动,当一些数据需要随着其他数据变动而变动时,就需要使用computed计算属性。
在事件的处理方法中,this指向的Vue实例的计算属性结果会被缓存起来,只有依赖的响应式属性变化时,才会重新计算

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>我是第一个Vue.js案例</title>
    <script src="vue.js"></script>
</head>
<body>
    <div id="app">
        <button @click="num++">请点击</button>
        <p>{{showInfo}}</p>
        <p>{{num}}</p>
    </div>
    <script>
        var vm = new Vue({
            el:'#app',
            data:{
                num:1,
            },
            computed:{
                showInfo(){
                    return this.num
                }
            }
        })
    </script>
</body>
</html>

插值语法将num和showInfo绑定到了页面中
computed中定义了showInfo,返回结果是num,表明,当num变化时,showInfo的返回值也要跟着变化
按钮中,click事件是num++,也就是每点击一次,num++,vue监控到num变化,则调用showInfo,页面中的showInfo对应的this.num也要++

watch 监听

自动监听状态的变化

filters过滤器

插值表达式中过滤

{{data|过滤器}}

<body>
  <div id="app">
    <div>{{message | toUpcase}}</div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        message: 'helloworld'
      },
      filters: {
        // 将 helloworld 转换为 HELLOWORLD
        toUpcase (value) {
          return value ? value.toUpperCase() : ''
        }
      }
    })
  </script>
</body>

插值表达式|后面跟着的是vue中filters方法;
|被称为管道符,管道符前面的是数据,数据作为参数,传递到后面的方法中执行
方法的返回值作为最终的结果展示在页面上

v-bind属性绑定中使用过滤器

<body>
  <div id="app">
    <div v-bind:id="dataId | formatId">helloworld</div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        dataId: 'dff1'
      },
      filters: {
        formatId(value) {
          // 字符串处理
          return value ? value.charAt(1) + value.indexOf('d') : ''
        }
      }
    })
  </script>
</body>

v-bind:能够绑定vue中的数据和id属性
|还是管道,把dataId的值作为参数传递到formatId中,根据return返回一个值
value.charAt(1)表示获取字符串索引1对应的字符
value.indexOf(‘d’)表示获取字符‘d’对应的索引(0)
最终在html页面中得到了属性id=’f0‘

数据绑定

样式

绑定内联样式

<body>
  <div id="app">
    <!-- 绑定样式属性值 -->
    <div v-bind:style="{backgroundColor:pink,width:width,height:height}">
      <!-- 绑定样式对象 -->
      <div v-bind:style="myDiv"></div>
    </div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        myDiv: {backgroundColor: 'red', width: '100px', height: '100px'},
        pink: 'pink',
        width: '100%',
        height: '200px'
      }
    })
  </script>
</body>
  • 在第二处有v-bind的地方,把style绑定在了myDiv上
  • myDiv定义在vue脚本中
  • 同样的,第一处v-bind,说明这块儿也绑定了vue,data中的数据pink,width,height

绑定样式类

<body>
  <div id="app">
    <div v-bind:class="{box}">我是box
      <div v-bind:class="{inner}">我是inner1</div>
      <div v-bind:class="{inner}">我是inner2</div>
    </div>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        box: 'box',
        inner: 'inner'
      }
    })
  </script>
</body>
  • v-bind地方开始绑定
  • box告诉页面去vue,data中去找box
  • vue把box对应的值’box’返回给页面
  • 最终,页面的语句是class=“box”
  • 页面此时再去css中找.box对应的样式是什么

内置指令

v-model

v-model通常用于实现数据双向绑定,用在表单元素上

<body>
  <div id="app">
    <input type="text"  v-model="msg">
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        msg: 'v-model指令'
      }
    })
  </script>
</body>
  • 双向绑定的意思是input元素中的文本通过vue的msg来得到,此时页面中会显示’v-model’,当改变页面的值时,vue中的data的内容也会同步改变

v-text

在dom元素内部插入文本内容

v-html

在dom元素内部插入html标签内容

v-bind

单项绑定

v-on

事件监听指令,直接与事件类型配合使用

 <div id="app">
    <p>{{msg}}</p>
    <button v-on:click="showInfo">请单击</button>
  </div>
  <script>
    var vm = new Vue({
      el: '#app',
      data: {msg: '请单击按钮查看内容'},
      methods: {
        showInfo () {
          this.msg = '我是v-on指令'
        }
      }
    })
  </script>
  • v-on可以为按钮绑定事件,事件就是showInfo,事件的具体执行在vue中
  • v-on还可以监听按键:v-on:keyup.enter=""表示监听enter按键
    v-on还可以自定义事件的行为
修饰符说明
.stop阻止事件冒泡(父事件也就是外部事件不会跟着出来)
.prevent阻止默认事件(像单击跳转网页这种,不会出现)
.capture事件捕获,与事件冒泡的顺序相反
.self将事件绑定到自身,只有自身能触发
.once事件只触发一次

v-for

页面列表渲染,用来循环数组

<div id="app">
  <div v-for="(item,key) in list" data-id="key">
    索引是:{{key}},元素内容是:{{item}}
  </div>
</div>
<script>
  var vm = new Vue({
    el: '#app',
    data: {
      list: [1, 2, 3]
    }
  })
</script>
  • 页面通过list找到vue data中的list数组,并且返回索引和数值

v-if和v-show

v-show是操作元素的display属性,v-if是进行删除和重新创建

更多推荐