vue学习笔记(四)

组件

组件的使用主要分成了三个部分
1.创建组件构造器
调用Vue.extend()方法创建组件构造器
2.注册组件
调用Vue.component()方法注册组件
3.使用组件
在Vue实例范围内使用组件

** 1.组件的基本使用**

<div id="app">
    <div>
        <my-cpn></my-cpn>//3. 在Vue实例范围内使用组件,因为这个div的id是app已经注册实例了
    </div>
</div>
<script src="../js/vue.js"></script>
<script>
//1.调用Vue.extend()方法创建组件构造器
 const cnpC = Vue.extend({
         template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           '
     }//2.调用Vue.component()方法注册组件
Vue.component('my-cpn',cpnC)
//该方法需要传入两个参数,一个是你带回引用组件的自定义标签,一个是你的组件构造器的名字

  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     }
 })
</script>

2.全局组件和局部组件

<div id="app">
    <div>
        <my-cpn></my-cpn>//3. 在Vue实例范围内使用组件
        <cpn></cpn>
    </div>
</div>
<script src="../js/vue.js"></script>
<script>
//1.调用Vue.extend()方法创建组件构造器
 const cnpC = Vue.extend({
         template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           '
     }//2.调用Vue.component()方法注册组件
Vue.component('my-cpn',cpnC)
//注册的是一个全局组件!!!!,全局组件意味着可以在多个实例下引用

  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     },
   components:{
      cpn:Cpn
    }//局部注册 只能在app实例中引用!!!!!
 })
</script>

3.父组件和子组件

<div id="app">
    <div>
        <cpn2></cpn2>//会显示两个组件的内容
    </div>
</div>
<script src="../js/vue.js"></script>
<script>
//1创建第一个组件(子组件)
 const cnp1 = Vue.extend({
         template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           '
     }//2。创建第二个组件(父组件)
 const cnpC2 = Vue.extend({
         template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           ',
         components:{//组件构造器一放在了组件构造器二中进行注册!!
         //注意:在哪儿组册就只能在哪儿使用
            cpn1:Cpn1
            }
     }//2.调用Vue.component()方法注册组件
Vue.component('my-cpn',cpnC)

//app其实也是一个root组件 顶层组件
  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     },
     components:{
      cpn2:Cpn2//组件构造器二放在了app实例中注册!!!!!!!
    }
 })
</script>

4.组件的语法糖
其实就是一二步合并的写法,不再需要第一步组件构造器

//语法糖注册全局组件
  Vue.component('my-cpn',{
         template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           ,
  })

//语法糖注册局部组件
const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     },
   components:{
      'cpn':{template:'
             <div>
               <h2>hello</h2>
                <h2>i am zsy</h2>
                 <h2>thank you</h2>
             </div>
           '}
    }
 })

5.组件模板分离

写法一:

<div id="app">
    <div>
        <my-cpn></my-cpn>//3. 在Vue实例范围内使用组件,因为这个div的id是app已经注册实例了
    </div>
</div>

<script type="text/x-template" id = "my-cpn"> 
   <div>
       <h2>hello</h2>
       <h2>i am zsy</h2>
       <h2>thank you</h2>
    </div>
</script>

<script src="../js/vue.js"></script>

<script>
Vue.component('my-cpn':{
     template:'#my-cpn'
  })


  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     }
 })
</script>

写法2:

<div id="app">
    <div>
        <my-cpn></my-cpn>
    </div>
</div>

<template id= "my-cpn"> 
   <div>
       <h2>hello</h2>
       <h2>i am zsy</h2>
       <h2>thank you</h2>
    </div>
</template>

<script src="../js/vue.js"></script>

<script>
 
Vue.component('my-cpn':{
     template:'#my-cpn'
  })


  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     }
 })
</script>

6.父组件和子组件之间的通信
子组件不能直接引用父组件中,或者vue实例的数据。但是在开发中,往往一些数据确实需要从上层传到下层。
比如一个页面,我们请求到了大量数据,但是这些数据需要在子组件中展示,这时候不会让子组件自己发送一个网络请求给服务器端,而是直接让父组件传给子组件。

那么如何实现父组件和子组件之间的通信呢?vue提供给我们两种方式:
1.通过prop向子组件传递数据;
2.通过事件,向父组件发送消息。
在这里插入图片描述
vue实例本身可以看作是组件,在实际开发过程中,实例与子组件的通信与父子组件之间的通信相同。

1.props基本用法
在组件中使用选项props来声明需要从父级接受的数据
props的值有两种方式:
方式一:字符串数组,那么数组中的字符串就是传递时的名称
方式二:对象,对象可以设置传递时的类型,也可以设置默认值等。

方式一:

<div id="app">
   <cpn v-bind Movies="movies" Message="msg"></cpn>
</div>
<template id= "cpn"> 
   <div>
     {{Message}}//这样在子组件里面就可以用到实例的数据了
     <ul>
        <li v-for= "item in Movies">{{item}}</li>
     </ul>
    </div>
</template>


<script src="../js/vue.js"></script>
<script>
  const cpn={
  template:'#cpn',
  props:['Movies','Message'],//props可以是数组类型 上文我已经提及过了
  data(){
      }//组件里面可以定义实例的各种类型,data、methods等当然包括props
       }
  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world',
     movies:['海王','海贼王','海尔兄弟']
     },
   components:{
     cpn//增强写法
   }
 })
</script>

方式二:

<div id="app">
   <cpn v-bind Movies="movies" Message="msg"></cpn>
</div>
<template id= "cpn"> 
   <div>
     {{Message}}//这样在子组件里面就可以用到实例的数据了
     <ul>
        <li v-for= "item in Movies">{{item}}</li>
     </ul>
    </div>
</template>


<script src="../js/vue.js"></script>
<script>
  const cpn={
  template:'#cpn',
  props:{
       //1.类型限制
        Movies:Array,//验证类型为Array
        Message:string
        //2.设置默认值,以及必传值
        Message:{
            type:string,
            default:'aaaaa',
            require:true//加上require属性之后,表示使用该对象的时候必须传值否则会报错
         },
         Movies:{
           type:Array,
           default(){//注意!!如果是对象或者数组的话default必须写成函数形式
                return []
             }
        }
     },
  data(){
      }//组件里面可以定义实例的各种类型,data、methods等当然包括props
       }
  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world',
     movies:['海王','海贼王','海尔兄弟']
     },
   components:{
     cpn//增强写法
   }
 })
</script>

在这里插入图片描述
2.props中的驼峰标识

3.子组件向父组件传递消息(通过自定义消息)

//父组件模板,就用实例当作父组件
<div id="app">
    <div>
    <cpn v-on:item-click="cpnClick"></cpn>
    </div>
</div>

//子组件模板
<template id= "cpn"> 
   <div>
     <button v-for="item in categories">{{item.name}}</button>
    </div>
</template>

<script src="../js/vue.js"></script>
<script>
//子组件
 const cpn={
         template:'#cpn',
         data(){
             return {
                 categories:[
                       {id:"aaa",name:"热门推荐"}
                       {id:"bbb",name:"家用电器"}
                       {id:"ccc",name:"手机电脑"}
                       {id:"ddd",name:"美妆服饰"}
                    ]
              }
          },
          methods:{
               btnclick(item){
                      this.$emit("item-click",item);//子组件发射一个事件给父组件,第一个参数为事件名称(待会父组件需要监听这个事件),第二个参数是给父组件传递的东西
                }
          }
     }//父组件
  const app = new Vue({
   el: '#app',
   data: {
     msg:'hello world'
     },
     components:{
      cpn
    },
    methods:{
        cpnClick(){
            console.log("cpnClick")
         }
    }
 })
</script>

至此,父子组件通信就已经基本了解了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断路器保护灵敏度校验整改及剩余电流监测试点应用站用交流系统断

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值