组件初始化、父子组件传值、插槽

本文介绍了Vue中的组件初始化、父子组件间的通信以及插槽的使用。组件化允许我们将页面拆分为独立的功能块,便于管理和扩展。文章详细讲解了组件的创建、注册和使用,包括全局和局部组件、父组件和子组件的概念。接着讨论了通过props和自定义事件实现父子组件通信的方法。最后,阐述了插槽的用途,包括默认插槽、具名插槽和作用域插槽,展示了如何提高组件的可扩展性。
摘要由CSDN通过智能技术生成

Vue学习二——组件初始化、父子组件传值、插槽

一、组件化初始化
1.什么是组件以及组件化?
如果我们将一个页面中所有的处理逻辑全部放到一起。处理起来就会变得非常复杂,而且不利于后续的管理以及扩展。为此,引出组件化的思想:

  • 将一个完整的页面分成很多组件
  • 每一个组件都用于实现页面的一个功能块
  • 而每一个组件又可以进行细分
    页面组件化
    组件化提供了一种抽象,让我们可以开发一个个独立可复用的小组件来构造我们的应用。任何的应用都会被抽象成一棵组件树
    组件树
    2.注册组件的基本步骤

1.创建组件构造器
2.注册组件
3.使用组件

注册组件的步骤视图:
注册组件的步骤图

<div id="app">
        <!-- 使用组件 -->
        <my-cpn></my-cpn>
        <my-cpn></my-cpn>
    </div>

    <script src="../JS/vue.js"></script>
    <script>
        // 1.创建组件构造器对象
        const cpnC = Vue.extend({
     
            template : `
            <div>
                <h2>我是标题</h2>
                <p>hahaha</p>
            </div>`
        })
        // 2.注册组件
        Vue.component('my-cpn',cpnC)

        let app = new Vue({
     
            el : '#app',
            data : {
     
                message : 'hello'
            }
        })
    </script>

页面显示结果:

我是标题
hahaha
我是标题
hahaha

注册组件步骤解析:

  1. Vue.extend():

     调用Vue.extend()创建的是一个组件构造器
     通常在创建组件构造器时,传入template代表我们自定义组件的模板
     该模板就是在使用到组件的地方,要显示的HTML代码
     事实上,这种写法在Vue2.x的文档中几乎以及看不到了,它会直接使用语法糖,是基础
    
  2. Vue.component():

    调用Vue.component()是将刚才的组件构造器注册成一个组件,并且给他起一个组件的标签名称
    所以需要传递两个参数:
    	1.注册组件的标签名;
    	2.组件构造器
    
  3. 组件必须挂载在某一个Vue实例下,否则它不会生效

组件分类

  1. 全局组件和局部组件

    全局注册组件的写法:
    		Vue.component('cpn',cpnC)
    		//这种写法在任何一个vue实例中均可以使用
    局部注册组件的写法:
    		//只可以在所挂载的某个实例中使用
    
let app = new Vue({
            el : '#app',
            data : {
                message : 'hello'
            },
            components : {
                // cpn就是使用组件时的标签名
                // 局部注册组件,仅在app中可以使用
                cpn : cpnC
            }
        })
  1. 父组件和子组件
    在创建某一个组件中注册了另一个组件,其中创建组件的称为“父组件”,注册的组件称为“子组件”。
 <div id="app">
    <cpn2></cpn2>
   </div>
   <script src="../JS/vue.js"></script>
   <script>
    // 1.创建第一个组件构造器对象(子组件)
    const cpnC1 = Vue.extend({
     
        template : `
        <div>
            <h2>我是标题</h2>
            <p>hahaha</p>
        </div>`
    })
// 创建第二个组件构造器(父组件)
    const cpnC2 = Vue.extend({
     
        template : `
        <div>
            <h2>我是标题</h2>
            <p>heiheiheihei</p>
            <cpn1></cpn1>
        </div>
        `,
        //在组件二中注册组件一
        components : {
     
            cpn1 : cpnC1
        }
    })
    // 2.注册组件
    // Vue.component('my-cpn',cpnC1)
    // root组件
    let app = new Vue({
     
        el : '#app',
        data : {
     
            message : 'hello'
        },
        components : {
     
            cpn2 : cpnC2
        }
    })
</script>

在父组件中注册的子组件其作用域就是父组件,要是想要在全局作用还需要在vue实例中注册。

注册组件的语法糖:

  1. 全局组件语法糖
<script>
Vue.component('cpn1',{
     
            template : `
            <div>
                <h2>我是全局组件语法糖</h2>
                <p>hahaha</p>
            </div>`
        })
</script>
  1. 局部组件语法糖
<script>
let app = new Vue({
     
            el : '#app',
            data : {
     
                message : 'hello'
            },
            components : {
     
                'cpn2' : {
     
                    template : `
                         <div>
                             <h2>我是局部组件语法糖</h2>
                             <p>hahaha</p>
                         </div>`
                }
            }
        })
</script>

组件模板的分离写法:

	使用<script>标签:<script type="text/x-template" id="cpn">
<div id="app">
        <!-- 使用组件 -->
        <cpn>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2中,父子组件之间可以通过props和事件来实现实时传值。 1. 使用props:父组件可以通过props向子组件传递数据,子组件可以通过props接收并使用这些数据。当父组件的数据更新时,子组件会自动更新。 父组件: ```vue <template> <div> <p>父组件数据:{{ parentData }}</p> <child-component :childData="parentData"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { parentData: '父组件初始数据', }; }, components: { ChildComponent, }, }; </script> ``` 子组件: ```vue <template> <div> <p>子组件数据:{{ childData }}</p> </div> </template> <script> export default { props: { childData: { type: String, required: true, }, }, }; </script> ``` 2. 使用事件:子组件可以通过$emit触发自定义事件,并将数据传递给父组件。父组件可以通过监听子组件的自定义事件来获取子组件传递的数据。 父组件: ```vue <template> <div> <p>父组件数据:{{ parentData }}</p> <child-component @updateData="updateParentData"></child-component> </div> </template> <script> import ChildComponent from './ChildComponent.vue'; export default { data() { return { parentData: '父组件初始数据', }; }, components: { ChildComponent, }, methods: { updateParentData(childData) { this.parentData = childData; }, }, }; </script> ``` 子组件: ```vue <template> <div> <button @click="updateData">更新父组件数据</button> </div> </template> <script> export default { methods: { updateData() { const childData = '子组件数据'; this.$emit('updateData', childData); }, }, }; </script> ``` 通过以上两种方式,父子组件之间可以实现实时传值。在props方式下,父组件的数据更新会自动反映到子组件上;在事件方式下,子组件通过$emit触发自定义事件,父组件通过监听事件来获取子组件传递的数据并更新父组件的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值