Vue this.$emit 自定義事件分發


 

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">

<todo>
    <todo-title slot="todo-title" :title="title"></todo-title>
    <todo-items slot="todo-items" v-for="(item,index) in todoItems"
                :item="item" v-bind:index="index" v-on:remove="removeItems(index)" :key="index"></todo-items>
</todo>

</div>

<!--引入vue.js 包-->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
    //slot 插槽
    Vue.component("todo",{
        template:
        '<div>\
            <slot name="todo-title"></slot>\
             <ul>\
                <slot name="todo-items"></slot>\
            </ul>\
        </div>'
    });

    Vue.component("todo-title",{
        props:['title'],
        template:'<div>{{title}}</div>'
    });

    Vue.component("todo-items",{
        props:['item','index'],
        //只能綁定當前組件的方法
        template:'<li>{{index}}----{{item}} <button @click="remove">delete</button> </li>',
        methods:{
            remove:function (index) {
                //this.$emit 自定義事件分發
                this.$emit('remove',index);
            }
        }
    })

    var vm=new Vue({
        el:"#app",
        data:{
            title:"創客未來",
            todoItems:['創客','未來','中國']
        },
        methods:{
            removeItems:function (index) {
                this.todoItems.splice(index,1);//一次刪除一個數組元素
            }
        }

    });

</script>
</body>
</html>

Vue的核心:數據驅動、組件化。

Vue的優點:借鑒了AngulaJS的模塊化和React的虛擬DOM,虛擬DOM就是把DOM操作放到內存中執行。

Vue常用屬性

  v-if

  v-else-if

  v-else

  v-for

  v-on 綁定事件,簡寫 @

  v-model 數據雙向綁定

  v-bind 給組件綁定參數,簡寫 :

Vue 組件化

  組合插件 slot插槽

  組件內部綁定事件需要使用到 this.$emit("事件名",參數);

  計算屬性的特色,緩存計算數據

遵循SoC關注分離原則,Vue是純粹的視圖框架,並不包含,比如Ajax之類的通信功能,為了解決通信問題,需要使用Axios框架做異步通信;

注意:

Vue的開發都是要基於NodeJS,實際開發采用  vue-cli 腳手架開發,vue-router路由,vuex做狀態管理,Vue UI,界面我們一般使用 ElementUI(餓了么出品),或者ICE(阿里巴巴)來快速搭建前端項目。

官網:

https://element.eleme.cn/#/zh-CN

https://ice.work/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM