VUE入门 生命周期 计算属性 监听器 组件【2】(二)

简介: VUE入门 生命周期 计算属性 监听器 组件【2】(二)

组件


什么是组件


组件是可复用的 Vue 实例,且带有一个名字


在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如:头部导航、尾部信息等模块。


但是如果每个页面都独自开发,这无疑增加了我们开发的成本。所以我们会把页面的不同部分拆分成独立的组件,然后在不同页面就可以共享这些组件,避免重复开发。


组件分类


组件的作用域分为两种:全局组件 和 局部组件。

全局组件:在所有的Vue实例中都可以使用

局部组件:只有在注册了组件的Vue实例中才可以使用

             

全局组件


使用 Vue.component 定义的组件为全局组件,在所有的 Vue 实例中都可以使用。


比如以下代码中定义了一个全局组件,这个组件在两个Vue实例中都可以使用:


语法


////

    Vue.component("",{
        template: ``,   // 定义html部分,要求有一个根标签
        data() {        // 定义数据部分
            return {
            }
        },
    })
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vue.js"></script>
</head>
<body>
  <div id="app1">
    <!--组件必须绑定在实例下面才能起作用-->
    <my-nav></my-nav>
  </div>
  <div id="app2">
      <!--组件必须绑定在实例下面才能起作用-->
      <my-nav></my-nav>
    </div>
  <script>
    //定义组件1
    Vue.component("MyNav", {
      template: '<div>您好!{{name}}</div>',
      data: function () {
        return {
          name: "jack"
        }
      }
    })
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1'
    });
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app2'
    });
  </script>
</body>
</html>

 

局部组件


局部组件是指只能在注册了该组件的 Vue 实例中才可以使用。(先需要注册才能用)

局部组件的定义只是定义一个组件对象:

局部组件的定义只是定义一个组件对象:

var 组件名 = { ... }

在需要使用这个组件的Vue中注册组件

const app = new Vue({
    ...
    components:{
        组件名:组件对象
    }
})

局部组件使用实例

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vue.js"></script>
</head>
<body>
   <div id="app1">
      <!--组件必须绑定在实例下面才能起作用-->
      <my-hello></my-hello>
    </div>
  <script>
    var hello = {
      template: '<div>您好!现在是在使用子组件</div>',
    };
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1',
      components:{
        "MyHello":hello
      }
    });
  </script>
</body>
</html>

 

组件自定义属性


什么是组件属性

什么是组件属性?比如我们在使用img标签时, src就是属性。如果我们把img看做一个组件的话,src就是这个组件的属性。


总结:组件属性用于父组件向子组件传递数据。

定义属性


当需要为组件设置属性时,我们需要先在定义组件时使用 props 来设置这个组件上所有属性的名字


///

Vue.component('...',{
    ...
    props:[属性名字数组]
})

定义了组件属性之后,在组件中就可以像使用一个普通数据一样使用属性:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vue.js"></script>
</head>
<body>
  <div id="app1">
    <!--组件必须绑定在实例下面才能起作用-->
    <my-nav welcome="张三丰"></my-nav>
  </div>
  <script>
    Vue.component('MyNav', {
      props: ['welcome'],
      template: '<div>欢迎您,游客! {{welcome}}</div>'
    })
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1'
    });
  </script>
</body>
</html>

绑定属性值


还可以把属性值绑定到 Vue 的数据中,实现方式如下

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vue.js"></script>
</head>
<body>
  <div id="app1">
    <!--组件必须绑定在实例下面才能起作用-->
    <my-nav :welcome="txt"></my-nav>
  </div>
  <script>
    Vue.component('MyNav', {
      props: ['welcome'],
      template: '<div>欢迎您,游客! {{welcome}}</div>'
    })
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1',
      data:{
        txt:"绑定数据到属性"
      }
    });
  </script>
</body>
</html>


组件事件


  • 原生事件

当需要在组件上绑定 JS 中原生的事件时,必须要添加 .native 修饰符,否则该事件是无法触发的。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vue.js"></script>
</head>
<body>
  <div id="app1">
    <!--组件必须绑定在实例下面才能起作用-->
    <my-nav :welcome="txt" @click.native="hello">您好</my-nav>
  </div>
  <script>
    Vue.component('MyNav', {
      props: ['welcome'],
      template: '<button>欢迎您,游客! {{welcome}}</button>'
    })
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1',
      data:{
        txt:"绑定数据到属性"
      },
      methods:{
        hello:function(){
          alert("组件事件");
        }
      }
    });
  </script>
</body>
</html>
  • 自定义事件

除了原生的事件外,还可以为组件添加自定义的事件,通过自定义的事件,子组件可以向父组件传递消息


在组件中我们可以使用 emit 触发一个事件,这个事件的名字是我们自己定义的:

定义方法如下:声明事件名称


this.$emit('事件名')


在使用这个组件时,就可以为这个新的事件名绑定一个事件:


<my-component v-on:事件名="doSomething"></my-component>


或者:


<my-component @事件名="doSomething"></my-component>

image.png

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>vue组件</title>
  <script src="js/vuejs-2.5.16.js"></script>
  <script src="js/toDao.js"></script>
</head>
<body>
  <div id="app1">
    <!--组件必须绑定在实例下面才能起作用-->
    <to-do @todo="todo"></to-do>
  </div>
  <script>
    //下面两个实例都可以使用全局组件
    new Vue({
      el: '#app1',
      methods: {
        todo: function () {
          console.log('todo组件中发表了新的todo')
        }
      }
    });
  </script>
</body>
</html>

image.png

相关文章
|
28天前
|
缓存 JavaScript UED
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
128 64
|
1月前
|
监控 JavaScript 前端开发
vue学习第十二章(生命周期)
欢迎来到我的博客,我是瑞雨溪,一名热爱JavaScript和Vue的大一学生。本文深入探讨了Vue实例的生命周期,从初始化到销毁各阶段的关键钩子函数及其应用场景,帮助你更好地理解Vue的工作原理。如果你觉得有帮助,欢迎关注我,将持续分享更多优质内容!🎉🎉🎉
29 1
vue学习第十二章(生命周期)
|
28天前
|
前端开发 JavaScript 测试技术
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
32 8
|
28天前
|
JavaScript
在 Vue 3 中,如何使用 v-model 来处理自定义组件的双向数据绑定?
需要注意的是,在实际开发中,根据具体的业务需求和组件设计,可能需要对上述步骤进行适当的调整和优化,以确保双向数据绑定的正确性和稳定性。同时,深入理解 Vue 3 的响应式机制和组件通信原理,将有助于更好地运用 `v-model` 实现自定义组件的双向数据绑定。
|
1月前
|
存储 缓存 JavaScript
如何在大型 Vue 应用中有效地管理计算属性和侦听器
在大型 Vue 应用中,合理管理计算属性和侦听器是优化性能和维护性的关键。本文介绍了如何通过模块化、状态管理和避免冗余计算等方法,有效提升应用的响应性和可维护性。
|
1月前
|
存储 JavaScript 开发者
Vue 组件间通信的最佳实践
本文总结了 Vue.js 中组件间通信的多种方法,包括 props、事件、Vuex 状态管理等,帮助开发者选择最适合项目需求的通信方式,提高开发效率和代码可维护性。
|
1月前
|
存储 JavaScript
Vue 组件间如何通信
Vue组件间通信是指在Vue应用中,不同组件之间传递数据和事件的方法。常用的方式有:props、自定义事件、$emit、$attrs、$refs、provide/inject、Vuex等。掌握这些方法可以实现父子组件、兄弟组件及跨级组件间的高效通信。
|
JavaScript
vue 的实例生命周期
vue 的实例生命周期
63 0
|
7月前
|
JavaScript 前端开发 开发者
vue实例、指令、生命周期
vue实例、指令、生命周期
60 1
|
7月前
|
JavaScript
vue 的实例生命周期
vue 的实例生命周期