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 相关文章推荐
用window.location.href实现刷新另个框架页面
Mar 07 Javascript
Jquery中增加参数与Json转换代码
Nov 20 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
js图片模糊切换显示特效的方法
Feb 17 Javascript
jQuery源码解读之removeClass()方法分析
Feb 20 Javascript
js利用正则表达式检验输入内容是否为网址
Jul 05 Javascript
ES6入门教程之Class和Module详解
May 17 Javascript
浅谈webpack-dev-server的配置和使用
May 17 Javascript
vue excel上传预览和table内容下载到excel文件中
Dec 10 Javascript
JS script脚本中async和defer区别详解
Jun 24 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
Nov 02 Javascript
vue+echarts实现多条折线图
Mar 21 Vue.js
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
smarty内置函数foreach用法实例
2015/01/22 PHP
thinkphp5 migrate数据库迁移工具
2018/02/20 PHP
用 javascript 实现的点击复制代码
2007/03/24 Javascript
CLASS_CONFUSION JS混淆 全源码
2007/12/12 Javascript
JSQL 基于客户端的成绩统计实现方法
2010/05/05 Javascript
js 多种变量定义(对象直接量,数组直接量和函数直接量)
2010/05/24 Javascript
js正文内容高亮效果的实现方法
2013/06/30 Javascript
js判断字符长度以及中英文数字等
2013/12/31 Javascript
jQuery简易图片放大特效示例代码
2014/06/09 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
jQuery实现宽屏图片轮播实例教程
2015/11/24 Javascript
js接收并转化Java中的数组对象的方法
2016/08/11 Javascript
JS实现的五级联动菜单效果完整实例
2017/02/23 Javascript
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
vue嵌套路由与404重定向实现方法分析
2018/05/04 Javascript
使用async await 封装 axios的方法
2018/07/09 Javascript
react native 文字轮播的实现示例
2018/07/27 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
解决小程序无法触发SESSION问题
2020/02/03 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
python的keyword模块用法实例分析
2015/06/30 Python
python Matplotlib画图之调整字体大小的示例
2017/11/20 Python
利用Python如何实现一个小说网站雏形
2018/11/23 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
从零实现一个自定义html5播放器的示例代码
2017/08/01 HTML / CSS
HTML5实现无刷新修改URL的方法
2019/11/14 HTML / CSS
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
师范大学毕业自我鉴定
2013/11/21 职场文书
优秀实习生感言
2014/03/01 职场文书
医院护士工作检讨书
2014/10/26 职场文书
傲慢与偏见电影观后感
2015/06/10 职场文书
圣诞晚会主持词
2015/07/01 职场文书