Vue组件创建和传值的方法


Posted in Javascript onAugust 17, 2018

## 创建组件的3种方法

# 第一种:
 + Vue.extend()函数返回一个组件的构造器,里面包含一个参数,参数是对象,对象里面是一些配置项
+ Vue.component()函数利用Vue.extend()返回的构造器创建一个组件的实例,有两个参数.;
参数1:组件名字,参数2:组件构造器

 注意:
      模板template中只能有一个根节点

    组建的名字采用驼峰命名的话,使用时,就要加上"-"; 例如:组件名字indexA-->index-a;

## 第二种:
 + Vue.component('indexB',{模板})

## 第三种:
 + 通过制定模板创建,在Vue管辖范围之外定义模板

## 总结:
 + 先制造一个模板,在创建组件

## 组件中使用指令:
 + 在Vue.component()里边,有template模板,有data()函数,有methods()方法
+ 注意:data()必须是一个个函数.不能使用属性定义;函数里边return出去一个对象

## 父组件传值给子组件的方法

* 先创建好父组件和子组件
* 在父组件的模板中的son,子组件标签里绑定 :属性 = 父组件需要传递的数据;
 * 在子组件的son{}中  使用props来接收父组件传递过来的数据;
 * props后跟一个数组,数组中是一个个字符串,这些字符串可以当成属性使用,即props:['属性名']

 * 代码如下:

    *

Vue.component('father',{
    template:'<div>....<son :myName="mySonName"></son></div>',
    data(){
      return{
        mySonName:'小明'
      }
    },
    //子组件
    components:{
      son:{
        props:['myName'],
        template:'...{{myName}}'
      }
    }
  })

 ## 子组件传值给父组件的方法
* 先创建好父组件和子组件;

* 在子组件methods方法中使用this.$emit()方法,
     * 这个方法有两个参数;参数1:需要与父组件交换事件名称,参数2:要传递的数据;

* 在父组件模板的son标签中使用方法名的传递:

即,@tellFatherMyname = "getMySonName";

* 在父组件的methods方法中传入data参数,这个data=子组件传递过来的数据,然后让mySonName = data;*

代码如下:     

<div id="app">
    <father></father>
  </div>
  <script>
    Vue.component('father',{
      template:`<div>
      <p>我的儿子告诉我他叫{{mySonName}}</p>
      <son @tellFatherMyname="getMySonName"></son>
      </div>`,
      data(){
        return {
          mySonName:'???'
        }
      },
      methods:{
        getMySonName(data){
          console.log(data);
          this.mySonName = data;
        }
      },
      components: {
        son:{
          data(){
            return {
            myName :'小明'
            }
          },
          template:`
              <button @click = "emitMyname">点击就告诉父亲我叫{{myName}}          
              </button>`,
          //在子组件的methods中使用this.$emit()来传递值;
          //$emit()有2个参数;参数1:需要交换的事件名,参数2:要传递的数据;例 
            如:this.name
          methods:{
            emitMyname(){
              this.$emit('tellFatherMyname',this.myName)
            }
          }
        }
      }
    })
    var vm = new Vue({
      el:'#app',
      data:{
      }
    })
  </script>

### 兄弟组件的创建和传值:

 * 创建兄弟组建时,先创建好父组件,然后在子组件中创建son组件 和 daughter组件;
 * 接下来是 son组件 和daughter组件之间传值;
 *  dau --> son传值

* 在dau中 先通过事件总线发射一个事件名称和要传递的数据;即eventbus.$emit('事件名称','数据')
     *  事件总线:

var eventbus = new Vue();

* 在 son 中先写一个钩子函数,再通过eventbus.$on('事件名称',data=>{})方法去监听,接收兄弟节点发射过来的事件
*  $on()有两个参数,参数1:事件名称;参数2:函数,函数的默认值是传递过来的数据* 代码如下:
     * 

<div id="app">
    <!-- 在此处渲染到页面上 -->
    <father></father>
  </div>
  <script>
    //先创建一个vue空实例,作为事件总线
    var eventbus = new Vue();
    Vue.component('father',{
      //组件显示的模板
      template:`<div>
            <son></son>
            <daughter></daughter>
          </div>`,
      components: {
        son:{
          data(){
           return {
            mySisterName:'???'
           }
          },
          //组件显示的模板
          template:'<p>我的妹妹告诉我她叫{{mySisterName}}</p>',
          //采用钩子函数
          //在钩子函数中通过eventbus.$on('同一个事件名称',data)来接收传递过来的数据
          mounted(){
            eventbus.$on('tellBroMyName',data=>{
              this.mySisterName = data;
            })
          }
        },
        daughter:{
          data(){
           return {
            myName:'兰兰'
           }
          },
          template:'<button @click="emitMyName">点击就告诉哥哥我叫{{myName}}</button>',
          methods:{
            //只要点击按钮,就将事件和数据一起传递过去
            emitMyName(){
              eventbus.$emit('tellBroMyName',this.myName)
            }
          }
        }
      }
    })
    var vm = new Vue({
      el:'#app',
      data:{
      }
    })
  </script>

总结

以上所述是小编给大家介绍的Vue组件创建和传值的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js href的用法
May 13 Javascript
jQuery 通过事件委派一次绑定多种事件,以减少事件冗余
Jun 30 Javascript
jquery中event对象属性与方法小结
Dec 18 Javascript
javascript获取form里的表单元素的示例代码
Feb 14 Javascript
鼠标滑过出现预览的大图提示效果
Feb 26 Javascript
jQuery轻松实现表格的隔行变色和点击行变色的实例代码
May 09 Javascript
js控制文本框禁止输入特殊字符详解
Apr 07 Javascript
vue bootstrap小例子一枚
Jun 09 Javascript
r.js来合并压缩css文件的示例
Apr 26 Javascript
Webstorm2016使用技巧(SVN插件使用)
Oct 29 Javascript
基于layui内置模块(element常用元素的操作)
Sep 20 Javascript
jQuery 动画与停止动画效果实例详解
May 19 jQuery
webpack多入口多出口的实现方法
Aug 17 #Javascript
angular2/ionic2 实现搜索结果中的搜索关键字高亮的示例
Aug 17 #Javascript
layer.open关闭父窗口 以及调用父页面的方法
Aug 17 #Javascript
vue+element的表格实现批量删除功能示例代码
Aug 17 #Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 #Javascript
浅析vue给不同环境配置不同打包命令
Aug 17 #Javascript
React中使用async validator进行表单验证的实例代码
Aug 17 #Javascript
You might like
谨慎使用PHP的引用原因分析
2012/09/06 PHP
基于jquery的$.ajax async使用
2011/10/19 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jQuery中delegate和on的用法与区别详细解析
2014/01/26 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
JavaScript小技巧整理篇(非常全)
2016/01/26 Javascript
JS实现上下左右对称的九九乘法表
2016/02/22 Javascript
JavaScript中const、var和let区别浅析
2016/10/11 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
详解vue-router 初始化时做了什么
2018/06/11 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
简单了解JavaScript弹窗实现代码
2020/05/07 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
django解决跨域请求的问题详解
2019/01/20 Python
Django 外键的使用方法详解
2019/07/19 Python
Python如何使用paramiko模块连接linux
2020/03/18 Python
Python新手学习raise用法
2020/06/03 Python
使用Python Tkinter实现剪刀石头布小游戏功能
2020/10/23 Python
python文件路径操作方法总结
2020/12/21 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
美国网上鞋城:Shoeline.com
2016/11/17 全球购物
英国领先的奢侈品零售商之一:CRUISE
2016/12/02 全球购物
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
List, Set, Map是否继承自Collection接口?
2016/05/16 面试题
护士个人简历自荐信
2013/10/18 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
大学生国庆节65周年演讲稿范文
2014/09/25 职场文书
Mysql超详细讲解死锁问题的理解
2022/04/01 MySQL
PyTorch device与cuda.device用法
2022/04/03 Python