Vue3 组件,一点也不难

简介: 5.动态 Prop类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:


1.简介


组件是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。

组件系统让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个组件树:




2.一个简单的 Vue 组件的实例




<div id="app">
    <list></list>
</div>
<script>
    // 创建一个Vue应用
    const app = Vue.createApp({})
    // 定义一个组件内容
    app.component('list', {
        template: '<h1>我是自定义的组件!</h1>'
    })
    app.mount('#app')
</script>


接下来我们再注册一个 button-counter 组件,在每次点击后,计数器会加 1:


<div id="app">
    <button-counter></button-counter>
</div>
<script>
    // 创建一个Vue应用
    const app = Vue.createApp({})
    // 定义一个组件内容
    app.component('button-counter', {
        data() {
            return {
                count: 0
            }
        },
        template:`
            <button @click="count++">
                点了 {{ count }}次!
            </button>`
    })
    app.mount('#app')
</script>



可以将组件进行任意次数的复用:


<div id="app">
    <button-counter></button-counter>
    <button-counter></button-counter>
    <button-counter></button-counter>
    <button-counter></button-counter>
    <button-counter></button-counter>
    <button-counter></button-counter>
</div>



3.局部组件


全局注册所有的组件意味着即便你已经不再使用一个组件了,它仍然会被包含在你最终的构建结果中。这造成了用户下载的 JavaScript 的无谓的增加

例子:这个组件只能在这个实例中使用


<div id="app">
    <imim-a></imim-a>
</div>
<script>
    var imimA = {
        template: '<h1>局部组件的例子</h1>'
    }
    const app = Vue.createApp({
        components: {
            'imim-a': imimA
        }
    })
    app.mount('#app')
</script>


4.Prop


prop 是子组件用来接受父组件传递过来的数据的一个自定义属性。

父组件的数据需要通过 props 把数据传给子组件,子组件需要显式地用 props 选项声明 “prop”:


<div id="app">
    <site-name title="Google"></site-name>
    <site-name title="Runoob"></site-name>
    <site-name title="Taobao"></site-name>
</div>
<script>
    const app = Vue.createApp({})
    app.component('site-name', {
        props: ['title'],
        template: `<h1>{{ title }}</h1>`
    })
    app.mount('#app')
</script>



5.动态 Prop


类似于用 v-bind 绑定 HTML 特性到一个表达式,也可以用 v-bind 动态绑定 props 的值到父组件的数据中。每当父组件的数据变化时,该变化也会传导给子组件:


<div id="app">
  <site-info
    v-for="site in sites"
    :id="site.id"
    :title="site.title"
  ></site-info>
</div>
<script>
const Site = {
  data() {
    return {
      sites: [
        { id: 1, title: 'Google' },
        { id: 2, title: 'Runoob' },
        { id: 3, title: 'Taobao' }
      ]
    }
  }
}
const app = Vue.createApp(Site)
app.component('site-info', {
  props: ['id','title'],
  template: `<h4>{{ id }} - {{ title }}</h4>`
})
app.mount('#app')
</script>




目录
相关文章
|
3天前
|
JavaScript 前端开发 C++
Vue3视图渲染技术(1)
Vue3视图渲染技术(1)
8 0
Vue3视图渲染技术(1)
|
2天前
|
JavaScript 前端开发 API
vue3和vue2的区别
vue3和vue2的区别
|
2天前
|
JavaScript API 开发者
vue3 的生命周期
vue3 的生命周期
|
1天前
|
JavaScript 网络架构
vue3 Elementplus 动态路由菜单不跳转问题
vue3 Elementplus 动态路由菜单不跳转问题
12 1
|
2天前
|
JavaScript 前端开发
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
Vue组件生命周期深度剖析:从创建到销毁的八大钩子实战指南
|
3天前
Vue3项目 小兔鲜问题总结
Vue3项目 小兔鲜问题总结
11 2
|
3天前
vue3基本指令使用
vue3基本指令使用
7 2
|
3天前
|
JavaScript 前端开发 API
Vue3入门 - vue3相比于vue2的优点,及如何创建Vue3项目
Vue3入门 - vue3相比于vue2的优点,及如何创建Vue3项目
|
4天前
Vue3——tdesign-vue-next如何按需加载动态渲染ICON
如题,在vue3中进行按需加载来动态的渲染icon图标;
9 1
|
1天前
技术笔记:Vue3之emits
技术笔记:Vue3之emits