Vue之組件及組件通訊

組件之全局組件vue

//注意:須要在Vue實例化以前註冊全局組件,使用Vue.component("組件名",{ template:`組件模板` })
Vue.component("show-name",{
    template:`
	<div title="注意, 組件模板的根元素必須有且只有一個">
	<p>ViavaCos</p>
	</div>
	`
})

var vm = new Vue({
    el:'#app',
    data:{
        name:'ViavaCos'
    },
    methods:{}
})

組件之局部組件數組

// 套路和全局組件同樣,這二者只是註冊的位置不一樣,做用的範圍也不同罷了 使用components選項來註冊局部
var vm = new Vue({
    el:'#app',
    data:{},
    components:{
        'show-name':{
            template:`
      	    <div title="注意, 組件模板的根元素必須有且只有一個">
            	<p>ViavaCos</p>
            </div>
		`
        }
    }
})

組件通訊之父組件傳遞值給子組件

// 父組件傳遞值給子組件經過自定義屬性傳遞,而後子組件經過porps選項來接收所傳遞過來的值

一共三個步驟:app

  1. 在子組件的自定義標籤上設置自定義屬性,值爲父組件須要從傳遞的值(變量)this

  2. 在子組件的實例上設置一個叫props的屬性,用來接收父組件傳遞過來的值,props選項是一個字符串數組代理

  3. 因爲props選項也被vue實例代理了,因此直接在當前子組件實例中使用this.自定義屬性名就可以使用了code

    <div id="app">
         // 1. 設置自定義屬性
         <show-city :city="city"></show-city>
     </div>
     <script src="./vue.js"></script>
     <script>
         var vm = new Vue({
             el: '#app',
             data: {
                 city: ["北京", "上海", "天津"]
             },
             methods: {},
             components: {
                 'show-city': {
                     // 3.使用
                     template: `
                     <div>
                         <p v-for="item in city">{{item}}</p>
                     </div>
                     `,
                     // 2.接收值
                     props: ['city']
                 }
             }
         });
     </script>

組件通訊之子組件傳遞給父組件

一共五個步驟:component

  1. 在子組件的組件模板上設置一個點擊事件,用來觸發自定義事件用於傳值對象

  2. 在子組件的methods中設置點擊事件的事件處理程序:內容爲執行自定義事件this.$emit("自定義事件名", 若干個參數)事件

  3. 在父組件管理的視圖,也就是書寫子組件的自定義標籤的地方,在這個標籤上設置自定義事件的監聽(用v-on指令就行)ip

  4. 提早在父組件的數據對象data中定義一個容器來接收子組件傳遞過來的值

  5. 在父組件的methods中設置監聽自定義事件的事件處理程序:因爲事件觸發了,會有寫好的若干個參數傳遞過來,因此在這裏處理一下。將傳遞來的值用方纔定義好的容器接收,而後就能夠放心使用這個子組件傳遞來的值了

    <div id="app">
             <!-- 3. 監聽事件 -->
             <show-city @getcity='exeCity' v-for="item in city" :city="item" :tcity="tcity"></show-city>
         </div>
    
    
     <script src="./vue.js"></script>
     <script>
         var vm = new Vue({
             el: '#app',
             data: {
                 city: ["北京", "上海", "天津"],
                 // 4. 定義容器接收
                 tcity: ''
             },
             methods: {
                 // 5. 賦值給tcity這個容器
                 exeCity(data) {
                     this.tcity = data;
                 }
             },
             components: {
                 'show-city': {
                     // 1. 設置自定義事件
                     template: `
                     <div>
                         <p @click="toFather" :class="{select:isSelect}" >{{city}}</p>
                         <input text="text" v-model="isSelect">
                     </div>
                     `,
                     props: ['city', 'tcity'],
                     methods: {
                         toFather() {
                             // 2. 觸發自定義事件
                             console.log('被點擊了')
                             this.$emit('getcity', this.city);
                         },
                     },
                     computed: {
                         isSelect() {
                             return this.city === this.tcity;
                         }
                     }
                 }
    
             }
         });
     </script>
相關文章
相關標籤/搜索