zoukankan      html  css  js  c++  java
  • vue 指令

    核心思想:数据驱动视图

    MVVM

    声明式指令

    一、条件渲染

    1、v-if

    <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>
        other
    </div>

    script

    var app = new Vue({
        el: '#app',
        data: {
            name: "tom",
            age: 24,
            show: false,
            type: 'B',
            isShow: false,
        },

    2、v-show

    <h2 v-show="isShow">嘿嘿嘿</h2>

    注意:区别

    v-if : 真正的条件渲染,切换开销高

    v-show: 惰性条件渲染,初始化开销高,利用css的display:none

    3、v-if与v-for一起使用

    v-for的优先级高于v-if,一般v-if和v-for不一起使用

    二、class 与 style

    1、v-bind

    绑定字符串

    与属性进行绑定

    格式:v-bind:属性名称="变量名称"

    <img v-bind:src="imgSrc" v-bind:alt="alt" v-bind:title="title">
    currentTime = new Date().toLocaleString();

    data

    imgSrc: "./images/1.jpg",
    title: '老婆',
    // 模板字符串
    alt: `加载时间${currentTime}`,

    绑定style

    style

    <style>
        .c1 {
            height: 200px;
             200px;
            background-color: brown;
        }
        .c2 {
            height: 200px;
             200px;
            background-color: blue;
        }
    </style>

    html

    <div class="c1" v-bind:class="{c2: isBlue}"></div>
    <button v-on:click="changeColor">切换颜色</button>

    data

    isBlue: false,

    methods

    changeColor(){
        this.isBlue = !this.isBlue;
    }

    绑定html

    v-html

    <div v-html="s"></div>
    s:"Hi",

    三、事件监听

    v-on:操作="函数名"

    简写@操作="函数名"

    methods

    1.clcik
    2.mouseenter
    3.mouseleave

    四、列表渲染

    <div>
        <img v-bind:src="currentSrc" alt="">
        <ul>
            <li v-for="(item, index) in imgArr" @click="clickImg(item)">{{index+1}}</li>
        </ul>
    </div>    

    data

    imgArr: [
        {id:1, src: "./images/1.jpg"},
        {id:2, src: "./images/2.jpg"},
        {id:3, src: "./images/3.jpg"},
        {id:4, src: "./images/4.jpg"},
    ],
    currentSrc: "./images/1.jpg",
    currentIndex: 0,

    methods

    clickImg(item){
        // console.log
        this.currentSrc = item.src;
    },
    nextImg(){
        // alert(123)
        console.log(this.currentIndex)
        console.log(this.imgArr.length-1)
        if(this.currentIndex==this.imgArr.length-1){
            this.currentIndex = 0;
        }
        this.currentIndex += 1;
        console.log(this.imgArr[this.currentIndex].src);
        this.currentSrc = this.imgArr[this.currentIndex].src;
    }

     五、声明周期

    created(){}方法

    六、计算属性

    computed

    1.

    <div id="computed">
        <div>
           {{reverseStr}} 
        </div>
        <button @click="clickHandler">修改</button>
    </div>
    computed:{
        reverseStr(){
            return this.msg.split('').reverse().join('');
        },
    },
    methods:{
        clickHandler(){
            // alert(123)
            this.msg = "Hello China";
        },
    },

    2.

    <!DOCTYPE html>
    <html lang="en">
    <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>
    </head>
    <body>
        <div id="computed">
            <div>
               {{reverseStr}} 
            </div>
            <button @click="clickHandler">修改</button>
        </div>
        <script src="./js/vue.js"></script>
        
        <script>
            var com = new Vue({
                el: '#computed',
                data:{
                    msg: "Hello World",     
                },
                methods:{
                    clickHandler(){
                        // alert(123)
                        // this.msg = "Hello China";
                        this.reverseStr = "Hello China";
                    },
                },
                computed:{
                    reverseStr:{
                        set:function(newValue){
                            this.msg = newValue;
                        },
                        get:function(){
                            return this.msg.split('').reverse().join('');
                        },
                    },
                },
            })
        </script>
    </body>
    </html>

    六、v-model 只和form组件有关

    双向监听

    <!DOCTYPE html>
    <html lang="en">
    <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>Document</title>
    </head>
    <body>
        <div id="computed">
            <input type="text" v-model='msg'>
            <p>{{msg}}</p>
        </div>
        <script src="./js/vue.js"></script>
        <script>
            var con = new Vue({
                el: "#computed",
                data:{
                    msg: "123",        
                },
                methods:{},
                computed:{},
            })
        </script>
    </body>
    </html>

    双向监听 = 单向监听 + UI

    <!DOCTYPE html>
    <html lang="en">
    <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>Document</title>
    </head>
    <body>
        <div id="computed">
            <!-- <input type="text" v-model='msg'> -->
            <input type="text" :value="getValue" @input="msgChange">
            <p>{{getValue}}</p>
        </div>
        <script src="./js/vue.js"></script>
        <script>
            var con = new Vue({
                el: "#computed",
                data:{
                    msg: "",        
                },
                methods:{
                    msgChange(e){
                        this.getValue = e.target.value;
                    },
                },
                computed:{
                    getValue:{
                        set:function(newValue){
                            this.msg = newValue;
                        },
                        get:function(){
                            return this.msg;
                        }
                    },
                },
            })
        </script>
    </body>
    </html>

    lazy

    <input type="text" v-model.lazy='msg'>

    当点击其它地方时,数据同步

    number

    <input type="number" v-model.number='msg'>

    只显示数字

    trim

    <input type="text" v-model.trim='msg'>

    去除前后空格

    阻止表单提交

    <form id="computed" @submit.prevent>
            <!-- <input type="text" v-model='msg'> -->
            <!-- <input type="text" v-model.lazy='msg'> -->
            <input type="text" v-model.trim='msg'>
            <!-- <input type="text" :value="getValue" @input="msgChange"> -->
            <p>{{msg}}</p>
            <input type="submit" value="提交">
    </form>
  • 相关阅读:
    __module__ 和 __class__
    __str__ 和 __repr
    __getitem__ __setitem__ __delitem__ 使用
    授权
    __getattr__ __delattr__ __setattr__ __getattribute__使用(重写python提供的错误信息)
    __import__
    hasattr getattr setattr delattr --> (反射)
    类三大特性(继承 多态 封装)
    静态方法@staticmethod
    类方法@classmethod
  • 原文地址:https://www.cnblogs.com/wt7018/p/11489357.html
Copyright © 2011-2022 走看看