Vue学习(十二): 内容总结前十一Vue学习

主要学习了MVC和MVVM的区别、学习Vue基本的代码结构、基本指令: 差值表达式, v-cloak, v-text, v-html, v-bind(缩写:), v-on(缩写@), v-model, v-for, v-if, v-show、el 指定控制的区域 data 是对象,指定了控制区域内要用到的数据,methods 虽然带s后缀,但是个对象,这里可以放自定义方法、在vm示例中,如果要访问data上数据,或者访问methods中方法,必须带this、在v-for 注意key属性(接受string、number)、v-model 只能运用到表单元素、Vue中绑定样式2中方式 v-bind:class,v-model:style、v-if和v-show使用和特点等等。

梳理一下:

1.MVC和MVVM的区别

2.学习Vue基本的代码结构

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
	<title></title>
    <script src="./lib/vue.js"></script>
</head>
<body>
<!--将来 new这个Vue实例控制这个元素所有内容 
    Vue实例所控制的这个元素区域,就是我们的 V -->
<div id="app">
    <p>{{ msg }}</p>

</div>
<script>
//创建实例
//当我们导入包之后,在浏览器内存中,就多了一个Vue构造函数
//我们New出来的这个vm对象,就是我们MVVM中的VM调度者
 var vm = new Vue({
     el: '#app', //表示当前我们New这个Vue实例,要控制页面哪个区域
     data:{
         //data 属性中,存放的是el中需要的数据
         msg: 'Vue学习' //通过Vue提供的指令,很方便把数据渲染到页面上,程序员不在手动操作DOM元素[前端框架Vue之类的框架,不提倡我们手动操作DOM 元素]
     }
     //这里的data就是MVVM的M,专门保存每个页面的数据的
})
</script>
</body>
</html>

3.基本指令: 差值表达式, v-cloak, v-text, v-html, v-bind(缩写:), v-on(缩写@), v-model, v-for, v-if, v-show

  • 差值表达式: <span>Message:{{msg}}</span>
  • v-cloak: 当网络较慢,网页还在加载 Vue.js ,而导致 Vue 来不及渲染,这时页面就会显示出 Vue 源代码。我们可以使用 v-cloak 指令来解决这一问题。<p v-cloak>{{msg}}</p>使用 v-cloak能够解决插值表达式闪烁问题,需要加[v-cloak]{display: none;}
  • v-text: <h4 v-text="msg"></h4>
  • v-html: 可以输出html标签,<div v-html="msg2"></div>msg2: '<h1>这是H1标签</h1>',
  • v-bind(缩写:): 单向数据绑定<input type="button" value="按钮" :title="mytitle + ' 123'" v-on:click="alert">mytitle: '定义的title'
  • v-on(缩写@): 用来绑定事件的, <input type="button" value="按钮" v-on:click="show">,methods:{show: function(){alert('yes')} }
  • v-model: 双向数据绑定,一般用于用于表单元素
  • v-for:遍历循环用的,可以放普通数组,对象数组,对象和数字。`<p v-for="(user,i) in list">索引值:{{i}}, 用户ID:{{user.id}}, 用户名称:{{user.name}}</p>`,`list:[{id:1,name:"a"},{id:2,name:"b"}, {id:3,name:"c"},{id:4,name:"d"}, ]`
    
  • v-if, v-show: 显示和隐藏元素,`<h3 v-if="flag">这是用v-if控制的元素</h3>`,`<h3 v-show="flag">这是用v-show控制的元素</h3>` 
    

4.事件修饰符 .stop, .self, .prevent, .capture, once

  • .stop: 阻止冒泡事件。
  • .prevet: 使用.prevet 阻止默认事件
  • .capture: 实现捕获触发事件的机制(从外到里捕获事件)
  • .self: 实现只有点击当期元素,才会触发事件函数
  • .once: 事件只触发一次处理函数 .prevent.once 顺序无所谓
  • 使用.stop 与.self的区别: .self只会阻止自己身上的冒泡的行为触发,不会阻止别人的触发
<!--使用.stop 阻止冒泡-->
        <div class="outer" @click="div2Handler">
            <div class="inner" @click="divHandler">
                <input type="button" value="点击" @click.stop="btnHandler">
            </div>
        </div>
         <!--使用 .self 阻止冒泡-->
        <div class="outer" @click="div2Handler">
            <div class="inner" @click.self="divHandler">
                <input type="button" value="点击" @click="btnHandler">
            </div>
        </div>

5.el 指定控制的区域 data 是对象,指定了控制区域内要用到的数据,methods 虽然带s后缀,但是个对象,这里可以放自定义方法

<div id="app">
        <input type="text" v-model="n1">
        <select v-model="opt">
            <option value="+">+</option>
            <option value="-">-</option>
            <option value="*">*</option>
            <option value="/">/</option>
        </select>
        <input type="text" v-model="n2">
        <input type="button" value="=" @click="calc">
        <input type="text" v-model="result">
    </div>
<script>
    var vm = new Vue({
        el: '#app',
        data:{
            n1: 0,
            n2: 0,
            result: 0,
            opt:'+'
        },
        methods:{
            calc(){//计算器算数的方法
                //逻辑:
                //拿到n1,opt,n2值,this.result值计算
                var codeStr = 'parseInt(this.n1) ' +  this.opt + ' parseInt(this.n2)'
                this.result= eval(codeStr)
            }
        }
    })
    </script>

6.在vm示例中,如果要访问data上数据,或者访问methods中方法,必须带this

7.在v-for 注意key属性(接受string、number)

在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,必须要在使用v-for的同时,需要指定唯一的字符串/数字 类型 :key 值
key 在使用的时候,必须使用v-bind属性绑定的形式,指定key值
v-for循环的时候,只能用number或string

<div id="app">
        <div>
            <label>ID:
                <input type="text" v-model="id">
            </label>
            <label>name:
                    <input type="text" v-model="name">
            </label>
            <input type="button" value="添加" @click="add1">
        </div>
        <!--v-for循环的时候,只能用number或string-->
        <!--key 在使用的时候,必须使用v-bind属性绑定的形式,指定key值-->
        <!--在组件中,使用v-for循环的时候,或者在一些特殊情况中,如果v-for有问题,必须要在使用v-for的同时,需要指定唯一的字符串/数字 类型 :key 值-->
        <p v-for="item in list" :key="item.id">
            <input type="checkbox">
            ID: {{item.id}} , name: {{item.name}}
        </p>
    </div>
    <script>
        var vm = new Vue({
            el: '#app',
            data:{
                id:'',
                name:'',
                list:[
                {id:1,name: 'a'},
                {id:2,name: 'b'},
                {id:3,name: 'c'},
                {id:4,name: 'd'},
                {id:5,name: 'e'}
                ]
            },
            methods:{
                add(){//添加
                    this.list.push({id: this.id,name: this.name})
                },
                add1(){//添加
                    this.list.unshift
                    ({id: this.id,name: this.name})
                }
            }
        })
    </script>

8.v-model 只能运用到表单元素

9.Vue中绑定样式2中方式 v-bind:class,v-model:style

:class

  • 数组:<h1 :class="['red','thin']">这是H1</h1>
  • 三元表达式: <h1 :class="['red','thin',flag?'active':'']">这是H1</h1>
  • 数组使用对象代替三元表达式,提高代码的可读性:<h1 :class="['red','thin',{'active':flag} ]">这是H1</h1>
  • 对象:<h1 :class="{red:false, thin: true, italic:true, active:false}">这是H1</h1>
  • 直接指向:<h1 :class="classobj">这是H1</h1>
<script>
var vm = new Vue({
    el: '#app',
    data:{
        flag : true,
        classobj: {red:false, thin: true, italic:true, active:false}
    },
    methods:{

    }
})
</script>

:style
对象就是无序键值对的集合:<h1 :style="[styleobj,styleobj2]">这是H1</h1>

<script>
    var vm = new Vue({
        el: '#app',
        data:{
            styleobj : { color:'red', 'font-weight':100 },
            styleobj2 : { 'font-style': 'italic' }
        },
        methods:{

        }
    })
    </script>

10.v-if和v-show使用和特点

  • v-if 的特点:每次都会重新删除或者创建元素; v-show的特点: 每次不会进行DOM元素的删除和创建的操作,只是切换了元素的display:none
  • v-if 有较高的切换性能消耗,v-show有较高的初始渲染消耗
  • 如果元素涉及到频繁的切换,最好不要用v-if,用v-show; 如果元素可能永远不会被显示出来的话,则推荐v-if