问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

vue2.0组件表单怎么向父组件传递数据

发布网友 发布时间:2022-05-01 20:19

我来回答

2个回答

懂视网 时间:2022-05-14 18:09

本篇文章给大家带来的内容是关于Vue2.0中组件的继承与扩展(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

本文将介绍vue2.0中的组件的继承与扩展,主要分享slot、mixins/extends和extend的用法。

一、slot

1.默认插槽和匿名插槽

slot用来获取组件中的原内容,此方式用于父组件向子组件传递“标签数据”。有的时候为插槽提供默认的内容是很有用的,例如,一个<my-hello> 组件可能希望这个按钮的默认内容是“如果没有原内容,则显示该内容”,但是同时允许用户覆写为别的内容。

<body>
 <div id="itany">
 <my-hello>180812</my-hello>
 </div>
<template id="hello">
 <div>
 <h3>welcome to xiamen</h3>
 <slot>如果没有原内容,则显示该内容</slot>// 默认插槽
 </div>
</template>
<script>
 var vm=new Vue({
 el:'#itany',
 components:{
 'my-hello':{
 template:'#hello'
 }
 }
 }); 
</script>

795687625-5bbe20ffd96d0_articlex.png

2.具名插槽

有些时候我们需要多个插槽,<slot> 元素有一个特殊的特性:name。这个特性可以用来定义额外的插槽:

<div id="itany">
 <my-hello>
 <ul slot="s1">
 <li>aaa</li>
 <li>bbb</li>
 <li>ccc</li>
 </ul>
 <ol slot="s2">
 <li>111</li>
 <li>222</li>
 <li>333</li>
 </ol>
 </my-hello>
</div>
<template id="hello">
 <div>
 <slot name="s2"></slot>
 <h3>welcome to xiamen</h3>
 <slot name="s1"></slot>
 </div>
</template>
<script>
 var vm=new Vue({
 el:'#itany',
 components:{
 'my-hello':{
  template:'#hello'
 }
 }
 }); 
</script>

3053502272-5bbe20ffd8f58_articlex.png

二、mixins

1.mixins简介

混入 (mixins) 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。mixins 选项接受一个混合对象的数组。

2.mixins用途

一般有两种用途:

1、在你已经写好了构造器后,需要增加方法或者临时的活动时使用的方法,这时用混入会减少源代码的污染。

2、很多地方都会用到的公用方法,用混入的方法可以减少代码量,实现代码重用。

例如下面的例子:实现每次数据变化时都能够在控制台打印出提示:"数据发生变化"

 <h1>Mixins</h1>
 <hr>
 <div id="app">
 <p>num:{{ num }}</p>
 <P>
  <button @click="add">增加数量<tton>
 </P>
 </div>
 <script type="text/javascript">
 var addLog = { //额外临时加入时,用于显示日志
  updated: function () {
  console.log("数据发生变化,变化成" + this.num + ".");
  }
 }
 Vue.mixin({// 全局注册一个混入,影响注册之后所有创建的每个 Vue 实例
  updated: function () {
  console.log("我是全局的混入")
  }
 })
 var app = new Vue({
  el: '#app',
  data: {
  num: 1
  },
  methods: {
  add: function () {
   this.num++;
  }
  },
  updated() {
  console.log("我是原生的update")
  },
  mixins: [addLog]//混入
 })

2615240520-5bbe20ffed9c8_articlex.gif

3.mixins的调用顺序

上例说明了:从执行的先后顺序来说,混入对象的钩子将在组件自身钩子之前调用,如果遇到全局混入(Vue.mixin),全局混入的执行顺序要前于混入和组件里的方法。

三、extends

1.extends用法

extends选项允许声明扩展另一个组件,而无需使用 Vue.extend
通过外部增加对象的形式,对构造器进行扩展。它和混入mixins非常的类似。只不过接收的参数是简单的选项对象或构造函数,所以extends只能单次扩展一个组件。

 <h1>Extends</h1>
 <hr>
 <div id="app">
 num:{{ num }}
 <p>
  <button @click="add">add</button>
 </p>
 </div>
 <script type="text/javascript">
 var bbb = {
  updated() {
  console.log("我是被扩展出来的");
  },
  methods: {
  add: function () { //跟原生的方法冲突,取原生的方法,这点跟混入一样
   console.log('我是被扩展出来的add方法!');
   this.num++;
  }
  }
 };
 var app = new Vue({
  el: '#app',
  data: {
  num: 1
  },
  methods: {
  add: function () {
   console.log('我是原生add方法');
   this.num++;
  }
  },
  updated() {
  console.log("我是扩展出来的");
  },
  extends: bbb// 接收对象和函数
 })

2496630468-5bbe20fff14ad_articlex.gif

从上面的例子也可看出,执行的先后顺序和mixins一样,另外扩展的方法与原生的冲突时,扩展的方法不生效,这点跟混入一样。

2.extends和mixins优先级比较

 var extend={
 data:{extendData:'我是extend的data'},
 created:function(){
 console.log('这是extend的created');
 }
 }
 var mixin={
 data:{mixinData:'我是mixin的data'},
 created:function(){
 console.log('这是mixin的created');
 }
 }
 var vm=new Vue({
 el:'#app',
 data:{mixinData:'我是vue实例的data'},
 created:function(){
 console.log('这是vue实例的created');
 },
 methods:{
 getSum:function(){
 console.log('这是vue实例里面getSum的方法');
 }
 },
 mixins:[mixin],
 extends:extend
 })

2237295524-5bbe20ffd7d96_articlex.png

由此可以得出,相对于mixins,extends触发的优先级更高

四、extend

Vue.extend只是创建一个构造器,它是为了创建可复用的组件。其主要用来服务于Vue.component,用来生成组件

<div id="itany">
 <hello></hello>
 <my-world></my-world>
 </div>
 <script>
 /**
  * 方式1:先创建组件构造器,然后由组件构造器创建组件
  */
 //1.使用Vue.extend()创建一个组件构造器
 var MyComponent = Vue.extend({
  template: '<h3>Hello World</h3>'
 });
 //2.使用Vue.component(标签名,组件构造器),根据组件构造器来创建组件
 Vue.component('hello', MyComponent);
 /**
  * 方式2:直接创建组件(推荐)
  */
 // Vue.component('world',{
 Vue.component('my-world', {
  template: '<h1>你好,世界</h1>'
 });
 var vm = new Vue({ //这里的vm也是一个组件,称为根组件Root
  el: '#itany',
  data: {}
 }); 
 </script>

热心网友 时间:2022-05-14 15:17

子组件在props中定义数据,然后父组件传数据过去,例如: 子组件: props: { show: { default: false } } 父组件: //test是子组件名字 parentShow是父组件定义的data数据
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
小孩子的谜语有哪些? 高频UPS不间断电源厂家有推荐的吗? 农历 女:1986-10-16 属虎,男 1985-02-11 属牛,想在2013 年结婚,请问... ...12月21日出生属牛,女阴历1986年10月20日出生属虎,请问2012上半年哪天... 男属牛农历1985年正月16日生日,女属虎1986年10月26日生日,今年九月份左 ... ...属牛 女方:1986年农历10月20日 属虎 11年4月或5月结婚有合适的日子吗... 凌云诺怎么查看技能信息 凌云诺如何查看技能信息 凌云诺查看品阶福利的操作方法 凌云诺怎么查看品阶福利 凌云诺怎么查看本周个人活跃度 凌云诺查看本周个人活跃度的方法_百度... 深圳宝安正规医院割痔疮要多少钱 求真正免费在线电影网站 如何在用迅雷下载视频文件时排除菜牙电影网的干扰 菜牙电影网非激活状态怎样激活? 菜牙电影网 非激活状态怎么激活? 总是失眠脸上长痘痘了怎么办 iphone6右上角这个箭头旁边那个小图标是什么意思,怎么去掉 菜牙电影网怎么注册 菜牙电影网忘记密码怎么办 iphone6左上角有个箭号圈一直再转 微信上怎么查看好友带图片的文章 花的日记怎么写 2019微博之夜有直播吗? 写花日记 浙江卫视有2019年微博之夜直播吗 写花的日记、 小学一年级下册描写花的作文80个字左右 小学生写花的日记 小学一年级写花的日记 小学生三年级写花的日记 经典感人台词,(不要中国,不要复制的,最好是电影的台词)加出处 泡菜电影网址是多少 经常熬夜休息不好,脸上长痘痘该怎么样? 求教,如何用vuejs实现更好的Form validation 睡觉晚和脸上起痘痘有关系吗? 王者荣耀微信能隐身吗?微信隐身功能怎么用? 王者荣耀怎么不让微信好友看见 王者荣耀怎样让微信好友看不见自己 王者荣耀微信能隐身吗 2ne1《我最红》里cl的牛角发型怎么做的? 怎样在同一部手机上用两个微信!怎么才能下载另一个! 个体户装卸搬运的经营范围怎么写 注册个体工商户,经营范围可以从事快递、货运吗 个体工商户需要怎样填写经营范围才能开物流物流服务费、收派服务费? 关于个体工商户经营范围 怎样在同一部手机上用两个微信!怎么才能下载另一个! 苹果手机微信分身下载成功能立马加好友不? padmini开机就重启开机就重启打不开机是什么原因? iPad老是重启,怎么也开不了机,怎么办,求大神 iPad电量耗尽后充不了电开不了机,还无限反复重启是什么原因?怎么解决?求解!!! 笔记本电脑连投影仪需要装驱动吗