赞
踩
渐进式 JavaScript 框架 --摘自官网
//开发版本:<!-- 开发环境版本,包含了有帮助的命令行警告 --><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>//生产版本:<!-- 生产环境版本,优化了尺寸和速度 --><script src="https://cdn.jsdelivr.net/npm/vue"></script>
<div id="app">{{ msg }} {{username}} {{pwd}}<br><span>{{ username }}<h1>{{ msg }}</h1></span></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app", //element 用来给Vue实例定义一个作用范围data:{ //用来给Vue实例定义一些相关数据msg:"百知欢迎你,期待你的加入!",username:"hello Vue!",pwd :"12345",},});</script>
v-text:用来获取data中数据将数据以文本的形式渲染到指定标签内部 类似于javascript 中 innerText
<div id="app" class="aa"><span >{{ message }}</span><span v-text="message"></span></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{message:"百知欢迎您"}})</script>
v-html:用来获取data中数据将数据中含有的html标签先解析在渲染到指定标签的内部 类似于javascript中 innerHTML
<div id="app" class="aa"><span>{{message}}</span><br><span v-text="message"></span><br><span v-html="message">xxxxxx</span></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{message:"<a href=''>百知欢迎您</a>"}})</script>
<div id="app"><h2>{{message}}</h2><h2 v-text="message"></h2><h2>年龄:{{ age }}</h2><br><input type="button" value="点我改变年龄" v-on:click="changeage"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{message:"hello 欢迎来到百知课堂!",age:23,},methods:{ //methods 用来定义vue中时间changeage:function(){alert('点击触发');this.age//代表当前vue实例this.aa();//代表调用方法},aa:function(){}}})</script>
<div id="app"><h2>{{ age }}</h2><input type="button" value="通过v-on事件修改年龄每次+1" v-on:click="changeage"><input type="button" value="通过@绑定时间修改年龄每次-1" @click="editage"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app", //element: 用来指定vue作用范围data:{age:23,}, //data : 用来定义vue实例中相关数据methods:{changeage:function(){this.age++;},editage:function(){this.age--;}} //methods: 用来定义事件的处理函数});</script>
<div id="app"><span>{{count}}</span><input type="button" value="改变count的值" @click="changecount"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{count:1,},methods:{/*changecount:function(){this.count++;}*/changecount(){this.count++;}}});</script>
<div id="app"><span>{{count}}</span><input type="button" value="改变count为指定的值" @click="changecount(23,'xiaohei')"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{count:1,},methods:{//定义changecountchangecount(count,name){this.count = count;alert(name);}}});</script>
v-show:用来控制页面中某个标签元素是否展示
<div id="app"><!--v-show: 用来控制标签展示还是隐藏的--><h2 v-show="false">百知教育欢迎你的加入!</h2><h2 v-show="show">百知教育欢迎你的加入这是vue中定义变量true!</h2><input type="button" value="展示隐藏标签" @click="showmsg"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{show:false,},methods:{//定义时间showmsg(){this.show = !this.show;}}})</script>
v-if: 用来控制页面元素是否展示
<div id="app"><h2 v-if="false">百知教育</h2><h2 v-if="show">百知教育欢迎你的加入</h2></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{show:false},methods:{}});</script>
v-bind: 用来绑定标签的属性从而通过vue动态修改标签的属性
<div id="app"><img width="300" v-bind:title="msg" v-bind:class="{aa:showCss}" src="baizhilogo.jpg" alt=""></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{msg:"百知教育官方logo!!!!",showCss:true,},methods:{}})</script>
vue为了方便我们日后绑定标签的属性提供了对属性绑定的简化写法如 v-bind:属性名 简化之后 :属性名
<div id="app"><img width="300" :title="msg" :class="{aa:showCss}" :src="src" alt=""><input type="button" value="动态控制加入样式" @click="addCss"><input type="button" value="改变图片" @click="changeSrc"></div><!--引入vue.js--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el:"#app",data:{msg:"百知教育官方logo!!!!",showCss:true,},methods:{addCss(){this.showCss= !this.showCss;},changeSrc(){this.src = "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1925088662,1336364220&fm=26&gp=0.jpg";}}})</script>
v-for: 作用就是用来对对象进行遍历的(数组也是对象的一种)
<div id="app"><span>{{ user.name }} {{ user.age }}</span><br><!--通过v-for遍历对象--><span v-for="(value,key,index) in user">{{index}} : {{key}} : {{value}}</span><!--通过v-for遍历数组--><ul><li v-for="a,index in arr" >{{index}} {{a}}</li></ul><!--通过v-for遍历数组中对象:key 便于vue内部做重用和排序--><ul><li v-for="user,index in users" :key="user.id">{{index+1}} {{ user.name }} === {{ user.age }} ==== {{ user.content }}</li></ul></div><!--引入vue--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el: "#app",data: {user:{name:"小陈",age:23},arr:["北京校区", "天津校区", "河南校区"],users:[{id:"1",name:"xiaochen",age:23,content:"我曾经也是一个单纯的少年!"},{id:"2",name:"小白",age:23,content:"我曾经是一个邪恶的少年!"},]},methods: {}});</script>
v-model: 作用用来绑定标签元素的值与vue实例对象中data数据保持一致,从而实现双向的数据绑定机制
<div id="app"><input type="text" v-model="message"><span>{{message}}</span><hr><input type="button" value="改变Data中值" @click="changeValue"></div><!--引入vue--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el: "#app",data: {message:""},methods: {changeValue(){this.message='百知教育!';}}});</script>
<template><div><div>姓:<input type="text" v-model="firstName" /></div><div>名:<input type="text" v-model="lastName" /></div><!-- 调用两次fullName --><div>姓名:{{ fullName }}</div><div>姓名:{{ fullName }}</div></div></template><script>export default {data() {return {firstName: "张",lastName: "三",};},computed: {fullName() {console.log("这是fullName");return this.firstName + this.lastName;}}};</script>
修饰符: 作用用来和事件连用,用来决定事件触发条件或者是阻止事件的触发机制
.stop 停止.prevent 阻止.self 独自.once 一次
用来阻止事件冒泡
<div id="app"><div class="aa" @click="divClick"><!--用来阻止事件冒泡--><input type="button" value="按钮" @click.stop="btnClick"></div></div><!--引入vue--><script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script>const app = new Vue({el: "#app",data: {},methods: {btnClick(){alert('button被点击了');},divClick(){alert('div被点击了');}}});</script>
用来阻止标签的默认行为
用来针对于当前标签的事件触发 ===========> 只触发自己标签的上特定动作的事件 只关心自己标签上触发的事件 不监听事件冒泡
<div class="aa" @click.self="divClick"><!--用来阻止事件冒泡--><input type="button" value="按钮" @click.stop="btnClick"><input type="button" value="按钮1" @click="btnClick1"></div>
once 一次作用: 就是让指定事件只触发一次
<!--.prevent : 用来阻止事件的默认行为.once : 用来只执行一次特定的事件--><a href="http://www.baizhibest.com/" @click.prevent.once="aClick">百知教育</a>
作用: 用来与键盘中按键事件绑定在一起,用来修饰特定的按键事件的修饰符
.enter.tab.delete (捕获“删除”和“退格”键).esc.space.up.down.left.right
用来在触发回车按键之后触发的事件
用来捕获到tab键执行到当前标签是才会触发
<input type="text" @keyup.tab="keytabs">
Vue 实例生命周期 ===> java 对象生命周期(初始化阶段 运行阶段 销毁阶段) 生命周期钩子 ====> 生命周期函数Vue实例从创建到销毁过程中自动触发一些列函数 ====> Vue生命周期函数(钩子)
beforeCreate(){ //1.生命周期中第一个函数,该函数在执行时Vue实例仅仅完成了自身事件的绑定和生命周期函数的初始化工作,Vue实例中还没有 Data el methods相关属性console.log("beforeCreate: "+this.msg);},created(){ //2.生命周期中第二个函数,该函数在执行时Vue实例已经初始化了data属性和methods中相关方法console.log("created: "+this.msg);},beforeMount(){//3.生命周期中第三个函数,该函数在执行时Vue将El中指定作用范围作为模板编译console.log("beforeMount: "+document.getElementById("sp").innerText);},mounted(){//4.生命周期中第四个函数,该函数在执行过程中,已经将数据渲染到界面中并且已经更新页面console.log("Mounted: "+document.getElementById("sp").innerText);}
beforeUpdate(){//5.生命周期中第五个函数,该函数是data中数据发生变化时执行 这个事件执行时仅仅是Vue实例中data数据变化页面显示的依然是原始数据console.log("beforeUpdate:"+this.msg);console.log("beforeUpdate:"+document.getElementById("sp").innerText);},updated(){ //6.生命周期中第六个函数,该函数执行时data中数据发生变化,页面中数据也发生了变化 页面中数据已经和data中数据一致console.log("updated:"+this.msg);console.log("updated:"+document.getElementById("sp").innerText);},
beforeDestory(){//7.生命周期第七个函数,该函数执行时,Vue中所有数据 methods componet 都没销毁},destoryed(){ //8.生命周期的第八个函数,该函数执行时,Vue实例彻底销毁}
说明:全局组件注册给Vue实例,日后可以在任意Vue实例的范围内使用该组件
//1.开发全局组件Vue.component('login',{template:'<div><h1>用户登录</h1></div>'});//2.使用全局组件 在Vue实例范围内<login></login>
说明:通过将组件注册给对应Vue实例中一个components属性来完成组件注册,这种方式不会对Vue实例造成累加
//局部组件登录模板声明let login ={ //具体局部组件名称template:'<div><h2>用户登录</h2></div>'};const app = new Vue({el: "#app",data: {},methods: {},components:{ //用来注册局部组件login:login //注册局部组件}});//局部组件使用 在Vue实例范围内<login></login>
//1.声明局部组件模板 template 标签 注意:在Vue实例作用范围外声明<template id="loginTemplate"><h1>用户登录</h1></template>//2.定义变量用来保存模板配置对象let login ={ //具体局部组件名称template:'#loginTemplate' //使用自定义template标签选择器即可};//3.注册组件const app = new Vue({el: "#app",data: {},methods: {},components:{ //用来注册局部组件login:login //注册局部组件}});//4.局部组件使用 在Vue实例范围内<login></login>
//1.声明组件模板配置对象let login = {template:"<div><h1>欢迎:{{ userName }} 年龄:{{ age }}</h1></div>",props:['userName','age'] //props作用 用来接收使用组件时通过组件标签传递的数据}//2.注册组件const app = new Vue({el: "#app",data: {},methods: {},components:{login //组件注册}});//3.通过组件完成数据传递<login user-name="小陈" age="23"></login>
//1.声明组件模板对象const login = {template:'<div><h2>欢迎: {{ name }} 年龄:{{ age }}</h2></div>',props:['name','age']}//2.注册局部组件const app = new Vue({el: "#app",data: {username:"小陈陈",age:23},methods: {},components:{login //注册组件}});//3.使用组件<login :name="username" :age="age"></login> //使用v-bind形式将数据绑定Vue实例中data属性,日后data属性发生变化,组件内部数据跟着变化
单向数据流:所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。
//组件声明的配置对象const login = {template:'<div><h1>{{ msg }} 百知教育</h1><ul><li v-for="item,index in lists">{{ index }}{{ item }}</li></ul></div>',data(){ //使用data函数方式定义组件的数据 在templatehtml代码中通过插值表达式直接获取return {msg:"hello",lists:['java','spring','springboot']}//组件自己内部数据}}
const login={template:'<div><input type="button" value="点我触发组件中事件" @click="change"></div>',data(){return {name:'小陈'};},methods:{change(){alert(this.name)alert('触发事件');}}}
//1.声明组件const login = {template:"<div><h1>百知教育 {{ uname }}</h1> <input type='button' value='点我' @click='change'></div>",data(){return {uname:this.name}},props:['name'],methods:{change(){//调用vue实例中函数this.$emit('findall'); //调用组件传递过来的其他函数时需要使用 this.$emit('函数名调用'),注意函数名使用小写字母,如果父组件用的是驼峰命令,那在子组件就要使用小写字母}}}//2.注册组件const app = new Vue({el: "#app",data: {username:"小陈"},methods: {findAll(){ //一个事件函数 将这个函数传递给子组件alert('Vue 实例中定义函数');}},components:{login,//组件的注册}});//3.使用组件<login @find="findAll"></login> //=====> 在组件内部使用 this.$emit('findall')
//1.声明组件const login = {template:"<div><h1>百知教育 {{ uname }}</h1> <input type='button' value='点我' @click='change'></div>",data(){return {uname:this.name}},props:['name'],methods:{change(){//调用vue实例中函数this.$emit('findAll','子组件'); //调用组件传递过来的函数传递数据,需要使用 this.$emit('函数名调用',参数)}}}//2.注册组件const app = new Vue({el: "#app",data: {username:"小陈"},methods: {findAll(value){ //一个事件函数 将这个函数传递给子组件同时通过函数传递数据this.username = value}},components:{login, //组件的注册}});//3.使用组件<login @find="findAll"></login> //=====> 在组件内部使用 this.$emit('findall')
<div id="app"><h1>{{msg}} {{count}}</h1><!--插槽: slot 作用: 用来扩展现有组件 让组件变得更加灵活 usb 接口具名插槽: 带有名字插槽默认插槽:--><login></login><hr><login><span slot="bb">欢迎进入我们网站</span></login><hr><login><span slot="aa">welcome to website!!! {{msg}}</span></login><hr><login><button slot="aa" @click="incrmentCount()">点我</button></login></div></body></html><script src="js/vue.js"></script><script>const login={template:`<div><slot name="aa"><span>i am moren chacao</span></slot><h3>用户登录</h3><slot name="bb"></slot></div>`};const app = new Vue({el: "#app",data: {msg: "组件的slot(插槽)",count:0,},methods:{incrmentCount(){this.count++;}},components:{ //注册局部组件login,}});</script>
用来在vue中实现组件之间的动态切换
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script><script src="https://unpkg.com/vue-router/dist/vue-router.js"></script> //vue 路由js
//声明组件模板const login = {template:'<h1>登录</h1>'};const register = {template:'<h1>注册</h1>'};
//创建路由对象const router = new VueRouter({routes:[{path:'/login',component:login,name:'login'}, // path: 路由的路径 component:路径对应的组件 name:路由的名称(建议使用这种方式){path:'/register',component:register,name:'register'}]});
const app = new Vue({el: "#app",data: {username:"小陈",},methods: {},router:router //设置路由对象});
<!--显示路由的组件--><router-view></router-view>
<a href="#/login">点我登录</a><a href="#/register">点我注册</a>
作用:用来替换我们在切换路由时使用a标签切换路由好处:就是可以自动给路由路径加入#不需要手动加入<router-link to="/login" tag="button">我要登录</router-link><router-link to="/register" tag="button">点我注册</router-link>
const router = new VueRouter({routes:[// { path:'/',component:login},{ path:'/',redirect:'/login'}, // redirect: 用来当访问的是默认路由 "/" 时 跳转到指定的路由展示 推荐使用{ path:'/login', component:login},{ path:'/register', component:register},]});
const originalPush = VueRouter.prototype.push;VueRouter.prototype.push = function push(location) {return originalPush.call(this,location).catch(erro=>erro)};
<router-link to="/login?id=21&name=zhangsan">登录</router-link><router-link :to="{path:'/login',query:{id:22,name:'张三'}}">登录</router-link><router-link :to="{name:'login',query:{id:22,name:'张三'}}">登录</router-link>
//创建路由对象const router = new VueRouter({routes:[{path:'/login',component: login,name:'login'},]});
//登录组件const login = {template: `<div><h2>用户登录------{{id}}-------{{name}}</h2></div>`,data(){return{id: this.$route.query.id,name: this.$route.query.name}}}
<router-link to="/register/24/张三">注册</router-link><router-link :to="{path:'/register/22/李四'}">注册</router-link><router-link :to="{name:'register', params:{id:32,name:'李四'}}">注册</router-link>
//创建路由对象const router = new VueRouter({routes:[{path:'/register/:id/:name',component:register,name:'register'}]});
//注册组件const register = {template: `<div><h2>用户注册--------{{id}}-------------{{name}}</h2></div>`,data(){return{id: this.$route.params.id,name: this.$route.params.name}}}
<template id="product"><div><h1>商品管理</h1><router-link to="/product/add">商品添加</router-link><router-link to="/product/edit">商品编辑</router-link><router-view></router-view></div></template>//声明组件模板const product={template:'#product'};const add = {template:'<h4>商品添加</h4>'};const edit = {template:'<h4>商品编辑</h4>'};
const router = new VueRouter({routes:[{path:'/product',component:product,children:[{path:'add',component: add},{path:'edit',component: edit},]},]});
const app = new Vue({el: "#app",data: {},methods: {},router,//定义路由对象});
<router-link to="/product">商品管理</router-link><router-view></router-view>
import Vue from 'vue'import Vuex from 'vuex'//1.安装vuexVue.use(Vuex);//2.创建store对象const store = new Vuex.Store({});//3.暴露store对象export default store;
import Vue from 'vue'import App from './App'import router from './router'import store from "./stroe";//引入storeVue.config.productionTip = false/* eslint-disable no-new */new Vue({el: '#app',router,components: { App },template: '<App/>',store,//注册状态})
const store = new Vuex.Store({state:{counter:0,//定义共享状态},}
const store = new Vuex.Store({state:{counter:0,//定义共享状态},mutations:{//增加increment(state){state.counter++},//减小decrement(state){state.counter--}}});
mutations:{//addCount 参数1:state 对象 参数2:自定义参数addCount(state,counter){console.log(counter);return state.counter += counter ;}}
getters:{//平方mathSqrts(state){console.log("--------");return state.counter*state.counter;},//乘以一个数字mathSqrtsNumber(state,getters){return getters.mathSqrts*3;},//传递参数mathSqrtsNumbers(state,getters){return function (number){return number;}}}
- 1.{{$store.getters.mathSqrts}}- 2.{{$store.getters.mathSqrtsNumber}}- 3.{{$store.getters.mathSqrtsNumbers(3)}}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。