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 简单高效判断数据类型 系列函数 By shawl.qiu
Mar 06 Javascript
jquery 插件学习(五)
Aug 06 Javascript
js中将String转换为number以便比较
Jul 08 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
jQuery中outerWidth()方法用法实例
Jan 19 Javascript
JSON 必知必会 观后记
Oct 27 Javascript
echarts3 使用总结(绘制各种图表,地图)
Jan 05 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
使用React手写一个对话框或模态框的方法示例
Apr 25 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
Nov 01 Javascript
js实现弹窗效果
Aug 09 Javascript
Vue axios 跨域请求无法带上cookie的解决
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实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
PHP中strtr字符串替换用法详解
2014/11/26 PHP
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
javascript实现动态侧边栏代码
2014/02/19 Javascript
javascript笛卡尔积算法实现方法
2015/04/08 Javascript
浅析jquery与checkbox的checked属性的问题
2016/04/27 Javascript
jQuery+Ajax实现限制查询间隔的方法
2016/06/07 Javascript
浅谈在js传递参数中含加号(+)的处理方式
2016/10/11 Javascript
Vue.js开发环境快速搭建教程
2017/03/17 Javascript
JavaScript实现获取select下拉框中第一个值的方法
2018/02/06 Javascript
jQuery表单元素过滤选择器用法实例分析
2019/02/20 jQuery
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
node中实现删除目录的几种方法
2019/06/24 Javascript
Python中使用SAX解析xml实例
2014/11/21 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
PyCharm+Qt Designer+PyUIC安装配置教程详解
2019/06/13 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
Django Channels 实现点对点实时聊天和消息推送功能
2019/07/17 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
利用Vscode进行Python开发环境配置的步骤
2020/06/22 Python
Python分类测试代码实例汇总
2020/07/23 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
2021/01/15 Python
CSS3 毛玻璃效果
2019/08/14 HTML / CSS
客服部工作职责范本
2014/02/14 职场文书
环境建设实施方案
2014/03/14 职场文书
学校爱国卫生月活动总结
2014/06/25 职场文书
2014年护理工作总结范文
2014/11/14 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
活动经费申请报告
2015/05/15 职场文书
个人工作失误的保证书怎么写?
2019/06/21 职场文书
制定企业培训计划的五大要点!
2019/07/10 职场文书
javascript拖曳互换div的位置实现示例
2021/06/28 Javascript
Windows 64位 安装 mysql 8.0.28 图文教程
2022/04/19 MySQL