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 相关文章推荐
Jquery命名冲突解决的五种方案分享
Mar 16 Javascript
ES6中如何使用Set和WeakSet
Mar 10 Javascript
Javascript中常用类型的格式化方法小结
Dec 26 Javascript
详解网站中图片日常使用以及优化手法
Jan 09 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
Mar 21 Javascript
Flask中获取小程序Request数据的两种方法
May 12 Javascript
详谈js对url进行编码和解码(三种方式的区别)
Aug 16 Javascript
微信小程序缓存过期时间的使用详情
May 12 Javascript
基于Fixed定位的框选功能的实现代码
May 13 Javascript
Vue中util的工具函数实例详解
Jul 08 Javascript
js通过循环多张图片实现动画效果
Dec 19 Javascript
vue路由权限校验功能的实现代码
Jun 07 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
图象函数中的中文显示
2006/10/09 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
php动态实现表格跨行跨列实现代码
2012/11/06 PHP
PHP 安全检测代码片段(分享)
2013/07/05 PHP
php中简单的对称加密算法实现
2017/01/05 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
jquery快捷动态绑定键盘事件的操作函数代码
2013/10/17 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
jquery实现弹出层登录和全屏层注册特效
2015/08/28 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jQuery计算文本框字数及限制文本框字数的方法
2016/03/01 Javascript
Bootstrap每天必学之导航组件
2016/04/25 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
xmlplus组件设计系列之网格(DataGrid)(10)
2017/05/05 Javascript
angular 用拦截器统一处理http请求和响应的方法
2017/06/08 Javascript
vue 国际化 vue-i18n 双语言 语言包
2018/06/07 Javascript
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
实例讲解React 组件
2020/07/07 Javascript
Vue登录拦截 登录后继续跳转指定页面的操作
2020/08/04 Javascript
python多线程抓取天涯帖子内容示例
2014/04/03 Python
Python操作mongodb数据库的方法详解
2018/12/08 Python
python+pyqt5编写md5生成器
2019/03/18 Python
python实现文字版扫雷
2020/04/24 Python
Python实现读取并写入Excel文件过程解析
2020/05/27 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
Ray-Ban雷朋瑞典官方网站:全球领先的太阳眼镜品牌
2019/08/22 全球购物
C++:memset ,memcpy和strcpy的根本区别
2013/04/27 面试题
数据库设计的包括哪两种,请分别进行说明
2016/07/15 面试题
党员入党表决心的话
2014/03/11 职场文书
销售会计岗位职责
2014/03/15 职场文书
企业人事任命书
2014/06/05 职场文书
食品委托检验协议书范本
2014/09/12 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技