欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > 前端技术 > vue >内容正文

vue

三十七、深入vue.js组件component(下篇) -尊龙游戏旗舰厅官网

发布时间:2024/10/8 vue 12 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 三十七、深入vue.js组件component(下篇) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

@author:runsen
@date:2020/7/4

人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难,奋勇前行,不忘初心,砥砺前行,人生定会有所收获,不留遗憾 (作者:runsen )

作者介绍:runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,python, java和一系列数据分析软件。导致翘课严重,专业排名中下。.在大学60%的时间,都在csdn。决定今天比昨天要更加努力。我的征途是星辰大海!

今天进入vue-router和组件component关系和通信的学习。vue 通信也是面试中非常高频的问题,有很多面试题,都是围绕通信展开。

文章目录

  • 组件关系
    • 父子关系
    • 兄弟组件
  • props
  • emit

几种通信方式无外乎以下几种:
  • props(常用)
  • $emit (组件封装用的较多)
  • $attrs 和 $listeners (组件封装用的较多)
  • provide 和 inject (高阶组件/组件库用的较多)

先让runsen开始 组件关系

父子关系

父子关系即是组件 a 在它的模板中使用了组件 b,那么组件 a 就是父组件,组件 b 就是子组件。

<script>// 注册一个子组件vue.component('child', {data() {return {text:"我是father的子组件"}},template:"{{text}}"})// 注册一个父组件vue.component('father', {// 在模板中使用了child组件template:"
"
})
script>

兄弟组件

两个组件互不引用,则为兄弟组件

<script>// 注册一个兄弟组件vue.component('borther1', {data() {return {text:"我是borther1"}},template:"{{text}}"})// 注册一个兄弟组件vue.component('borther2', {data() {return {text:"我是borther2"}},template:"{{text}}"}) script>

跨级组件:就是在父子关系中,中间跨了很多个层级。

组件的构成:一个再复杂的组件,都是由三部分组成的: prop、 event、 slot,它们构成了 vue.js 组件的 api。

props用于子组件接收来自父组件传递的数据。父组件可以将一条数据传递给子组件,这条数据可以是动态的,父组件的数据更改的时候,子组件接收的也会变化。

子组件被动的接收父组件的数据,子组件不要再更改这条数据了。

我们先看一个简单的案例,代码来自菜鸟教程

<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js">script> <body><div id="app"><child message="hello!">child> div> <script> // 注册 vue.component('child', {// 声明 propsprops: ['message'],// 同样也可以在 vm 实例中像 "this.message" 这样使用template: '{{ 0 }}'# template: '{{ message }}' 和上句完全一样 }) // 创建根实例 new vue({el: '#app' }) script>

子组件需要显式地用 props 选项声明 “prop”,这里message就是prop。在对应的模板中使用message属性就可以传参。

下面我们看一个子组件从vue实例中的data传参。

<body><div id="app"><child :message="mymessage"></child> </div> <script> // 注册 vue.component('child', {// 声明 propsprops: ['message'],template: '{{ message }}' }) // 创建根实例 new vue({el: '#app',data() {return {mymessage:"hello world"}}, }) </script>

:message表明是从实例中的data取值,取值前,需要在注册的时候 声明 props。

接下来,我们就学习子组件→父组件通信。

相比父→子组件通信,子→父组件就稍微繁琐一点。我们会使用到组件的一个知识点:自定义事件。

每一个vue实例都实现了事件接口,我们可以用它提供的api $emit( eventname)来触发一个事件。

我先把标准代码给出。

<body><div id="app"><son @connect="say"></son></div><script>vue.component('son', {template: `<button @click="send">点击</button>`,methods: {send() {this.$emit('connect');}}});const app = new vue({el: "#app",methods: {say() {console.log(`大家好,我监听到了事件connect的触发`);}}});</script> </body>

注册子组件,就是一个按钮button,点击它的时候,会触发组件内部的send( )方法,而方法体里面会触发一个事件,事件名取名为:“connect”。

然后我们就去父组件监听这个事件‘connect’,监听方式跟普通原生的事件一模一样,也是用 v-on 指令,缩写用@符号, 我们采用缩写来监听。

我们设置了事件connect触发的处理程序是一个say( )方法,我们补上say( )方法的定义:

下面就是代码的最终效果

总结:父组件 a 通过 props 参数向子组件 b 传递数据,b 组件通过$emit向a组件发送一个事件(携带参数数据),a组件中监听$emit 触发的事件得到 b 向 a 发送的数据。

总结

以上是尊龙游戏旗舰厅官网为你收集整理的三十七、深入vue.js组件component(下篇)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

  • 上一篇:
  • 下一篇:
网站地图