Vue2知识点回顾(组件篇1)

Vue2知识点回顾(组件篇1)

知识点、图片和代码demo来自《Vue.js实战》

Vue组件的模板在某些情况下会受到html的限制,比如<table>内只允许tr, td, th等,这时候可以用is属性来挂载组件。常见的场景有ul, ol, select等。

<div id="app">
    <table>
        <tbody is="my-component"></tbody>
    </table>
</div>

vue2中props是单向传递,只能父到子。

业务中需要修改props的值,有两种情况:1. 父组件传递初始值进来,子组件在自己的作用域下使用和修改。这种可以在子组件的data里声明一个数据引用父组件传来的prop. 2. prop作为需要被转变的原始值传入。此时可以使用计算属性。

模式1:

模式2:

当prop是数组或者对象时,子组件里的改变是会反映到父组件里。

组件之间的通信分成若干种情况:父子组件通信、兄弟组件通信、跨级组件通信。

自定义事件:子组件用$emit()触发,父组件用$on接收。

v-on接收自定义事件,也可以用.native修饰符表示接收的是原生事件。

自定义组件可以支持在根元素上使用v-model

相当于把子传到父的自定义事件处理函数的第二个参数传给total.(第一个是事件名)

还可以用v-model实现数据的双向传递:例子

完整的代码如下:

<html>
    <head>
        <title>1</title>
        <script src="https://cdn.jsdelivr.net/npm/vue@2.6.11/dist/vue.js"></script>
    </head>
    <body>
        <div id="app">
            <p>总数:{{total}}</p>
            <my-component v-model="total"></my-component>
            <button @click="handleReduce">-1</button>
        </div>        
    </body>
    <script>
            Vue.component('my-component', {
                props: ['value'],
                template: '<input :value="value" @input="updateValue">',
                methods: {
                    updateValue(event) {
                        this.$emit('input', Number(event.target.value))
                    }
                }
            });
            var app = new Vue({
                el: '#app',
                data: {
                    total: 0
                },
                methods: {
                    handleReduce() {
                        this.total--
                    }
                }
            })
        </script>
</html>

发表回复

*您的电子邮件地址不会被公开。必填项已标记为 。

*
*