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 相关文章推荐
用javascript实现改变TEXTAREA滚动条和按钮的颜色,以及怎样让滚动条变得扁平
Apr 20 Javascript
JavaScript脚本语言在网页中的简单应用
May 13 Javascript
JavaScript XML操作 封装类
Jul 01 Javascript
jQuery 学习6 操纵元素显示效果的函数
Feb 07 Javascript
js导出table数据到excel即导出为EXCEL文档的方法
Oct 10 Javascript
Jquery搜索父元素操作方法
Feb 10 Javascript
四种参数传递的形式——URL,超链接,js,form表单
Jul 24 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
Sep 22 Javascript
axios中cookie跨域及相关配置示例详解
Dec 20 Javascript
实例讲解vue源码架构
Jan 24 Javascript
微信小程序云开发详细教程
May 16 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 Javascript
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类
2006/07/15 PHP
在PHP中读取和写入WORD文档的代码
2008/04/09 PHP
ThinkPHP中Session用法详解
2014/11/29 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
PHP生成zip压缩包的常用方法示例
2019/08/22 PHP
Notify - 基于jquery的消息通知插件
2011/10/18 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
利用进制转换压缩数字函数分享
2014/01/02 Javascript
详解JavaScript中的异常处理方法
2015/06/16 Javascript
JavaScript的Backbone.js框架环境搭建及Hellow world示例
2016/05/07 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
详解基于webpack搭建react运行环境
2017/06/01 Javascript
通过button将form表单的数据提交到action层的实例
2017/09/08 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
JS中通过url动态获取图片大小的方法小结(两种方法)
2018/10/31 Javascript
vue项目中定义全局变量、函数的几种方法
2019/11/08 Javascript
小程序使用分包的示例代码
2020/03/23 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
go和python调用其它程序并得到程序输出
2014/02/10 Python
python中enumerate的用法实例解析
2014/08/18 Python
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python sklearn KFold 生成交叉验证数据集的方法
2018/12/11 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
彪马土耳其官网:PUMA土耳其
2019/07/14 全球购物
集体婚礼证婚词
2014/01/13 职场文书
初中同学聚会感言
2014/02/11 职场文书
生物工程专业求职信
2014/09/03 职场文书
2014年财政工作总结
2014/12/10 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
2015年控辍保学工作总结
2015/05/18 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python
Mysql数据库命令大全
2021/05/26 MySQL
一次Mysql update sql不当引起的生产故障记录
2022/04/01 MySQL