zoukankan      html  css  js  c++  java
  • vue six day

    组件数据交互

    父组件向子组件传值:

        <div id="app">
            <meun-item :title="pmsg"></meun-item>
        </div>
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            // 父组件向子组件传递数据
            // props里定义好接受的形参
            Vue.component("meun-item",{
                props:["title"],
                data:function(){
                    return {
                        msg:"我是子组件"
                    }
                },
                template:"<div>{{msg}}+------{{title}}</div>"
            })
            var vm =new Vue({
                el: "#app",
                data: {
                    pmsg: "我是父组件"
                }
            })
        </script>

    props命名规则:

    <div id="app">
            <meun-item :ti-tle="pmsg"></meun-item>
        </div>
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            // props形参名定义规则:
            // 1.在props里使用驼峰方式,在模板里使用时
            // 2.字符串形式的模板中没有这个限制(就是写在类似于template里的字符串模板没有上条限制,建议还是使用第一条的规则)
            Vue.component("meun-item", {
                props: ["tiTle"],
                template: "<div>{{tiTle}}</div>"
            })
            var vm = new Vue({
                el: "#app",
                data: {
                    pmsg: "我是父组件"
                }
            })
        </script>

    props可以传递的属性类型

    <div id="app">
            <meun-item :pstr="pstr" :pint="12" :pbool="true" :parr="parr" :pobj="pobj"></meun-item>
    </div>
    <script>
            // props可以传递的属性类型:
            // str int bool arr obj
         // 不用v-bind绑定属性的话传来的都是字符串
    Vue.component("meun-item", { props: ["pstr", "pint", "pbool", "parr", "pobj"], template: `<div> <div>{{pstr}}</div> <div>{{pint}}</div> <div>{{pbool}}</div> <ul> <li :key="index" v-for="item,index in parr">{{item}}</li> </ul> <div> <span>{{pobj.name}}</span> <span>{{pobj.age}}</span> </div> </div>` }) var vm = new Vue({ el: "#app", data: { pstr: "hello", parr: ['1', '2', '3'], pobj: { name: "lisi", age: "11" } } }) </script>

    子组件向父组件传递信息

        <div id="app">
            <div :style="{fontSize: ztsize +'px'}">{{pstr}}</div>
            <meun-item @kdzt="handle"></meun-item>
        </div>
    <script>
            // 子组件向父组件传递信息
            // 总结:
            // 传递事件
            // 1.先在子组件模板里自定义事件
            // 2.将该事件绑定到组件标签里 这样子组件点击就可以触发事件
            // 3.触发事件的函数写在父组件里 这样就可以操控父组件的元素
            Vue.component("meun-item", {
                props: ["pstr",],
                template: `<div>
                    <button @click="$emit('kdzt')">扩大父组件字体</button>
                </div>`
            })
            var vm = new Vue({
                el: "#app",
                data: {
                    pstr: "hello",
                    ztsize: 10
                },
                methods: {
                    handle: function () {
                        this.ztsize += 5;
                    }
                }
            })
        </script>

    子组件向父组件传递值

        <div id="app">
            <!-- 子组件向父组件传递值 -->
            <div :style="{fontSize: ztsize +'px'}">{{pstr}}</div>
            <meun-item @kdzt="handle($event)"></meun-item>
        </div>
    
    <script>      
     // ------------------------------------------------------------
            // 子组件像父组件传递参数
            Vue.component("meun-item", {
                props: ["pstr",],
                template: `<div>
                    <button @click="$emit('kdzt',5)">扩大父组件字体</button>
                </div>`
            })
            var vm = new Vue({
                el: "#app",
                data: {
                    pstr: "hello",
                    ztsize: 10
                },
                methods: {
                    handle: function (val) {
                        this.ztsize += val;
                    }
                }
            })
        </script>

    非父子间组件传值

    <div id="#app">
            <tom-but></tom-but>
            <jerry-but></jerry-but>
    </div>
    <script>
            // 非父子间传值
            // 1.成立事件监听中心
            // 2.绑定事件
            // 3.触发事件
            // 总结:
            // 先成立事件中心,接着hub.$on绑定事件,然后hub.$emit触发事件
    
            // 成立事件监听中间
            var hub = new Vue()
            // 给组件绑定事件
            Vue.component("tom-but", {
                data: function () {
                    return {
                        num: 0
                    }
                },
                template: `<div>
                    <span>tom</span><br>
                    <span>{{num}}</span><br>
                    <button @click=handle>点击</button>
                </div>`,
                methods: {
                    handle: function () {
                        // 触发事件
                        // 在tom里触发jerry事件
                        hub.$emit("jerry-event", 1)
                    }
                },
                mounted: function () {
                    // 箭头函数是es6新语法 应该相当于匿名函数
                    // 绑定事件
                    hub.$on("tom-event", (val) => {
                        this.num += val
                    })
                }
            })
    
            Vue.component("jerry-but", {
                data: function () {
                    return {
                        num: 0
                    }
                },
                template: `<div>
                    <span>jerry</span><br>
                    <span>{{num}}</span><br>
                    <button @click=handle>点击</button>
                </div>`,
                methods: {
                    handle: function () {
                        // 触发事件
                        // 在jerry里触发tom事件
                        hub.$emit("tom-event", 2)
                    }
                },
                mounted: function () {
                    // 箭头函数是es6新语法 应该相当于匿名函数
                    // 绑定事件
                    hub.$on("jerry-event", (val) => {
                        this.num += val
                    })
                }
            })
    
            var vm = new Vue({
                el: "#app",
            })
        </script>
  • 相关阅读:
    gcd
    Kuglarz
    三分题解
    杜教筛
    第一组dp解题报告
    dp总结1
    cf-BitwiseXor
    6.6总结
    图论总结
    CF1309总结
  • 原文地址:https://www.cnblogs.com/zy-mousai/p/13039180.html
Copyright © 2011-2022 走看看