在评论区找到的干货,从头到尾一篇文章一篇文章,Vue快速入门!!!_cV展示的学习园-CSDN博客_vue快速入门
网络通信Axios,还有jQuery
首先要保证浏览器是 ES6
导入json数据(data.json)
{ "name":"狂神说java", "url": "http://baidu.com", "page": "1", "isNonProfit":"true", "address": { "street": "含光门", "city":"陕西西安", "country": "中国" }, "links": [ { "name": "B站", "url": "https://www.bilibili.com/" }, { "name": "4399", "url": "https://www.4399.com/" }, { "name": "百度", "url": "https://www.baidu.com/" } ] }
引入 axios 的在线cdn
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<div id="vue" v-cloak> v-cloak额,自己去百度,我也不知道干嘛的,应该是设置加载时间显示啥的 <div>地名:{{info.name}}</div> <div>地址:{{info.address.country}}--{{info.address.city}}--{{info.address.street}}</div> <div>链接:<a v-bind:href="info.url">{{info.url}}</a> </div> <div>links:{{info.links[0]}} </div> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <!--注意一下,这玩意网速慢的话,就会刷新挺长时间的,服了--> <script type="text/javascript"> let vm = new Vue({ el:"#vue", //data:属性:vm data(){ return{ info:{ name:null, //字段要和给定的数据字段一致 address:{ country:null, city:null, street:null }, links:[ { name:null, url:null} ], url:null } } }, mounted(){//钩子函数 链式编程 ES6新特性 axios.get('../data.json').then(response=>(this.info=response.data)); } }); </script>
计算属性:将计算的结果储存在缓存中
<div id="app"> {{message}} {{fun1()}} </div> <script src="https://cdn.bootcss.com/vue/2.4.4/vue.min.js"></script> <script> let vm =new Vue({ //新建Vue el:"#app", //绑定一个?? data:{ //数据 message : "hello vue" }, methods :{ fun1: function (){ return Date.now(); } }, computed:{ fun2: function (){ //通过控制台可以观察到,该值不会发生变化,和mybatis中的增删改查一样,当数据更新时才会改变 this.message; return Date.now(); } } }); </script>
插槽slot,美丽动人啊
假设要实现这个东西,而且格式固定,就需要三个模板,分别是整个的模板,标题的模板和li标签的模板,主模板通过slot留出空槽,其他两个子模版通过名字绑定到主模板上,需要参数就传递参数
<div> <div>标题</div> <ul> <li>1</li> <li>2</li> <li>3</li> </ul> </div>
<div id="vue"> <todo> <todo-title slot="todo-title" v-bind:title="title"></todo-title> <!--<todo-items slot="todo-items" v-for="{item,index} in todoItems" v-bind:item="item"></todo-items>--> <!--如下为简写--> <todo-items slot="todo-items" v-for="item in todoItems" :item="item" ></todo-items> </todo> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script type="text/javascript"> 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>' }); //这里的index,就是数组的下标,使用for循环遍历的时候,可以循环出来! Vue.component("todo-items",{ props:["item"], template:"<li>{{item}}</li>" }); var vm = new Vue({ el:"#vue", data:{ title:"cvzhanshi study java", todoItems:['test1','test2','test3'] } }); </script>
自定义事件,假设我想在前端就实现删除数组里的值,就需要自定义事件
this.$emit("事件名",参数),通过比较上下两个代码来看看究竟做了哪些操作
在Vue中定义函数进行删除操作,在组件调用的地方通过绑定,将组件内部的函数绑定到Vue中的函数上(还要传递参数),在组件中定义函数使用自定义事件
<div id="vue"> <todo> <todo-title slot="todo-title" v-bind:title="title"></todo-title> <!--<todo-items slot="todo-items" v-for="{item,index} in todoItems" v-bind:item="item"></todo-items>--> <!--如下为简写--> <todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item" :index="index" v-on:remove="removeItems(index)"></todo-items> </todo> </div> <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script type="text/javascript"> 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>' }); //这里的index,就是数组的下标,使用for循环遍历的时候,可以循环出来! Vue.component("todo-items",{ props:["item"], template:"<li>{{item}}<button @click='remove'>删除</button></li>", methods: { remove: function (index) { this.$emit('remove',index); } } }); var vm = new Vue({ el:"#vue", data:{ title:"小陈的", todoItems:['test1','test2','test3'] }, methods:{ removeItems:function(index){ this.todoItems.splice(index,1); //删除当前下标的元素 } } }); </script>