VUE 基础知识篇一
HELLO WORLD VUE:
参看链接vue
vue -cli 构建vue 工程,对于开发版本和生产版本不同在于,开发版本中包中文件没有经过压缩,方便进行调试和查看对应的脚本信息
1. npm install -g @vue/cli
2. vue create my-project-name
let : 定义变量,const 定义常量一旦初始化,无法重新定义
1.对于原始jS中与Vue 区别:传统方式采用命令式编程,vue采用生命式编程(实例管理,只需要声明的变量)
1). 创建div 元素,设置id 属性
2). 定义一个变量叫message
3). 将message 变量放到前面div 元素中显示
声明方式将数据和界面进行分类,只需要嵌套一些东西,vue中变量数据放生变化,界面数据会发生变化, vue 的响应式非常强大
vue 计数器:
思路:定义一个变量,通过按钮让变量值发生变化,增加或者减少。v-on:click
指令进行监听
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<h2>当前技术: {{counter}}</h2>
<!--通过添加函数-->
<button v-on:click= "add">+</button>
<button v-on:click="subtraction">-</button>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
counter: 0
},
methods:{
add: function(){
//不能直接写counter 认为是全局变量,app/this,
// 里面做了一层代理
this.counter ++;
},
subtraction: function(){
this.counter --;
}
}
})
</script>
</body>
</html>
Vue 中mvvm
mvvm: model viewModel view:
- 1.viewmodel 将 model中数据直接绑定view中,支持即刻响应模式,一旦model中数据发生修改,DOM中值也会进行修改。
- 2.view 中如果发生一些事件或者监控操作,通过路径将数据传输给model ,
-
- vue基础的类型, 组件中必须是函数
开发中什么叫方法什么是函数:本质区别:定义在类中叫方法与某个实例相关联的,函数独立的不在某个类中
- vue基础的类型, 组件中必须是函数
vue的生命周期:
当vue中执行某个阶段中,vue源代码中进行回调,某个时期执行这个回调周期,里面通过callHook 进行回调,在运行到某个阶段,进行钩子设置,vue 实例,同样也是在组件中,组件会被销毁,mounted , update等生命周期
vue mustache 语法
形成简单的代码规范,缩进2个空格,更加规范
mustache 也就是{{}},mustache 可以包含简单的表达式
v-once
v-once: 只会保存一次值,之后不会进行及时响应变化
v-once: 无需添加命令:
<div id = "app">
<h2 v-once>{{message}}</h2>
</div>
v-html
解决服务器返回的格式是标签方式,采用v-html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<h2 v-html = "url"></h2>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
url: '<a href = "www.baidu.com">百度一下</a>'
}
})
</script>
</body>
</html>
V-text
v-test 使用并不是很灵活,没有mustache 效果,v-test 会把后面拼接字符串文本覆盖掉
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<h2>{{message}}, 我是谁</h2>
<h2 v-text = "message">, 我是谁</h2>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
url: '<a href = "www.baidu.com">百度一下</a>'
}
})
</script>
</body>
</html>
v-pre
用来跳过元素和子元素的编译,将里面内容不进行编译,直接显示出来,不需要进行解析
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<h2 v-pre>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
url: '<a href = "www.baidu.com">百度一下</a>'
}
})
</script>
</body>
</html>
v-cloak
解决浏览器显示出没有编译代码,cloak 斗篷用来进行遮挡,解决浏览器在运行过程中出现卡顿过程。
在vue 解析之前,div 中有一个属性v-cloak,在vue 解析后,div 没有一个属性v-cloak 和CSS样式结合使用,后面使用虚拟DOM
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
[v-cloak] {
display: none;
}
</style>
</head>
<body>
<div id="app" v-cloak>
<h2 v-pre>{{message}}</h2>
</div>
<script src="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
url: '<a href = "www.baidu.com">百度一下</a>'
}
})
</script>
</body>
</html>
v-bind
动态绑定,比较重要,有对应缩写::
基础动态绑定url
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<img v-bind:src = "imageUrl" alt=""/>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
imageUrl: 'https://m.360buyimg.com/babel/jfs/t1/56015/5/10346/150886/5d78e9ddEf7d2c431/8e8d54aa37eb47e4.jpg'
}
})
</script>
</body>
</html>
v-bind 绑定动态class对象
给列表 选中就显示谁,其他给其删除:绑定一个对象语法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.active {
color: red;
}
</style>
</head>
<body>
<div id = "app">
<!-- 控制bool 动态显示哪个class -->
<h2 v-bind:class = "{active: isActive, line: isLine}">{{message}}</h2>
<button v-on:click="btnClick">按钮</button>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
isActive: true,
isLine: true
},
methods:{
btnClick : function(){
this.isActive = !this.isActive
}
}
})
</script>
</body>
</html>
v-bind绑定样式
- CSS属性名称时候,比如font-size
- 使用驼峰命名方式fontSize
- 短横线分割kebao-case font-size
- 绑定class有两种语法:
- 对象语法
- 数组语法
动态绑定样式,在组件化开发时候需要绑定对应的样式
将导航栏单独封装成为一个组件,后续过程中使用这个组件,封装单独组件可以进行复用,
v-for and v-bind 做一个小东西:点击列表哪一项,哪一项就会文件变成红色
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<!-- vue 没有添加'' 会将其当成一个变量 简单绑定 -->
<h2 :style="getStyle()">{{message}}</h2>
<ul>
<li v-for="item in movies">
{{item}}
</li>
</ul>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
movies: ['海王','速度与激情'],
finalSize: '50px',
finalColor: 'red'
},
methods:{
getStyle: function(){
return {fontSize: this.finalSize, color: this.finalColor }
}
}
})
</script>
</body>
</html>
vue 中computed 复杂计算属性
计算属性和函数调用最大区别在于: 计算属性具有缓存值,函数调用没有,对于不需要频繁计算属性,使用计算属性
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<!-- 计算属性 直接写属性名称,不需要添加小括号 -->
<h2>总价格{{totalPrice}}</h2>
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
books : [
{id: 110, name: 'Unix编程', price: 119}
]
},
// 计算属性,按照属性方式
computed:{
// 定义函数,进行复杂逻辑计算
fullName: function(){
return this.message
},
totalPrice: function(){
return this.books.reduce(function(pre,cur){
return cur.price + pre;
}, 0)
}
}
})
</script>
</body>
</html>
计算属性中setter 和 getter
如果计算属性中没有setter 方法,只有只读属性
计算属性如果只有getter方法,直接化简单方式
直接使用setter方法中,注意其中应该带有参数
vue 的事件监听 v-on
特别是事件监听,用来与鼠标和键盘事件的监听
- v-on 中参数传递问题:·
语法糖 @
在点击按钮过程中需要传递一些参数:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<button @click="btn1Click(123)"></button>
<!-- 如何获取浏览器参数event, 传入$event 不会把event当中变量 -->
<button @click="btn2Click(123, $event)"></button>
</div>
<script src="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
movies: ['海王', '速度与激情']
},
methods: {
btn1Click(param) {
console.log(param);
},
btn2Click(param1, event){
console.log('----', param1, e)
}
}
})
</script>
</body>
</html>
高级应用
v-model 表单绑定
v-model
对表单进行双向绑定,在用户的消息交互过程中 实现表单元素和数据的双向绑定,监控用户输入,对用户输入进行检测
- v-mode 基础使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<!-- 将message绑定到DOM message中及时响应 -->
<input type="text" v-model = "message" />
{{message}}
</div>
<script src ="../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
movies: ['海王','速度与激情']
}
})
</script>
</body>
</html>
v-model 使用 v-bind,v-on 组合实现相同功能:本质操作包含两个 v-bind 和v-on
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<!-- 将message绑定到DOM message中及时响应 监听用户输入-->
<input type="text" :value = "message" v-on:input="valueChange" />
<h2>{{message}}</h2>
</div>
<script src ="../../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world'
},
methods:{
// 一旦产生事假后,浏览器产生一个event对象
valueChange(event){
this.message = event.target.value;
}
}
})
</script>
</body>
</html>
v-mode 和 radio 绑定
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<!-- v-model radio 结合 name 保证唯一性-->
<label for = "male">
<input type = "radio" id = 'male' name = 'sex' value = '男' v-model = 'sex'/> 男
</label>
<!-- v-model 绑定同一个变量,保持互斥 -->
<!-- v-model 默认选中男 -->
<label for = "female">
<input type = "radio" id = 'female' name = "sex" value = '女' v-model = 'sex'/> 女
</label>
<h2>您选择性别: {{sex}}</h2>
</div>
<script src ="../../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
sex: '男'
},
methods:{
}
})
</script>
</body>
</html>
v-model 与checkbox 联合使用
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id="app">
<label for="">
<!-- 单选或者复选 label 点击文字可以选中 -->
<input type="checkbox" id="license" v-model="isAgree" /> 同意协议
</label>
<br />
<button :disabled="!isAgree">下一步</button>
<br>
<label for="">
<!-- 单选或者复选 label 点击文字可以选中 -->
<input type="checkbox" id="license" value="足球" v-model="hobbies" /> 足球
</label>
<br />
<label for="">
<!-- 单选或者复选 label 点击文字可以选中 -->
<input type="checkbox" id="license" value="篮球" v-model="hobbies" /> 篮球
</label>
<br />
<label for="">
<!-- 单选或者复选 label 点击文字可以选中 -->
<input type="checkbox" id="license" value="排球" v-model="hobbies" /> 排球
</label>
<br />
<h2>选择:{{hobbies}}</h2>
</div>
<script src="../../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
isAgree: false,
hobbies: []
},
methods: {
}
})
</script>
</body>
</html>
v-model 与select结合
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<div id = "app">
<select name ="abc" v-model = "fruit">
<option value = "苹果" >苹果</option>
<option value = "梨子">梨子</option>
<option value = "桃子">桃子</option>
</select>
<h2> 多选</h2>
<br>
<select name ="abc" v-model = "fruits" multiple >
<option value = "苹果" >苹果</option>
<option value = "梨子">梨子</option>
<option value = "桃子">桃子</option>
</select>
<h2>多选结果:{{fruits}}</h2>
</div>
<script src ="../../js/vue.js"></script>
<script>
// let/const 在ES6 中
const app = new Vue({
el: "#app", // 用于挂载需要管理元素
data: {
message: 'hello world',
fruit: '苹果',
fruits: []
}
})
</script>
</body>
</html>