Vue的基础组件

1.4 Vue基础组件
1.4.1组件注册
语法: Vue.component("自定义组件的名称", {
这个括号内可以写实例里面的内容,例如data(值必须是一个函数)、methods、computed、watch等但是不可以写el。

1、props可以定义一些数据、接收一些数据他的值可以是字符串、数字、对象、数组等,也可以是数据类型。

2、template:的值是我们自定义组件所需要的代替的html代码。
})

1.4.2对于props的命名问题:

在props命名的时候可以使用驼峰的方式进行命名但是在html代码中使用组件传值的时候需要将驼峰方式改成-连接方式来书写,因为vue.component的属性命名在解析的时候会将大写的代码自己转换为小写。

注意js中不支持-连接可以写成_连接

1.4.3组件基础中$emit()的用法
$emit('自定义事件名称',传值)
1、子组件可以使用 props 接收父组件的数据
2、子组件可以使用 $emit 触发父组件的自定义事件。


案例:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V69Yzf6B-1616067986242)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210305103347295.png)]

小知识:

v-bind:可以简写为:

v-on:click可以简写为@click

1.4.4局部组件
局部组件的语法:
第一步:创建组件,
let 组件名称自己命名={
template=`<p>111</p>`
这个花括号中可以写所有的周期函数例如:、data(必须是一个函数)、components(一般嵌套使用时才会卸载局部的创建组件中)、watch、props、methods、computed等
}
第二部:注册,
通过components:{}再实例中以键值对的方式注册一个或多个组件,只有注册后才可以使用,
最后使用的dom组件以components中的属性名为标签名,属性值是我们创建组件时的命名。

注意:

components属性命名时不可以写驼峰html不区分大小写html会自己将含有大写字母的组件名称转换为全小写的组件名称这样就会导致浏览器无法识别我们的组件;命名时简易使用-来代替驼峰的连接方式。

<body>
  <div id="app">
    <list-item></list-item>
  </div>
  <div id="vm">
    <aa></aa>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    /**
     * 这里只是创建一个局部组件,并不能直接在 vue 实例中使用
     */
    let listItem = {
      template: `<li><a href="#">home</a></li>`,
      data: function () {
        return {}
      },
      methods: {},
      computed: {},
      watch: {},
      props: {}
    }
    let app = new Vue({
      el: '#app',
      data: {},
      components: {
        'list-item': listItem
      }
    })

    let vm = new Vue({
      el: '#vm',
      components: {
        'aa': listItem
      }
    })
  </script>
</body>

局部组件与全局组件不同,全局组件在实例外直接进行注册不需要进行创建,而局部组件需要先创建再注册(想在那个实例中用就在那个实例中注册。)

1.4.5组件嵌套
1.4.5.1全局组件嵌套
实现组件嵌套组件的结构:
全局组件嵌套:
<body>
    <div id="app">
      <el-list :data="posts"></el-list>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
      // 创建列表组件
      Vue.component("el-list", {
        template: `<nav>
                  <ul>
                    <el-list-item></el-list-item>  
                  </ul>
                </nav>`,
      });
      // 创建列表项组件
      Vue.component("el-list-item", {
        template: `<li><a href="#">12313</a></li>`,
      });
      let app = new Vue({
        el: "#app",
        data: {},
      });
    </script>
  </body>

结论:定义两个组件将被嵌套的组件以dom结构的方式卸载嵌套组件的template的html结构中。

1.4.5.2局部组件嵌套+传递数据

局部组件嵌套与全局嵌套相同。

注意:要注意声明的顺序不可颠倒。

传值思路:在外层组件定义时定义一个变量在html结构中通过v-bind获取实例data中的数据,然后将内层的组件以组件dom的形式嵌套在内就可以使用这个组件变量接收来自实例的数据通过我们熟知的v-bind:的方法获取

<body>
  <div id="app">
    <el-list :data="posts"></el-list>
  </div>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  <script>
    // 创建列表项组件
    let esListItem = {
      props: ['title'],
      template: `<li><a href="#">{{title}}</a></li>`
    }
    // 创建列表组件
    let elList = {
      props: ['data'],
      template: `<nav>
                  <ul>
                    <el-list-item v-for="item in data" :key="item.id" :title="item.title"></el-list-item>  
                  </ul>
                </nav>`,
      components: {
        'el-list-item': esListItem
      }
    }

    let app = new Vue({
      el: '#app',
      data: {
        posts: [
          { id: 1, title: '今天好热' },
          { id: 2, title: '明天更热' },
          { id: 3, title: '因为有空调' },
        ]
      },
      components: {
        'el-list': elList,
      }
    })
  </script>
</body>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue3组件篇中的Button组件是一个基础组件,它在前端开发中非常常见,无论是C端还是B端的应用中都经常使用。这个组件具有以下功能点: 1. 可以设置主题色、按钮文字和禁用状态。 2. 可以设置按钮的尺寸,包括块级按钮。 3. 可以自定义按钮的颜色。 4. 可以选择按钮的形状,包括椭圆、矩形和圆形。 5. 可以添加点击事件。 6. 可以自定义按钮的文案。 7. 可以选择按钮的大小。 8. 可以安装和使用这个组件。 在使用Button组件时,可以在Vue模板中使用类似于以下的代码: ```html <button class="simple-button"> <span> <slot></slot> </span> </button> ``` 这个按钮组件的具体实现方式可以根据具体的需求进行调整,但以上是一个基本的示例代码。通过在Button组件上添加相应的样式和属性,就可以实现上述功能。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Vue3组件库实现 - Button组件篇](https://blog.csdn.net/vike_123/article/details/126053454)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [vue3 组件篇 Button](https://blog.csdn.net/glorydx/article/details/127165769)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值