<!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/