博客列表 >组件的知识

组件的知识

手机用户1607314868
手机用户1607314868原创
2021年01月21日 00:02:15569浏览

组件

组件:从形式上看就是一个自定义html标签
组件是可复用的vue实例,是构造函数vue的子类

  1. <div id="root">
  2. <child-component></child-component>
  3. </div>
  4. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  5. <script>
  6. //1.创建
  7. const childComponent =Vue.extend({
  8. template:`<h2>hello world</h2>`,
  9. });
  10. //2.注册
  11. // 使用 vue.component(组件名,是对象字面量表示的组件配置项)使用静态方式注册的称为 全局组件,全局组件声明在vue实例外部。通常一个项目只有一个vue实例,所以尽可能不要用全局组件
  12. //组件名:自定义的html标签
  13. Vue.component("child-component",childComponent);
  14. // 3.挂载
  15. const vm=new Vue({
  16. //挂载点:是隐式声明的组件
  17. el:'#root',
  18. //组件声明形式是中间用 -
  19. });
  20. </script>
局部组件

局部组件只属于某个实例

  1. <div id="root">
  2. <my-child></my-child>
  3. </div>
  4. <script>
  5. //局部组件只属于某个实例
  6. const vm=new Vue({
  7. el:"#root",
  8. //局部组件是属于vue实例的
  9. components:{
  10. //属性不用加双引号 my-child可以写成 myChild 不加双引号
  11. "my-child":{
  12. template:`<p>hello {{site}}</p>`,
  13. data(){
  14. return {
  15. site:"php中文网",
  16. }
  17. }
  18. }
  19. }
  20. });
  21. </script>

组件之间的传参

1.父组件向子组件传参
父组件是通过自定义属性的方式将参数传到子组件中

  1. <div id="app">
  2. <!-- 绑定usernamew属性 -->
  3. <btn-inc :usernamew="username"></btn-inc>
  4. </div>
  5. <script>
  6. const vm=new Vue({
  7. el:"#app",
  8. data(){
  9. return {
  10. username:"播放",
  11. }
  12. },
  13. //局部组件
  14. components:{
  15. btnInc:{
  16. //自定义属性
  17. props:['usernamew'],
  18. template:`<span>{{usernamew}}</span>`,
  19. },
  20. },
  21. }),
  22. </script>

2.子组件向父组件传参
子组件向父组件传参是通过同名事件来实现的

  1. <btn-inc :usernamew="username" :my-count="count" @click-count="handle"></btn-inc>
  2. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  3. <script>
  4. const vm=new Vue({
  5. el:"#app",
  6. data(){
  7. return {
  8. username:"播放",
  9. count:0,
  10. }
  11. },
  12. //局部组件
  13. components:{
  14. btnInc:{
  15. //自定义属性
  16. props:['usernamew',"myCount"],
  17. //$emit(父组件中要使用的方法名称,子组件要传给父组件的值)
  18. template:`<div><button @click="$emit('click-count',10)>点赞:+{{myCount}}</button><span>{{usernamew}}</span></div>`,
  19. },
  20. },
  21. methods:{
  22. handle(value){
  23. this.count+=value;
  24. },
  25. },
  26. }),
  27. </script>

子组件和父组件的双向数据绑定

  1. <div id="app">
  2. <p>父组件:{{price}}元</p>
  3. <span>子主件</span>
  4. <my-input :my-price="price" @input-text="handle"> </my-input>
  5. </div>
  6. <script>
  7. const vm=new Vue({
  8. el:"#app",
  9. data(){
  10. return{
  11. price:4567,
  12. };
  13. },
  14. //主件
  15. components:{
  16. "my-input":{
  17. props:['my-price'],
  18. template:`<input type="text" value="myPrice" @input="$emit('input-text',$event.target.value)" >`,
  19. methods:{
  20. handle(value){
  21. this.price=value;
  22. }
  23. },
  24. },
  25. },
  26. methods:{
  27. handle(value){
  28. this.price=value;
  29. }
  30. }
  31. });
  32. </script>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议