Vue基础4-组件及refs用法


组件

  组件是可复用的 Vue 实例,且带有一个名字,我们可以在一个通过 new Vue 创建的 Vue 根实例中,把这个组件作为自定义元素来使用。组件将css、js、html封装到一起。直接引用使用。

 

  全局组件

 1 <div id="app">
 2     <demo></demo>
 3     <demo></demo>
 4     <demo></demo>
 5 </div>
 6 
 7 //全局组件  8     Vue.component('demo',{  9         template:'<h1 @click="change">{{msg}}</h1>', 10         //组件中data必须是方法 return属性值 11  data:function () { 12             return { 13                 msg:'msg'
14  } 15  }, 16  methods:{ 17  change:function () { 18                 this.msg = 'test'
19  } 20  } 21  }); 22  new Vue({ 23         el:'#app'
24     })

组件中的data属性必须是一个函数,这样可以根据作用域将每个组件的数据进行隔离,不会出现多组件复用,数据相同的问题。

组件中的props属性可以接收组件在引用时传递的变量

组件中的template,模板属性

父组件:vue实例化接管的div 就是父组件

子组件:在父组件即app 这个div标签内部引用了全局组件中定义的组件,即为子组件

 

refs用法:通过给标签定义ref属性

 1 <div id="app">
 2     <div ref="test">ref=test</div>
 3     <input type="button" value="test" @click="change">
 4 </div>
 5 
 6 new Vue({  7         el:'#app',  8  data:{  9  }, 10  methods:{ 11  change:function () { 12                 this.$refs.innerText = '已被修改'
13  } 14  } 15     })

refs类似与dom操作的document.getElementByID的操作,可以获取到元素的属性(能获取就能修改),但是由于Vue中都是对于data数据进行操作,一般用来和组件一起使用

运用的例子:两个子组件和一个父组件,点击子组件的数字,子组件数字自增1,点击修改button实现点击两个子组件数字相加

 1 <div id="app">
 2     <test ref="a"></test>
 3     <test ref="b"></test>
 4     //父组件只能使用父组件的data.count属性  5     <div>父组件--<span>{{count}}</span></div>
 6     <input type="button"  value="test" @click="change">
 7 </div>
 8 
 9 //全局组件 10     Vue.component('test',{ 11         template:'<div>子组件--<span @click="add">{{number}}</span></div>', 12  data:function () { 13             return{ 14  number:0 15  } 16  }, 17  methods:{ 18  add:function () { 19                 this.number++
20  } 21  } 22  }); 23  new Vue({ 24         el:'#app', 25  data:{ 26  count:0 27  }, 28  methods:{ 29  change:function () { 30                 this.count = this.$refs.a.number +this.$refs.b.number; 31  } 32  } 33     })

 

父子组件交互(子组件触发父组件)

  实现一个例子:两个子组件一个父组件,点击子组件数字,子组件数字自增1,子组件每次变化,父组件的数字都自动将两个子组件数字相加,即子组件变化自动触发父组件 

 1 <div id="app">
 2     <demo @xxxx="addCount"></demo>
 3     <demo @xxxx="addCount"></demo>
 4     <div>父组件--<span>{{count}}</span></div>
 5 </div>
 6 <script src="../js/vue.js"></script>
 7 <script>
 8     Vue.component('demo',{  9         template:'<div>子组件---<span @click="add">{{num}}</span></div>', 10  data:function () { 11             return{ 12  num:0 13  } 14  }, 15  methods:{ 16  add:function () { 17                 this.num++; 18                 //子组件向父组件触发xxxx事件,且可以向父组件传递多个子组件参数 19                 this.$emit('xxxx',this.num) 20  } 21  } 22  }); 23  new Vue({ 24         el:'#app', 25  data:{ 26  count:0 27  }, 28  methods:{ 29  addCount:function (num) { 30                 this.count += num 31  } 32  } 33  }) 34 </script>

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM