1 VUE入门案例
1.1 Vue基本用法:
<!-- 基本语法
1.导入JS类库.
2.指定VUE渲染区域 标签体
3.实例化VUE对象
4.数据取值
-->
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>入门案例</title>
</head>
<body>
<!-- 基本语法
1.导入JS类库.
2.指定VUE渲染区域 标签体
3.实例化VUE对象
4.数据取值
-->
<div id="app">
<!-- 插值表达式取值 -->
<h1>{{msg}}</h1>
</div>
<!-- 1.导入JS类库 -->
<script src="../js/vue.js"></script>
<!-- 2.创建VUE对象 -->
<script>
/* 关于JS中变量定义说明:
1.var 没有作用域的概念 容易出现安全性问题. 成员变量
2.let 作用于var类似, 有作用域的概念 局部变量
3.const 定义常量
*/
const app = new Vue({
el: "#app",
data: {
msg: "vue入门案例 哈哈哈哈"
}
})
</script>
</body>
</html>
1.2 var/let/const说明
1 var 没有作用域的概念,容易出现安全问题,相当于java中的成员变量
2 let 作用与var类似,有作用域的概念,相当于java中局部类型
3 const 定义变量
1.3 v-text/v-html说明
1 {{msg}} 插值表达式 初加载或者刷新时可能会出现闪现问题:闪现:出现一瞬间的{{msg}}而不是赋的值
2 v-text:当页面没有渲染完成时,不予在页面中展示
3 v-html 将html代码片段 渲染展现
<div id="app">
<h1>{{msg}}</h1>
<!-- 1.v-text -->
<h1 v-text="msg"></h1>
<!-- 2.v-html -->
<div v-html="div"></div>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
msg: "vue入门案例 哈哈哈哈",
div: "<h3>我是一个标题标签</h3>"
}
})
</script>
1.4 双向数据绑定
遇到文本框 双向数据绑定.
1.用户的输入变化 则data数据变化.
2.data数据变化, 则文本框的展现变化.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>入门案例</title>
</head>
<body>
<div id="app">
用户名: <input type="text" v-model="username"/>
密码: <input type="text" v-model="password"/>
<br>
{{username}}
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
username: '',
password: ''
}
})
</script>
</body>
</html>
1.5 MVVM思想:
M: model 数据层
V : 视图层
VM : 视图数据的控制层
DOM:前的整个页面的展现就是一个DOM
虚拟DOM : VUE内部为了提高相应速度,依赖的重要组成组件(操作内存数据,内存数据一旦改变,相对应的页面立即变化)
流程:
1. Model变化, 虚拟DOM操作内存数据变化. 所以页面变化.
2. View变化, 虚拟DOM操作内存数据变化, 数据变化
1.6 事件绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>事件绑定</title>
</head>
<body>
<div id="app">
<!-- 事件绑定的语法:
v-on:click="简单的计算"
v-on:click="点击事件"
-->
展现数据: {{num}}
<button v-on:click="num++">自增</button>
<!-- <button v-on:click="addNum">自增函数</button> -->
<button @click="addNum">自增函数</button>
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
num: 100
},
methods: {
addNum(){
this.num ++
}
/* addNum: function(){
this.num ++
} */
}
})
</script>
</body>
</html>
1.7 分支结构
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>指令学习</title>
</head>
<body>
<div id="app">
{{msg}}
<button v-on:click="msg++">加一</button>
<button @click="add">减一</button>
<!-- <input type="text" v-model="score" /> -->
等级:
<h3 v-if="msg >= 90">优秀</h3>
<h3 v-else-if="msg >= 80">良好</h3>
<h3 v-else-if="msg >= 70">普通</h3>
<h3 v-else>继续努力</h3>
<!-- 命令
1 v-if 如果判断为true 则展现元素
2 v-else-if 如果不满足v-if 检查是否满足v-else-if
3 v-else 上述都不满足才展现
-->
</div>
<!-- 内存变化,view就变化 -->
<!-- 基本语法
1 导入JS类库
2 指定VUE渲染区域
3 实例化VUE对象
4 数据取值
-->
<!-- 1 导入JS类库-->
<script src="../js/vue.js"></script>
<!-- 2 创建VUE对象-->
<script>
/* 1 var 没有作用域的概念,容易出现安全性问题 成员变量
2 let 作用与var类似,有作用域的概念 局部变量
3 const 定义常量
*/
const app = new Vue({
el:"#app",
data:{
msg:"80",
},
methods:{
add:function(){
this.msg --
}
}
}
)
</script>
</body>
</html>
1.8 循环结构
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>循环结构</title>
</head>
<body>
<div id="app">
<!-- 指令: v-for 展现的标签 -->
<!-- 案例1: 以循环方式输出爱好 -->
<div id="demo1">
<!-- 如果只有一个参数,则value表示数据 -->
<p v-for="value in hobby" v-text="value"></p>
</div>
<hr />
<!-- 案例2: 以循环方式输出爱好 展现下标
arg1: value的值的数据
arg2: 下标的数据.
-->
<div id="demo2">
<p v-for="arg1,arg2 in hobby">
<span v-text="arg2+1"></span>
----
<span v-text="arg1"></span>
</p>
</div>
<hr />
<div id="demo3">
<table border="1px" width="90%">
<tr align="center">
<td>编号</td>
<td>名称</td>
<td>年龄</td>
</tr>
<!-- 遍历数据获取对象,之后从对象中获取属性 -->
<tr align="center" v-for="user in userList">
<td v-text="user.id"></td>
<td v-text="user.name"></td>
<td v-text="user.age"></td>
</tr>
</table>
</div>
<hr />
</div>
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
hobby: ["敲代码","改BUG","钻研技术"],
userList: [{id:100,name:"泰森",age:60},
{id:101,name:"嘴炮",age:40},
{id:102,name:"泰坦巨猿",age:300000},
]
},
methods: {
}
})
</script>
</body>
</html>
1.9 MVC 设计思想
前端:视图:用户看到的页面(html)
后端:SpringBoot,Spring,Mybatis 等
M : 为持久层与数据库
V : 前端视图:用户看到的数据
C : 控制程序的流转 Contruller层 与Service层
1.10 表单的双向数据绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>循环结构</title>
</head>
<body>
<div id="app">
<!-- 表单中的那些标签可以使用双向数据绑定
双向数据绑定:用户可以录入的标签
1 input:单选,双选,下拉,文本域等等
-->
<form action="http//baidu.com">
<div >
<!-- 懒加载 输入后 离焦在进行数据的双向绑定-->
用户名:<input type="text" v-model.lazy="username" />
{{username}}
</div>
<div>
性别:<input type="radio" value="男" name="aa" v-model="age" />男
<input type="radio" value="女" name="aa" v-model="age"/>女
</div>
<div >
<!-- 多个用数组接取-->
<input type="checkbox" name = "bb" value="敲代码" v-model="hobby"/>敲代码
<input type="checkbox" name = "bb" value="打游戏" v-model="hobby"/>打游戏
<input type="checkbox" name = "bb" value="叽叽叽" v-model="hobby"/>叽叽叽
</div>
<!-- Vue 的点击事件中有一个方法,可以取消标签的默认行为
@click.prevent
常用场景:
1 form标签 阻止action 跳转
2 a标签 阻止herf跳转
-->
<input type="submit" value="提交" @click.prevent="formBtn" />
</form>
<a href="www.hao123" @click.prevent>点击</a>//可以拦截
</div>
<a href="www.hao123" @click.prevent>点击</a>//不可以拦截
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
data: {
username:"",
age:"男",
hobby:["叽叽叽"],
},
methods: {
formBtn(){
alert("ajks");
}
}
})
</script>
</body>
</html>
懒加载 : v-model.lazy 当离焦后(输入完成,回车) 才开始数据绑定
转化类型 :v-model.number 将input输入的为字符串转化为数字
去除前后多余的空格(中间的不行) : v-model.trim
拦截form,a标签跳转: @click.prevent
<input type="submit" value="提交" @click.prevent="formBtn" />
<a href="www.hao123" @click.prevent>点击</a>//可以拦截
注意:所有标签都需要写道挂载点内,否则所有标签不生效
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>循环结构</title>
</head>
<body>
<div id="app">
<a href="www.hao123" @click.prevent>点击</a>//可以拦截
</div>
<a href="www.hao123" @click.prevent>点击</a>//不可以拦截
<script src="../js/vue.js"></script>
<script>
const app = new Vue({
el: "#app",
})
</script>
</body>
</html>