日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

vue自定义组件,插槽,自定义事件

發布時間:2023/12/10 vue 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 vue自定义组件,插槽,自定义事件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

vue組件套娃

    • 1. vue自定義組件
    • 2. 組件和插槽套娃
    • 3. vue組件通過自定義事件更改vue實例中的數據

1. vue自定義組件

  • 語法
Vue.component('自定義組件名', {props: ['var1', 'var2', 'var3'], //每個屬性可以和頁面綁定值template: '<p>{{ var1 }}</p>' // 自定義模板 里面套html標簽, 可以取屬性的值 })
  • 第一個自定義組件
<script>Vue.component('lover', {template: '<p>taylor swift - lover.mp3</p>'});let app = new Vue({el: "#app",data: {}}); </script> <div id="app"><!-- 使用自定義組件模板,注意綁定了vue對象才有用 --><lover></lover> </div>
  • 將自定義組件里面的數據寫活
<script> /* 自定義組件模板 bitqian標簽 */ Vue.component("bitqian", {props: ['language'],template: '<li>{{ language }}</li>' });let app = new Vue({el: "#app",data: {items: ["java", "python", "go"]} });</script> <!-- 獲得每個item,并將items里面的每個item通過組件的language屬性綁定到bitqian標簽 --><bitqian v-for="item in items" v-bind:language="item" v-bind:key="item.index"></bitqian>
  • 完整代碼
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>vue 組件綁定值</title><script src="../js/vue.js"></script> </head> <body><div id="app"><!-- 使用自定義組件模板,注意綁定了vue對象才有用 --><lover></lover><hr/><!-- 獲得每個item,并將items里面的每個item通過組件的language屬性綁定到bitqian標簽 --><bitqian v-for="item in items" v-bind:language="item" v-bind:key="item.index"></bitqian></div><script>Vue.component('lover', {template: '<p>taylor swift - lover.mp3</p>'});/* 自定義組件模板 bitqian標簽 */Vue.component("bitqian", {props: ['language'],template: '<li>{{ language }}</li>'});let app = new Vue({el: "#app",data: {items: ["java", "python", "go"]}});</script></body> </html>

2. 組件和插槽套娃

  • 插槽<slot></slot>,就是一個孔,可以套vue組件
  • 用組件套組件的方式代替普通的html標簽
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>slot插槽 結合vue組件 實現模板化</title><script src="../js/vue.js"></script> </head> <body><div id="app"><!-- 將每個item的值綁定到模板中的屬性上 --><my-component v-for="item in items" v-bind:language="item"></my-component></div><!-- 插槽的目的 為了實現代碼模板化 --><div id="app1"><!--<p>后端語言</p><ul><li>java</li><li>python</li><li>go</li><li>linux</li></ul>--><demo-component><!-- 記得綁定插槽 --><demo-title slot="demo-title" v-bind:title="title"></demo-title><demo-item slot="demo-item" v-for="(item, index) in items":item="item" v-bind:index="index"></demo-item></demo-component></div><script>// vue組件復習Vue.component('my-component', {props: ['language'],template: '<li>{{ language }}</li>'})new Vue({el: "#app",data: {items: ['c', 'cpp', 'object-c']}})/* slot 插槽定義 組件通過插槽套組件 */Vue.component('demo-component', {template:'<div>' +'<slot name="demo-title"></slot>' +'<ul>' +'<slot name="demo-item"></slot>' +'</ul>' +'</div>'})// 標題組件Vue.component('demo-title', {props: ['title'],template: '<p>{{ title }}</p>'})// 標題下面對應的每一項Vue.component('demo-item', {props: ['item', 'index'],template: '<li>{{ index }}=========={{ item }} </li>'})// vue實例 給組件提供數據 let vm = new Vue({el: "#app1",data: {title: '后端語言',items: ['java', 'python', 'go', 'linux']}})</script> </body> </html>

3. vue組件通過自定義事件更改vue實例中的數據

  • this.$emit(‘functionName’, params…)實現自定義事件
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>vue 插槽復習</title><script src="../js/vue.js"></script> </head> <body><div id="app"><my-component><!-- 給組件插槽 綁定vue實例對象中的title --><!-- v-bind:index="index" ==> :index="index" --><!-- v-on:click="show" @click="show" --><my-title slot="my-title" v-bind:title="title"></my-title><my-content slot="my-content" v-for="(item, index) in items":content="item" :index="index" :key="index"v-on:remove="removeItems(index)"> <!-- 自定義移除事件remove 并綁定了vue實例中的removeItems --></my-content></my-component></div><script>Vue.component('my-component', {/* 使用插槽代替 模板對象 */template:'<div>\<slot name="my-title"></slot>\<ul><slot name="my-content"></slot></ul>\</div>'})Vue.component('my-title', {props: ['title'],template: '<p>{{ title }}</p>'})Vue.component('my-content', {props: ['content', 'index'], // 定義index屬性接收頁面的綁定值template: '<li>{{ index }} ===== {{ content }} <button @click="remove">移除</button> </li>', //綁定了removemethods: {remove: function (index) {// 自定義事件分發 移除vue實例中的數據// alert('remove ..' + index)// 調用自定義函數 并傳入參數this.$emit('remove', index)}}})let vm = new Vue({el: "#app",data: {title: 'a title',items: ['java', 'python', 'go']},methods: {removeItems: function (index) {// 從index這一位移除this.items.splice(index, 1);}}});</script></body> </html>

總結

以上是生活随笔為你收集整理的vue自定义组件,插槽,自定义事件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。