<!DOCTYPE html> <html lang="en"> <head> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div id="app"> <!-- //基本变量 --> <p>{{message}}</p> <br> <hr> <!-- 绑定属性v-bind 简写: --> <p v-bind:title='title'>Look at me,put mouse here</p> <br> <hr> <!-- 绑定事件v-on 简写@ --> <button v-on:click='reverseMessage'>Click me</button> <br> <hr> <!-- 绑定条件v-if --> <p v-if='seen'> Can you look at me?</p> <br> <button type="submit" @click='isShow' value="Click">Click</button> <br> <hr> <!-- 绑定循环v-for --> <ul> <li v-for='(book,index) in books' :key='index'> {{index}}==========={{book.id}}======={{book.author}}========={{book.name}}</li> </ul> <br> <hr> <!-- 绑定函数methods function(){} --> <button @click='deletebook'>DEL</button> <br> <hr> <!-- input type=text v-model绑定--> <input type="text" v-model='inputmessage'>{{inputmessage}} <br> <!-- <input type="text" v-model.lazy='inputmessage'>{{inputmessage}} <br> --> <!-- <input type="text" v-model.trim='inputmessage'>{{inputmessage}} <br> --> <!-- <input type="text" v-model.number='inputmessage'>{{inputmessage}} <br> 不要用 --> <hr> <!-- input radio v-model绑定 字符串或者数字属性 --> <input type="radio" v-model='radiomessage' value="Yes">YES <br> <input type="radio" v-model='radiomessage' value="No">NO <br> {{radiomessage}} <br> <hr> <!-- input chcekbox v-model 绑定 复选框 数组属性 --> <input type="checkbox" v-model='chcekmessage' value='a'>A <br> <input type="checkbox" v-model='chcekmessage' value='b'>B <br> <input type="checkbox" v-model='chcekmessage' value='c'>C <br> {{chcekmessage}} <br> <hr> <!-- input textarea v-model 绑定文本信息 --> <textarea v-model='testareamessage'></textarea> <br> {{testareamessage}} <br> <hr> <!-- input button v-on 属性 简写@事件绑定 --> <input type="button" value='Click' @click='say("你好,中国")'> <br> <hr> <!-- select option v-model 属性 绑定基本类型属性 --> <select v-model='selectmessage'> <option selected disabled value="">请选择</option> <option value="AA">A</option> <option value="BB">B</option> <option value="CC">C</option> <option value="DD">D</option> </select> <br> {{selectmessage}} <br> <hr> <!-- 插槽slot 组件插槽 绑定Vue.component('',{template:{},props:{}}) --> <!-- 父组件和子组件通信 v-bind 简写: props绑定 --> <!-- 子组件向父组件传值,子组件绑定事件,发送$emit('事件名称',传递参数),父组件监听事件'事件名称',触发事件 --> <!-- 子组件向父组件传递多个值的时候,用arguments 来接住。 --> <!-- 子组件向父组件传递单个值的时候,可以直接用传递的参数名来接住 --> <app-view> <app-header slot='app-header' :header='message'></app-header> <app-content slot='app-content' v-for='(book,index) in books' :key='index' :index='index' :book=book @subevent='sub(arguments)'></app-content> </app-view> </div> <script> // 自定义组件,组件插槽 // v-slot插槽 <slot name=""> slot="" // template 中自定义组件不能作为根节点,要用其他标准标签包裹,在容器里。 Vue.component('app-view', { template: ` <div> <slot name='app-header'></slot> <ul> <slot name='app-content'></slot> </ul> </div> ` }) Vue.component('app-header', { props: ['header'], template: '<div>{{header}}</div>' }) Vue.component('app-content', { props: ['book', 'index'], template: `<li > {{index}}==========={{book.id}}======={{book.author}}========={{book.name}}===== <input type='submit' value="Alert" @click='subclick'/> </li>`, // template模板里 input标签定义子组件事件 点击事件 触发子组件方法。 // 子组件触发click事件通过$emit ==》发射==》 【事件名subevent 和参数值】 给父组件,父组件监听事件【事件名subevent】,触发事件函数sub(arguments),调用父组件的方法。 methods: { subclick: function () { this.$emit('subevent', this.book, this.index, event); } } } ) // 创建Vue对象 Vue对象的属性包括 el data methods created computed mouted watch var vm = new Vue({ // el 唯一最外层容器 document.getElementById #app document.getElementByClassName .app el: '#app', data: { // 要绑定的属性 可以绑定到 // {{}}、 v-bind标签属性class style id等 v-on(注意事件名称要小写)标签事件 v-model(修饰符.trim .lazy .number)表单值value // v-if 判断属性 控制标签的display:block v-show 标签的创建和销毁. // v-for ul-li ol-li table-tr-td的标签的循环(item,index) in items 获取的(item,index)有顺序关系, message: 'Hello,China.', title: 'loading at' + new Date().toString(), seen: true, inputmessage: '', radiomessage: '', chcekmessage: [], selectmessage: '', testareamessage: '', books: [ { id: 1, author: 'A', name: 'Java' }, { id: 2, author: 'B', name: 'Python' }, { id: 3, author: 'C', name: 'C++' }, { id: 4, author: 'D', name: 'PHP' }, { id: 5, author: 'E', name: 'Javascript' }, ] }, methods: { reverseMessage: function () { this.message = this.message.split('').reverse().join(''); }, isShow: function () { this.seen = !this.seen; }, deletebook: function () { this.books.pop(); }, say: function (message) { alert(message); }, sub: function (arguments) { console.log(arguments[0].author, arguments[0].name, arguments[1], arguments[2]); // console.log(arguments.book);? } } }) </script> </body> </html>