VUE 入门案例
基本语法
- 导入js类库
- 指定vue渲染区域 标签体
- 实例化vue对象
- 数据取值
var/let/const说明
关于js中变量定义说明:
- var 没有作用域的概念,容易出现安全性问题 成员变量
- let 作用于var类似,有作用域的概念,局部变量
- const定义常量
1.{{msg}} 当页面没有渲染成功时.以原标签展现.
2.v-text 当页面没有渲染完成,则不予展现.
3.v-html 将html代码片段 渲染展现
MVVM思想
Model-view-viewModel
设计思想就是关注Model的变化,通过viewModel自动去更新DOM的状态,数据驱动
事件绑定
//记得导入vue.js ??
<div id="app"> ?? ??? ?{{num}} ?? ??? ?<button v-on:click="num++">++</button> ?? ??? ?<button @click="num++">++</button> ?? ??? ?<button v-on:click="add()">++</button> ?? ??? ?</div> ?? ??? ?<script type="text/javascript"> ?? ??? ??? ?new Vue({ ?? ??? ??? ??? ?el:"#app", ?? ??? ??? ??? ?data:{ ?? ??? ??? ??? ??? ?num:100?? ??? ??? ? ?? ??? ??? ??? ?},?? ??? ??? ? ?? ??? ??? ??? ?methods:{ ?? ??? ??? ??? ??? ?add:function(){ ?? ??? ??? ??? ??? ??? ?this.num++ ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?}?? ? ?? ??? ??? ?}) ?? ??? ?</script>
分支结构
1.v-if 如果判断为true 则展现元素
2.v-else-if 如果不满足v-if,检查是否满足v-else-if
3.v-else 上述都不满足 才展现.
?循环结构
<p v-for="value,index in userList">靠近 in userList? 所以index为下标? value具体对象
<p v-for="value,index in userList"> ?? ??? ??? ??? ?<span v-text="index"></span> ?? ??? ??? ??? ?<span v-text="value"></span>?? ??? ??? ??? ? ?? ??? ??? ?</p>
new Vue({ ?? ??? ??? ??? ?el:"#app", ?? ??? ??? ??? ?data:{ ?? ??? ??? ??? ??? ?hobby:["aa","vv","cc","dd"], ?? ??? ??? ??? ??? ?userList:[{id:100,name:"aa",age:60},{id:101,name:"aa",age:60},{id:102 ,name:"aa",age:60}] ?? ??? ??? ??? ?}?? ??? ? ?? ??? ??? ?})
MVC设计思想
?表单双向数据绑定
VUE的点击事件中有一个属性,可以取消标签的默认行为? 必须挂载渲染
@click.prevent
常用场景:
form标签? 阻止action提交
a标签??????? 阻止href属性跳转
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="utf-8"> ?? ??? ?<title>表单双向数据绑定</title> ?? ?</head> ?? ?<body> ?? ??? ?<div id="app"> ?? ??? ??? ?<!-- 问题: 表单中的哪些标签可以使用双向数据绑定 ?? ??? ??? ??? ? 双向数据绑定说明: 用户可以录入的标签. ?? ??? ??? ??? ? ?? ??? ??? ??? ? 答案: ?? ??? ??? ??? ??? ?1.文本框 2.单选框 3.多选框 4.下拉框? 5.文本域 ?? ??? ??? ? --> ?? ??? ??? ? <form action="http://baidu.com"> ?? ??? ??? ??? ? <div> ?? ??? ??? ??? ??? ? 用户名: <input type="text" v-model="username"/> ?? ??? ??? ??? ? </div> ?? ??? ??? ??? ? <div> ?? ??? ??? ??? ? ?? ? 性别: <input type="radio" value="男" name="sex"?? v-model="sex"/>男 ?? ??? ??? ??? ??? ??? ??? <input? type="radio" value="女" name="sex" v-model="sex"/>女 ?? ??? ??? ??? ? </div> ?? ??? ??? ??? ? <div> ?? ??? ??? ??? ? ?? ? 爱好: ?? ??? ??? ??? ??? ??? ?<input type="checkbox" name="hobby" value="敲代码" v-model="hobby"/>敲代码 ?? ??? ??? ??? ??? ??? ?<input type="checkbox" name="hobby" value="打游戏" v-model="hobby"/>打游戏 ?? ??? ??? ??? ??? ??? ?<input type="checkbox" name="hobby" value="打豆豆" v-model="hobby"/>打豆豆 ?? ??? ??? ??? ? </div> ?? ??? ??? ??? ? <div> ?? ??? ??? ??? ??? ? <!-- ?? ??? ??? ??? ??? ??? ?VUE的点击事件中有一个属性,可以取消标签的默认行为 ?? ??? ??? ??? ??? ??? ?@click.prevent ?? ??? ??? ??? ??? ??? ?常用场景: ?? ??? ??? ??? ??? ??? ??? ?1. form标签? 阻止 action 提交 ?? ??? ??? ??? ??? ??? ??? ?2. a标签???? 阻止 href?? 属性跳转 ?? ??? ??? ??? ??? ? --> ?? ??? ??? ??? ??? ? <input type="submit" value="提交" @click.prevent="formBtn"/> ?? ??? ??? ??? ? </div> ?? ??? ??? ? </form> ?? ??? ??? ???? ???? ?? ??? ?</div> ?? ??? ? ?? ??? ?<script src="../js/vue.js"></script> ?? ??? ?<script> ?? ??? ??? ?const app = new Vue({ ?? ??? ??? ??? ?el: "#app", ?? ??? ??? ??? ?data: { ?? ??? ??? ??? ??? ?username: 'aaaa', ?? ??? ??? ??? ??? ?sex: '女', ?? ??? ??? ??? ??? ?hobby: ['敲代码'] ?? ??? ??? ??? ?}, ?? ??? ??? ??? ?methods: { ?? ??? ??? ??? ??? ?formBtn(){ ?? ??? ??? ??? ??? ??? ?alert("点击按钮 ajax提交数据") ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?}) ?? ??? ?</script> ?? ?</body> </html>
常用双向数据绑定属性
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="utf-8"> ?? ??? ?<title>表单双向数据绑定</title> ?? ?</head> ?? ?<body> ?? ??? ?<div id="app"> ?? ??? ??? ?<!--1.v-model.number 将输入的内容转化为数值类型? --> ?? ??? ??? ?年龄: <input type="number" v-model.number="ageTest"/> ?? ??? ??? ?<button @click="addNum">加法</button> ?? ??? ??? ?<br> ?? ??? ??? ?<!--2.去除多余的空格? --> ?? ??? ??? ?用户名: <input type="text" v-model.trim="username" /> ?? ??? ??? ?用户输入的长度 {{username.length}} ?? ??? ??? ?<br> ?? ??? ??? ? ?? ??? ??? ?<!-- 3.懒加载方式 用户离焦触发 --> ?? ??? ??? ?信息: <input type="text" v-model.lazy="msg" /> {{msg}} ?? ??? ?</div> ?? ??? ? ?? ??? ?<script src="../js/vue.js"></script> ?? ??? ?<script> ?? ??? ??? ?const app = new Vue({ ?? ??? ??? ??? ?el: "#app", ?? ??? ??? ??? ?data: { ?? ??? ??? ??? ??? ?ageTest: '', ?? ??? ??? ??? ??? ?username: '', ?? ??? ??? ??? ??? ?msg: '' ?? ??? ??? ??? ?}, ?? ??? ??? ??? ?methods: { ?? ??? ??? ??? ??? ?addNum(){ ?? ??? ??? ??? ??? ??? ?this.ageTest = this.ageTest + 1 ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ?}) ?? ??? ?</script> ?? ?</body> </html>
VUE生命周期
<!-- 知识梳理: ?? ??? ? ?? ??? ??? ?1.生命周期函数的方法名称 必须固定. ?? ??? ??? ?2.生命周期函数是VUE对象特有的函数.应该放到根目录下. ?? ??? ??? ?3.当页面渲染成功之后, 一共执行了4个生命周期方法. ?? ??? ??? ??? ?第一类: VUE对象的创建. ?? ??? ??? ??? ??? ?beforeCreate:对象创建前调用 ?? ??? ??? ??? ??? ?created: VUE对象已经创建完成之后调用?? ? ?? ??? ??? ??? ?第二类: VUE对象的挂载(渲染) ?? ??? ??? ??? ??? ?beforeMount:? el : "#app",VUE对象在找到@APP标签之前先执行该函数. ?? ??? ??? ??? ??? ?mounted: 当挂载完成(渲染完成),用户可以看到页面数据之后调用该函数 ?? ??? ??? ? ?? ??? ??? ?4. 用户修改阶段: ?? ??? ??? ??? ?第三类: ?? ??? ??? ??? ??? ?beforeUpdate: 当用户修改数据 点击"回车" 之后调用该函数 ?? ??? ??? ??? ??? ?过渡: 数据已经被修改 ?? ??? ??? ??? ??? ?updated: 数据已经被修改之后调用该函数 ?? ??? ??? ?5. 销毁阶段: ?? ??? ??? ??? ? 销毁函数,VUE对象默认不会调用. 可以通过函数由用户调用 ?? ??? ??? ??? ? beforeDestroy: 在销毁方法执行前 ?? ??? ??? ??? ? destroyed:???? 标志着VUE对象已经销毁.
VUE 前后端调用
Ajax介绍
局部刷新,异步访问
?步骤: 1. 用户发起Ajax请求, Ajax内部机制,将请求交给Ajax引擎处理. 2. Ajax引擎接收到用户的请求之后,重写发起一个新的请求.访问后端服务器. 3. 当服务器端接收到了 Ajax请求之后,完成业务处理.之后将数据响应给Ajax引擎. 4. Ajax引擎通过事先约定好的 回调函数, 将服务器数据 交还给用户. 5.用户在请求的过程中,可以完成自己的任务. 注意事项: 多个Ajax的请求 不关注顺序. 导入axios.js
?????????????? 1.请求类型 ?? ??? ??? ??? ??? 1. get? 执行查询业务 ?? ??? ??? ??? ??? 2. post 执行form表单提交(登录/新增) ?? ??? ??? ??? ??? 3. put? 执行修改操作 ?? ??? ??? ??? ??? 4. delete 执行删除业务时. ?? ??? ??? ??? ?? ? ?? ??? ??? ??? ?2. axios语法 ?? ??? ??? ??? ??? axios.get("url地址信息","参数信息") ?? ??? ??? ??? ??? ??? ?.then(function(args){ ?? ??? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ??? ?}) ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ?3. 关于args参数说明 ?? ??? ??? ??? ??? ?axios为了统筹请求状态.将所有的数据封装为 ?? ??? ??? ??? ??? ?promise对象 ?
?Controller 层开启跨域机制
@CrossOrigin
<!DOCTYPE html> <html> ?? ?<head> ?? ??? ?<meta charset="utf-8"> ?? ??? ?<title>前后端调用</title> ?? ??? ?<script src="../js/axios.js" type="text/javascript" charset="utf-8"></script> ?? ?</head> ?? ?<body> ?? ??? ?<!-- 查询id=1的用户 ?? ??? ? url:http://localhost:8080/axios/getUserById?id=1--> ?? ??? ? <script type="text/javascript"> ?? ??? ? axios.get("http://localhost:8080/axios/getUserById?id=1").then( ?? ??? ? promise => { ?? ??? ??? ? console.log(promise.data) ?? ??? ? } ?? ??? ? )?? ? ?? ??? ? //查女 大于19 ?? ??? ?? let sex2="女" ?? ??? ?? let age2=18 ?? ??? ?? axios.get(`http://localhost:8080/axios/user/${sex2}/${age2}`).then(promise => { ?? ??? ??? ?? console.log(promise.data) ?? ??? ?? }) ?? ??? ?? // 对象传参 ?? ??? ?? let user ={ ?? ??? ??? ?? name:"王昭君", ?? ??? ??? ?? sex:"女", ?? ??? ??? ?? age:19 ?? ??? ?? } ?? ??? ?? axios.get("http://localhost:8080/axios/getUser",{params:user}).then( ?? ??? ?? promise => { ?? ??? ??? ?? console.log(promise.data) ?? ??? ?? } ?? ??? ?? ) ?? ??? ? </script> ?? ?</body> </html>
|