组件中 子给父传值

html 代码:

      <div id='app'>
          <my-father></my-father>
    </div>

js代码:

  <script src='js/vue.js'></script> 
   <script>
   Vue.component("my-father",{
       template:`
         <div>
           <h1>{{mess}}</h1>
           <my-child @send='rcvMsg'></my-child>
         </div>
       `,
       data:function(){
           return{
               mess:''
           }
       },
       methods:{
           rcvMsg:function(txt){
               this.mess=txt
           }
       }
   })
   
   Vue.component('my-child',{
       template:`
            <button @click='sendToFather'>传给父元素</button>
         `,
       data:function(){
           return{
               msg:'我是子组件中的数据,要给父组件传值'
           }
       },
         methods:{
         sendToFather:function(){
//                 this.$emit('自定义事件名',要传输的数据)
               this.$emit('send',this.msg)
         }  
       }
   })
   
   
   new Vue({
       el:"#app"
   })
</script>

效果图:

14a6b88c-9881-4551-9d9c-d85f95de66f2.png

当点击按钮,子组件中的内容会传给父组件


e363710d-9666-4c47-a790-b29d460b88a6.png

小练习

效果图:

6578589b-11fb-48a3-95d8-82b192c6b562.png

在输入框里输入内容后,点击按钮 输入内容就显示在父组件里了,


340168bb-53fb-4d31-9352-038fa1935da6.png

html代码:

  <div id='app'>
       <my-father></my-father>
 </div>

js 代码:

      <script src='vue.js'></script>
<script>
    Vue.component("my-father",{
        template:`
            <div>
              <h1>我是父组件</h1>
              <p>子组件传过来的数据:<b>{{mess}}</b></p>
              <my-child @send='rcvMsg'></my-child>
            </div>
         `,
        data:function(){  
            return{
                mess:''
            }
        },
        methods:{
            rcvMsg:function(txt){
                this.mess=txt
            }
        }
    })
    
    Vue.component('my-child',{
        template:`
         <div>
            <h1>我是子组件</h1>
            <input type='text' v-model='msg'> <button @click='sendMsg'>发送</button>
         </div>
        `,
        data:function(){
            return{
                msg:''
            }
        },
        methods:{
            sendMsg:function(){
                this.$emit('send',this.msg)
            }
        }
    })
    
   new Vue({
       el:'#app'
   })
</script>

子传父 对话小练习:


35f685a0-753b-410d-8aeb-c40a00117bcd.png

html代码如下:

 <div id='app'>
   <chat-room></chat-room>
 </div>

js代码如下:

  <script src='vue.js'></script>
  <script>
    Vue.component('chat-room',{
        template:`
          <div>
             <ul>
                <li v-for="(value,index) in chatcont">{{value}}</li>
             </ul>
             <user @send='rcvMsg' userName='jack'></user>
             <user @send='rcvMsg' userName='rose'></user>
           </div>
        `,
        data:function(){
            return{
                chatcont:[],
               
            }
        },
        methods:{
           rcvMsg:function(txt){
            
               this.chatcont.push(txt)
           }
        }
    })
    
    Vue.component('user',{
        props:['userName'],
        template:`
         <div>
           <label>{{userName}}</label>
           <input type='text' v-model='msg'>
           <button @click='sendMsg'>发送</button>
        </div>
        `,
        data:function(){
            return{
                msg:''
            }
        },
        methods:{
            sendMsg:function(){
                this.$emit('send',this.userName+":"+this.msg)
            }
        }
    })
   new Vue({
       el:'#app'
   })
</script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 您将在本文当中了解到,往网页中添加数据,从传统的dom操作过渡到数据层操作,实现同一个目标,两种不同的方式....
    itclanCoder阅读 26,121评论 1 12
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,050评论 3 119
  • 云彩不需太多, 几多就好。 心情不必多好, 只要开心就好。 一个人, 也可以独自走下去。 生活可能缺少趣味, 但那...
    Knight超越哥阅读 2,241评论 0 0
  • 今天晚上昊天当了我的体育老师。饭后孩子提议出去散步,我们在雨后凉凉的秋风中漫步,走了一圈回到家,昊天说:“妈...
    昊天妈妈阅读 1,586评论 0 0
  • 犹豫了很久,还是播放了这部电影——《一个叫欧维的男人决定去死》,光听名字,完全想象不出这会是一部怎么样的电影。当一...
    小行星七号阅读 3,693评论 0 0