zoukankan      html  css  js  c++  java
  • 6.组件(3) 之 子级传父级

    面试会问:
    ***双向数据绑定(数据和视图) v-model
    ***单向数据流动(父级数据和子级数据的流动)
      数据从父级流向子级,数据本身还是父级的。如果操作子级要改变父级的数据,
      只能通过子级告知父级要操作哪个数据,然后让父级去修改数据。(简单点说:子级不能修改父级的数据,让父级改子级的数据)
    子传父:
    1.在子组件上绑定一个自定义事件,并且传入父级的“事件”处理函数
    比如:
      <ppa @changeboolean='changC'>
      @changeboolean 是子组件定义的
      changC 父组件中定义的
     
    2.在子组件内部监听这个自定义的事件(满足自定义函数的条件就执行)
      this.$emit(自定义的事件名,参数)
    比如:
      change(){
        this.$emit('changeboolean',id,xx)
      }
     
    例子:DOM部分:
    <div id="app">
      <input type="text" v-model='val' @keyup.13='add'>
      {{arr}}
      <hr>
      <h2>子组件</h2>
      <list :data='arr' @changboolean='changeC'></list>  //1
    </div>

    script部份:

    let obj = {
        template:`
            <div>
                <ul>
                    <li v-for='(val,key) in data'>
                        <input type='checkbox' 
                            @change='change(val.id,$event)'    //传入(id,事件源)
                        >
                        <span>{{val.txt}}</span>
                    </li>
                </ul>
            </div>
        `,
        props:{
            data:{
                type:Array, 
                default:[] 
            }
        },
        methods:{
            change(id,ev){ //接收到(id,事件源)
                //console.log(ev.target.checked)
                this.$emit('changboolean',id,ev.target.checked)  //2  自定义了一个函数,并且传入实参(id,事件源的布尔值)
            }
        }
    }
    Vue.component('list',obj);
    new Vue({
        el:'#app',
        data:{
            val:'',
            arr:[
            {
                id:1,
                txt:'郭德纲',
                checked:false
            },
            {
                id:2,
                txt:'于谦',
                checked:false
            },
            {
                id:3,
                txt:'周杰伦',
                checked:false
            }
            ]
        },
        methods:{
            add(){
                this.arr.push({
                    id:+new Date,
                    txt:this.val,
                    checked:false       
                });
                this.val = ''
            },
            changeC(id,bool){  //父级接收到数据(id,布尔值),并进行处理】
                this.arr.forEach(e=>{
                    if(e.id==id){
                        e.checked = bool;
                    };
                });
            }
        }
    })
  • 相关阅读:
    easy ui 表单ajax和from两种提交数据方法
    easy ui 下拉级联效果 ,下拉框绑定数据select控件
    easy ui 下拉框绑定数据select控件
    easy ui 异步上传文件,跨域
    easy ui 菜单和按钮(Menu and Button)
    HTTP 错误 404.3
    EXTJS4.2 后台管理菜单栏
    HTML 背景图片自适应
    easy ui 表单元素input控件后面加说明(红色)
    EXTJS 4.2 添加滚动条
  • 原文地址:https://www.cnblogs.com/MrZhujl/p/10226068.html
Copyright © 2011-2022 走看看