vue組件

1.全局/局部組件

<whole></whole><moon></moon>

//下面是局部組件,局部組件需要在根組件中寫入
var moon={
    template:`<div><button @click="back">《=</button>局部組件<button >=》</button><img :src="url" alt=""></div>`,
    data(){return{url:'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'}},
    methods:{back(){console.log('局部組件back')}},
}
//下面是全局組件
Vue.component('whole',{
    template:`<div><button @click="back">《=</button>{{title}}<button >=》</button></div>`,
    data(){return {title:'我是全局組件'}},
    methods:{back(){console.log('back')}},
});
//根組件
let vm = new Vue({
    el: "#app",data: {},methods: {},computed:{},watch:{},
    components:{moon}//////////////這里面寫局部組件
})

2組件間通信
通信值父傳子

<moon :url='url'></moon>
//下面是局部組件
var moon={
    template:`<div><button @click="back">《=</button>局部局部<button >=》</button><img :src="url" alt=""></div>`,
    data(){return{}},
    methods:{back(){console.log('局部局部back')}},
    props:['url']
}
//根組件
let vm = new Vue({
    el: "#app",
    data: {url:'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'},
    methods: {},computed:{},watch:{},
    components:{moon}//////////////這里面寫局部組件
})

通信值子傳父


image-20230606115516512.png
接受到的子組件輸入的內(nèi)容是:{{username}}
<moon @myevent="handelEvent"></moon>

//下面是局部組件
var moon={
    template:`<div><button  @click="handleSend">《=</button>局部局部<button >=》</button><img :src="url" alt=""><br>
      <input type="text" v-model="username"></div>`,
    data(){return{url: 'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg',username: ''}},
    methods:{handleSend(){this.$emit('myevent', this.username)}},// 傳遞給父組件
    props:['url']
}
//根組件
let vm = new Vue({
    el: "#app",
    data: {url:'http://pic.imeitou.com/uploads/allimg/230331/7-230331110I0.jpg'},
    methods: {
        handelEvent(username) {
            console.log('父組件自定義事件的event執(zhí)行了');console.log(username)
            this.username = username
        }
    },computed:{},watch:{},
    components:{moon}//////////////這里面寫局部組件
})

3.ref屬性

# ref屬性,vue提供的,寫在標簽上
可以寫在普通標簽:在vue中使用 this.$refs.名字  拿到dom對象,可以原生操作
可以寫在組件上:在vue中使用 this.$refs.名字  拿到[組件]對象,組件屬性,方法直接使用即可

4動態(tài)組件

<button @click="who='home1'">1</button>
<button @click="who='home2'">2</button>
<button @click="who='home3'">3</button>
<component :is="who"></component>

var home1={template:`<h1>1</h1>`}
var home2={template:`<h1>2</h1>`}
var home3={template:`<h1>3</h1>`}
var vm=new  Vue({
    el:'#app',
    data:{who:'home1'},
    components:{home1,home2,home3}
})

4.1 keep-alive

<keep-alive> <component :is="who"></component></keep-alive>

5.插槽

使用步驟:
#1  在組件的html的任意位置,放個標簽
    <slot></slot>
# 2 后期在父組件使用該組件時
    <lqz>
    放內(nèi)容
    </lqz>
# 3 放的內(nèi)容,就會被渲染到slot標簽中

var lqz = {template: `<div><h1>我是一個組件</h1> <slot></slot><h2>我是組件內(nèi)部的h2</h2></div>`}
var vm = new Vue({
    el: '#app',data: {},components: { lqz,}
})

5.1 具名插槽

1 組件中可以留多個插槽,命名
    <div>
        <h1>我是一個組件</h1>
        <slot name="middle"></slot>
        <h2>我是組件內(nèi)部的h2</h2>
        <slot name="footer"></slot>
    </div>
2 在父組件中使用時,指定某個標簽渲染到某個插槽上
    <lqz>
        <div slot="footer">我是div</div>
    <img slot="middle" src="https://scpic.chinaz.net/files/default/imgs/2023-05-12/23659b1edfc0a984.jpg" alt=""></lqz>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Vue的組件化 經(jīng)過兩天的學習,現(xiàn)在終于來到了組件化開發(fā)的環(huán)節(jié),Vue的組件化是很重要的一個點,一定要認真學習??!...
    waigo閱讀 433評論 0 1
  • 一、組件注冊使用 組件使用步驟 (全局組件)①創(chuàng)建組件構(gòu)造器 ②注冊組件 ③使用組件 在vue實例對象管理的 域 ...
    shaoyf閱讀 196評論 0 1
  • 組件 全局組件 <component-test></component-test> ...
    王蕾_fd49閱讀 338評論 0 1
  • 組件化讓代碼更加方便組織和管理,并且擴展性也更強 組件化基本使用過程: 創(chuàng)建組件構(gòu)造器:cpnC = Vue.ex...
    super_girl秘密基地閱讀 919評論 0 8
  • 代碼管理 每天早上更新一下代碼git pull vuex的學習 vuex的了解Vuex是一個專門為vue.js應(yīng)用...
    Gopal閱讀 345評論 0 0

友情鏈接更多精彩內(nèi)容