Vue系列——组件

Vue的组件

组件是什么?

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码
组件 就是 自定义的标签

组件的分类

全局组件:在所有vue实例中(.在它所挂载元素下面有效)有效

​ 局部组件:在自己vue实例中(.在它所挂载元素下面有效)有效

全局组件

语法:
Vue.component(“自定义标签的名字”,{配置对象})
特点:
全局组件可以在任何被挂着的标签中使用.
全局组件的配置对象中必须包含template属性
注意事项:
template中的html必须在一个标签中. 仅且只能有一个根节点
应用场景:
如果该组件的特定功能需要在任何被挂着的标签中使用. 推荐使用全局组件
demoCode:

<body>
<h1>全局组件</h1>
    <div id="myDiv">
        <mycomponet1></mycomponet1>
        <mycomponet2></mycomponet2>
    </div>
    <div id="myDiv1">
        <mycomponet1></mycomponet1>
        <mycomponet2></mycomponet2>
    </div>

    </div>
    <script>
        //定义一个全局组件
        Vue.component('mycomponet1',{
            template:'<H1>测试...</h1>'
        });


        var compontConfig = {
            template:'<h1>乔亮同学</h1>'
        };
        //定义第二个全局组件,并加入对象
        Vue.component('mycomponet2',compontConfig);
        new Vue({
            el:"#myDiv",
            data:{
                msg:'xxx'
            }
        });

        new Vue({
            el:"#myDiv1",
            data:{
                msg:'xxx'
            }
        });
    </script>
</body>
局部组件

语法:

var app = new Vue({
    el: "#app",
    data: {},
    components : {
        "局部组件的名字1" : {组件的配置对象}
        "局部组件的名字2" : {组件的配置对象}
    }
  });

特点:
局部组件只能够在所挂载的标签中使用
demoCode

<body>
<h1>局部组件</h1>
    <div id="myDiv">
        <mycomponet1></mycomponet1>
    </div>
    <div id="myDiv1"><!--不能在不同的挂载中显示-->
        <mycomponet1></mycomponet1>
    </div>

    </div>
    <script>
        //定义一个局部组件
        var app = new Vue({
            el: "#myDiv",
            data: {
            },
            components : {
                "mycomponet1" : {
                    template:'<H1>这是一个局部组件</H1>'
                }
            }
        });
    </script>
</body>
组件模板写法

写法一: 在script标签里面写
写法二: 在template标签里面写
注意: 这两种写法只能适用于局部组件

demoCode

<body>
<h1>组件模板写法</h1>
<div id="myDiv">
    <mycomponet1></mycomponet1>
</div>
<div id="myDiv1">
    <mycomponet1></mycomponet1>
</div>
<!--写法二:可以在template标签里面写-->
     <!--<template id="mytemplate">
        <h2>这是单独提出来的模板template</h2>
     </template>
     -->

<!--可以将模板单独提出来写
    这两种写法只能用在局部组件
-->
<!--写法一:在<script>里面写-->
    <script type="text/template" id="mytemplate">
        <h2>这是单独提出来的模板template</h2>
    </script>

    <script>
        //定义一个局部组件
        new Vue({
            el:"#myDiv",
            components:{
                "mycomponet1":{
                    template:"#mytemplate"
                }
            }
        });

    </script>
</body>
组件数据写法

语法:

"组件的名字":{
			template: "",
			data : function(){
				return {1:1,2:2
				}
			}
		}

注意事项:
data数据只能够以函数的形式返回,因为函数中可以写其他的业务代码
只能够在各自的组件模板中使用各自的组件中的data数据
Vue对象中的数据不能够在组件中使用. 组件的数据也不能够在挂载的html标签上使用.

 		components:{
               "mycomponent1":{
                   // "template":"#templateStr1"
                   "template":"#templateStr2",
                   //模板是定义数据以下是可行的
                   //1 必须是函数
                   //2 通过return返回数据对象
                   //3 如果有多个数据就是对象对象多个属性及值
                   data(){
                       return {
                           messaage:"jjjj",
                           yhptest:"xxxxxxxxxxxxxx"
                       }
                   }

demoCode

<body>
<h1>组件数据写法</h1>
<div id="myDiv">
    <mycomponet1></mycomponet1>
</div>
<div id="myDiv1">
    <mycomponet1></mycomponet1>
</div>
<template id="myTemplate">
    <form>
        {{name1}}:<input type="text"/><br>
        {{password}}:<input type="text"/>
    </form>
</template>

<script>
    //定义一个全局组件
    Vue.component('mycomponet1',{
        template:'#myTemplate',
        data(){
            return {"name1":"用户名","password":"密码"}
        }
    });
    new Vue({
        el:"#myDiv",
        data:{
            msg:'xxx'
        }
    });
    new Vue({
        el:"#myDiv1",
        data:{
            msg:'xxx'
        }
    });
</script>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
组件Vue.js 最重要的概念之一。组件可以让我们将 UI 拆分为独立、可复用的部件,使得代码更加清晰、易于维护。在 Vue.js 组件可以分为全局组件和局部组件,其全局组件可在任何地方使用,而局部组件只能在其父组件使用。 定义组件时,需要使用 Vue.component() 方法,该方法需要传入两个参数:组件名称和组件配置对象。组件名称应该采用 kebab-case(短横线分隔命名)格式,以便在 HTML 使用。 示例代码如下: ```javascript // 定义一个名为 button-counter 的新组件 Vue.component('button-counter', { data: function () { return { count: 0 } }, template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>' }) ``` 在上述代码,我们定义了一个名为 button-counter 的组件,该组件包含一个计数器,每次点击按钮计数器加一。 在 HTML 使用组件时,需要使用组件名称作为自定义标签来调用组件。示例代码如下: ```html <div id="app"> <button-counter></button-counter> </div> ``` 在上述代码,我们调用了 button-counter 组件,并将其渲染到了 id 为 app 的 div 元素。 除了组件的 data 和 template 属性外,还可以使用 props 属性来传递组件之间的数据。使用 props 时,需要在组件的配置对象定义 props 属性,并在 HTML 使用 v-bind 指令来传递数据。 示例代码如下: ```javascript // 定义一个名为 todo-item 的新组件 Vue.component('todo-item', { props: ['todo'], template: '<li>{{ todo.text }}</li>' }) // 创建一个 Vue 实例 var app = new Vue({ el: '#app', data: { groceryList: [ { id: 0, text: '蔬菜' }, { id: 1, text: '水果' }, { id: 2, text: '奶酪' } ] } }) ``` 在上述代码,我们定义了一个名为 todo-item 的组件,并使用 props 属性定义了一个名为 todo 的 prop。在 HTML ,我们使用 v-bind 指令将 groceryList 数组的每个对象传递给了 todo-item 组件。示例代码如下: ```html <div id="app"> <ul> <todo-item v-for="item in groceryList" v-bind:todo="item" v-bind:key="item.id"></todo-item> </ul> </div> ``` 在上述代码,我们使用 v-for 指令遍历 groceryList 数组,并使用 v-bind 指令将数组的每个对象传递给了 todo-item 组件。注意,我们还需要使用 v-bind:key 指令来为每个列表项指定一个唯一的 key 值。 插槽是 Vue.js 另一个重要的概念。插槽可以让父组件在子组件插入任意的 HTML 内容,使得组件更加灵活、可复用。 在子组件,使用 <slot> 标签来定义插槽。在父组件,使用子组件的自定义标签来调用组件,并在标签内部插入 HTML 内容。示例代码如下: ```javascript // 定义一个名为 alert-box 的新组件 Vue.component('alert-box', { template: ` <div class="alert-box"> <strong>Error!</strong> <slot></slot> </div> ` }) // 创建一个 Vue 实例 var app = new Vue({ el: '#app' }) ``` 在上述代码,我们定义了一个名为 alert-box 的组件,并在组件定义了一个插槽。在 HTML ,我们调用了 alert-box 组件,并在标签内部插入了一些 HTML 内容。示例代码如下: ```html <div id="app"> <alert-box> <p>Something bad happened.</p> </alert-box> </div> ``` 在上述代码,我们调用了 alert-box 组件,并在标签内部插入了一些 HTML 内容。该 HTML 内容会被插入到 alert-box 组件的插槽

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值