vue -父子组件和ref实例详解

  

        & lt; div id=坝τ谩北?   & lt; !——父组件,可以在引用子组件的时候,通过属性绑定(v-bind:)的形式,把需要传递给子组件的数据,以属性绑定的形式,传递到子组件内部,供子组件使用——比;   & lt; com1 v-bind: parentmsg=拔毒弊4? lt;/com1>   & lt;/div>//创建Vue实例,得到视图模型   var vm=new Vue ({   埃尔:“#应用”,   数据:{   味精:“123啊,父组件中的数据的   },   方法:{},   组件:{//结论:经过演示,发现,子组件中,默认无法访问到父组件中的数据上的数据和方法中的方法   com1: {   数据(){//注意:子组件中数据的数据,并不是通过父组件传递过来的,而是子组件自身私有的,比如:子组件通过Ajax,请求回来的数据,都可以放身到数据上;//数据上的数据,都是可读可写的;   返回{   标题:“123”,   内容:“回调”   }   },   模板:“& lt; h2 @click=案谋洹痹谡馐亲幼榧? - - - - - {{parentmsg}} & lt;/h2>”,//注意:组件中的所有道具中的数据,都是通过父组件传递给子组件的//道具中的数据,都是只读的,无法重新赋值   道具:[' parentmsg ']//把父组件传递过来的parentmsg属性,先在道具数组中,定义一下,这样,才能使用这个数据,只读,写的话会报警告   指示:{},   过滤器:{},   组件:{},   方法:{   改变(){   这一点。parentmsg='被修改了的   }   }   }   }   });      

  

        & lt; div id=坝τ谩北?   & lt; !——父组件向子组件传递方法,使用的是事件绑定机制,v,当我们自定义了一个事件属性之后,那么,子组件就能够,通过某些方式,来调用传递进去的这个方法了——比;   & lt; com2 @func="显示"祝辞& lt;/com2>   & lt;/div>   & lt;模板id=皌mpl”比;   & lt; div>   & lt; h2>这是子组件& lt;/h2>   & lt;输入类型="按钮" value=" https://www.yisu.com/zixun/这是子组件中的按钮,点击它,触发父组件传递过来的func方法”@click=癿yclick”比;   & lt;/div>   & lt;/template>//定义了一个字面量类型的组件模板对象   var com2={   模板:“# tmpl ',//通过指定了一个Id,表示说,要去加载这个指定Id的模板元素中的内容,当作组件的HTML结构   数据(){   返回{   sonmsg:{的名字:“小头儿子”,年龄:6}   }   },   方法:{   myclick () {//当点击子组件的按钮的时候,如何拿到父组件传递过来的func方法,并调用这个方法? ? ?//释放英文原意:是触发,调用,发射的意思//这个。释放美元(“func123”, 123年,456年)   这一点。发出(“函数”,this.sonmsg)美元   }   }   }//创建Vue实例,得到视图模型   var vm=new Vue ({   埃尔:“#应用”,   数据:{   datamsgFormSon:零   },   方法:{   展示(数据){//控制台。日志(“调用了父组件身上的显示方法:——“+数据)   console.log(数据);   这一点。datamsgFormSon=数据   }   },   组件:{   com2//com2: com2   }   });      

  

难道在于理解父组件向子组件传方法

  

        & lt; div id=坝τ谩北?   & lt; cmt-box @func=" loadComments "祝辞& lt;/cmt-box>   & lt; ul类="列表组"比;   & lt;李类=" list-group-item " v=跋钅苛斜怼?关键=癷tem.id”比;   & lt;跨类=盎照隆弊4瞧缆廴?{{项目。用户}}& lt;/span>   {{项目。内容}}   & lt;/li>   & lt;/ul>   & lt;/div>   & lt;模板id=皌mpl”比;   & lt; div>   祝辞& lt; div class="形式的班级”;   & lt; label>评论人:& lt;/label>   & lt;输入类型=拔谋尽崩?v模型“表单控件”=坝没А痹?   & lt;/div>   祝辞& lt; div class="形式的班级”;   & lt; label>评论内容:& lt;/label>   & lt; textarea类=v模型“表单控件”=澳谌荨弊4? lt;/textarea>   & lt;/div>   祝辞& lt; div class="形式的班级”;   & lt;输入类型="按钮" value=" https://www.yisu.com/zixun/发表评论”类=癰tn btn-primary @click”=皃ostComment”比;   & lt;/div>   & lt;/div>   & lt;/template>   var commentBox={   数据(){   返回{   用户:”,   内容:“   }   },   模板:“# tmpl”,   方法:{   postComment(){//发表评论的方法//分析:发表评论的业务逻辑//1。评论数据存到哪里去? ? ?存放到了localStorage本地文件中。setItem (cmt,”)//2。先组织出一个最新的评论数据对象//3。想办法,把第二步中,得到的评论对象,保存到本地文件中://3.1 localStorage只支持存放字符串数据,要先调用JSON.stringify//3.2在保存最新的评论数据之前,要先从localStorage获取到之前的评论数据(字符串),转换为一个数组对象,然后,把最新的评论,推到这个数组//3.3如果获取到的localStorage中的评论字符串,为空不存在,则可以返回一个“[]”让JSON。解析去转换//3.4把最新的评论列表数组,再次调用JSON。stringify转为数组字符串,然后调用localStorage.setItem ()   var评论={id: Date.now(),用户:这个。用户,内容:这个。内容}//从localStorage中获取所有的评论   var=JSON.parse列表(localStorage.getItem (cmt) | |“[]”)   list.unshift(评论)//重新保存最新的评论数据   localStorage。setItem (cmt, JSON.stringify(列表)   这一点。用户=D谌?"////this.loadComments () & # 63; & # 63; & # 63; & # 63; & # 63;   美元。排放(函数的)   }   }   }//创建Vue实例,得到视图模型   var vm=new Vue ({   埃尔:“#应用”,   数据:{   列表:(   {id: Date.now()、用户:“李白”,内容:“天生我材必有用"},   {id: Date.now()、用户:“江小白”,内容:“劝君更尽一杯酒"},   {id: Date.now()、用户:“小马”,内容:“我姓马,风吹草低见牛羊的马'}   ]   },   beforeCreate(){//注意:这里不能调用loadComments方法,因为在执行这个钩子函数的时候,数据和方法都还没有被初始化好   },   创建(){   this.loadComments ()   },   方法:{   loadComments(){//从本地的localStorage中,加载评论列表   var=JSON.parse列表(localStorage.getItem (cmt) | |“[]”)   这一点。列表=}   },   组件:{   “cmt-box”: commentBox   }   });

vue -父子组件和ref实例详解