zoukankan      html  css  js  c++  java
  • Vue介绍:高级指令及组件

    本文目录:

    一、实例中的成员

    二、高级指令

    三、组件初识

    一、实例中的成员

    # 计算computed

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
        <div id="app"><input type="text" v-model="first_name">
            <hr><input type="text" v-model="last_name">
            <hr>
            <p>{{ first_name + " " + last_name }}</p>
            <p>{{ full_name_fn() }}</p>
            <!-- 一个变量的值依赖于多个变量的值 -->
            <p>{{ full_name }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                first_name: "",
                last_name: "",
            },
            methods: {
                // 声明的是函数, 该函数必须手动调用
                full_name_fn: function () {
                    return this.first_name + " " + this.last_name
                }
            },
            computed: {
                // 声明变量full_name, 该变量的值等于后方函数的返回值
                // 函数中包含的所有vue变量值只要有发生变化的系统就会调用该函数
                full_name: function () {
                    return this.first_name + " " + this.last_name
                }
            }
        })
    </script>
    
    </html>

    # watch监听

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
        <div id="app">
            姓名<input type="text" v-model="full_name">
            <hr>
            <p>{{ first_name }}</p>
            <hr>
            <p>{{ last_name }}</p>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                full_name:"",
                first_name:"",
                last_name:"",
            },
            watch:{
                // watch只是对已有的变量进行值变化的监听,一旦发现值变化,系统自动回调监听变量后的函数
                // 后方函数和前方变量只有数据变化的监听绑定关系,没有值相关的联系
                full_name: function () {
                    arr = this.full_name.split(" ");
                    this.first_name = arr[0];
                    this.last_name = arr[1];
                }
            }
    
        })
    </script>
    
    </html>

    二、高级指令

    # 条件指令渲染

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
        <style>
            .wrap{
                width: 300px;
            }
            .box{
                width: 100px;
                height: 100px;
            }
    
            .red{
                background-color: red;
                float: left;
            }
    
            .orange{
                background-color: orange;
                float:right;
            }
        </style>
    </head>
    <body>
        <div id="app">
           <button @click="rAction">red切换</button>
           <button @click="oAction">orange切换</button>
            <div class="wrap">
                <!--v-if 值为false时,不会被渲染-->
                <!--了解:key由vue控制的属性key值需要唯一标识,因为key的值就是vue对该组件对内在中建立缓存的可以-->
                <div class="box red" v-if="r_show" :key="key"></div>
                <!--v-show 值为false时,以display:none被渲染-->
                <div class="box orange" v-show="o_show"></div>
            </div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
               r_show:true,
               o_show:true,
            },
    
            methods:{
                rAction:function () {
                    this.r_show = !this.r_show
                },
                oAction:function () {
                    this.o_show = !this.o_show
                }
            }
        })
    </script>
    
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
        <style>
            .box{
                height:100px;
            }
            .r{background-color: red}
            .y{background-color: yellow}
            .b{background-color: blue}
    
        </style>
    </head>
    <body>
        <div id="app">
            <ul>
                <li @click="rfn"></li>
                <li @click="yfn"></li>
                <li @click="bfn"></li>
            </ul>
            <div class="box r" v-if="tag==0" ></div>
            <div class="box y" v-else-if="tag==1"></div>
            <div class="box b" v-else></div>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                tag:0
            },
    
            methods:{
                rfn:function () {
                    this.tag = 0
                },
                yfn:function () {
                    this.tag = 1
                },
                bfn:function () {
                    this.tag = 2
                },
            }
        })
    </script>
    
    </html>
    条件指令案例

    #循环指令渲染

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
    <div id="app">
        <ul>
            <li>{{ ls[0] }}</li>
            <li>{{ ls[1] }}</li>
            <li>{{ ls[2] }}</li>
            <li>{{ ls[3] }}</li>
            <li>{{ ls[4] }}</li>
        </ul>
        <ul>
            <li v-for="(ele,index) in ls">{{ ele }} {{ index }}</li>
        </ul>
        <ul>
            <li v-for="(value,key,index) in dic">{{ key }} {{ value }} {{ index }}</li>
        </ul>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
                ls: ['张三', '李四', '王五', '赵六', '钱七'],
                dic:{
                    name:'Richard.wu',
                    age:31,
                    gender:'man'
                }
            },
    
    
        })
    </script>
    
    </html>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
    <div id="app">
        <form action="">
            <input type="text" v-model="msg">
            <button type="button" @click="fn">留言</button>
        </form>
        <ul>
            <li v-for="(m,i) in msgs" @click="deleteAction(i)">{{ m }}</li>
        </ul>
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        new Vue({
            el: "#app",
            data: {
               msg:"",
               msgs:["初始留言"]
            },
            methods:{
                fn:function(){
                    if(this.msg){
    //                    this.msgs.push(this.msg)//在后添加
                        this.msgs.unshift(this.msg);//在前添加
                        this.msg="";
                    }
                },
                deleteAction:function(index){
                    console.log(index);
                    // 从什么索引开始,操作多少位,操作什么
                    this.msgs.splice(index,1)
                }
            }
    
    
        })
    </script>
    
    </html>
    循环指令渲染案例

    三、组件初识

    # 组件初识

    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>computed</title>
    </head>
    <body>
    <div id="app">
       {{ msg }}
    </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        //每个组件均有自身的模板tempalate,根组件的模板就是挂载点
        new Vue({
            //根组件一定需要挂载点(否则无法渲染到页面中),一般情况下,根组件template就取挂载点,不需要自定义
            el: "#app",
            data: {
                msg:"信息"
            },
            //template就是组件的html架构
            //每个组件模板只能拥有一个根标签
            template:"<div><p>中午请客,师妹告诉我今晚不回去还想给我三个耳光,我当时就拒绝了,休想坑我第二顿</p></div>"
        })
    </script>
    
    </html>

    # 局部组件

    <body>
        <div id="app">
            <abc></abc>
            <abc></abc>
            <abc></abc>
        </div>
        <hr>
        <div id="main">
            <local-tag></local-tag>
            <local-tag></local-tag>
        </div>
    </body>
    <script src="js/vue.js"></script>
    <script>
        // 局部组件
        var localTag = {
            // 子组件的数据具有作用域,以达到组件的复用, 每一个复用的组件具有自身独立的一套数据
            data: function () {
                return {  // 返回值是一个数据字典(一套数据)
                    count: 0
                }
            },
            template: "<div @click='fn'>点击{{ count }}次</div>",
            methods: {
                fn: function () {
                    this.count += 1;
                }
            }
        }
    
        // app根组件
        new Vue({
            el: "#app",
            // 注册
            components: {
                'abc': localTag
            }
        })
        // main根组件
        new Vue({
            el: "#main",
            components: {
                // localTag
                'local-tag': localTag
            }
        })
    </script>
  • 相关阅读:
    线程 定时任务 实现思路
    Days Floating In ShenZhen(1)
    由于未能找到具有自动生成的控件来引发回发事件,导致发生错误
    在ASP.NET中使用AJAX.NET (转译自MSDN)(二)
    Every Time I Wake up I want sleep more
    漂泊在深圳的日子2
    512今日历程
    流金岁月
    对自己的思考
    关于绑定自动生成的下拉式菜单的错误
  • 原文地址:https://www.cnblogs.com/wuzhengzheng/p/10389825.html
Copyright © 2011-2022 走看看