1.淘宝镜像
npm 的下载是需要访问国外服务器才可以下载 但是国内访问很慢 所以淘宝集团 自行搭建了一个服务器 这个服务器每隔10分钟就会把npm国外服务器的内容拉去一次 就叫淘宝镜像
要使用需要配置:npm i -g cnpm --registry=https://registry.npm.taobao.org
然后在当下目录cmd,执行命令
获取vue的依赖库 cnpm install --save vue
什么是html标签的属性
扩展标签的功能
属性的语法 必须写在开标签中 属性="属性值"
vue
Vue是什么
vue.js是当今最为主流的MVVM框架
作者:尤雨溪 前Google员工
MVVM
MVVM是一种编程的思想 在这个思想下 更加专注于业务的开发(功能),让我们的开发变得更加简单
M ------ model 模型=数据
V ------ view 视图=界面(写出来用户可以看到的内容)
VM -------viewmodel 视图模型 用来传递模型和关联视图的
Vue优势
vue的开发目的
vue初体验
获取vue的依赖库 npm install --save vue
(在淘宝镜像上获取: cnpm install --save vue)
编写如下内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- 步骤
1.下载包
2.引包 -->
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<!-- M model 模型=数据
V view 视图=界面
VM viewmodel 视图模型 用来传递模型和关联视图的 -->
<!-- 3.新建v层 -->
<div id="demodiv">
{{text}}
<!-- 双括号里是表达式 -->
</div>
<script>
// 4.新建VM层 就是Vue实例
new Vue({
el:"#demodiv",
// 5.编写m层
data:{
text:"你好呀"
}
})
</script>
</body>
</html>
{{}}是什么?
{{表达式--通过计算返回结果的公式}}
{{}} 大括号赋值法/双大括号/模板语法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="demodiv">
<h1>双大括号赋值法</h1>
<h1>{{text}}</h1>
<h1>{{num+2}}</h1>
<h1>{{bool?"你好呀":"怎么呢"}}</h1>
<h1>{{arr}}</h1>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
text:"字符串",
num:18,
bool:false,
arr:[1111,2222,3333,4444],
obj:{
name:"xixi",
age:18
}
}
})
</script>
</body>
</html>
vue渲染数据
vue.js的核心就是数据驱动 vue的数据驱动就是视图的内容是根据模型data数据的改变而改变的
数据驱动的分类
1.声明式渲染 我们只需要告诉程序 想干什么 那么程序就会自动来完成
2.命令式渲染 我们需要一步一步的指挥着程序 程序才会按照我们的指令去执行
指令
在vue中 使用v-开头html特殊属性
指令的作用:在Vue中扩展标签的功能
指令的语法:写在html开标签中且 v-指令="指令值"
v-model
作用:用于 表单元素上 完成数据的双向绑定
语法:v-model="值"
双向绑定
用户可以看见的界面中也就是v层视图层 改变了数据 那么data中的内容也就会改变 视图变模型变
模型改变了 反之也会让视图发生改变 模型变视图变
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="demodiv">
<h1>v-model</h1>
<!-- 双向绑定
用户可以看见的界面中也就是v层(视图层) 改变了数据的 那么data中的内容也就会改变 视图变模型变
模型改变了 反之也会让视图发生改变 模型变视图变 -->
<input type="text" v-model="inputval">
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
<h1>{{inputval}}</h1>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
inputval:""
}
})
</script>
</body>
</html>
双向绑定的原理
双向绑定是通过 数据劫持 与 发布者订阅者模式来实现的
数据劫持:数据(变量)劫持(拦截)就是当数据改变的时候 我要拦截到这次改变 通知模型或者视图发生改变
通过一个Object.defineProperty()来监听数据,当数据改变的时候他就会被触发 从而通知另外一方(有一个get的方法和set的方法 分别是读取与修改)
发布者订阅者模式:就是一个一对多的关系 ,当发布者改变了 其所有的订阅者也会随之发生改变
v-show
作用:控制dom元素的显示和隐藏
语法:v-show="返回值为布尔值的表达式" true 显示 false隐藏
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="demodiv">
<h1>v-show</h1>
<!-- 如果给复选框绑定一个变量,那么这个变量就会随着勾选和取消在true和false中切换 -->
<input type="checkbox" v-model="bool">{{bool?"显示了":"隐藏了"}}
<h1 v-show="bool">我是测试显示和隐藏的元素</h1>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
bool:true
}
})
</script>
</body>
</html>
v-on
作用:就是给dom元素绑定事件的
语法:v-on:去掉on的事件="函数" 简写就是 @
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<h1>v-on</h1>
<!-- 绑定事件用v-on -->
<div id="demodiv">
<button v-on:click="fun()">点我绑定事件</button>
<!-- v-on简写:把v-on:替换成@ -->
<button @click="fun()">简写写法</button>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
},
// methods来创建函数
methods:{
// 函数名(){
// }
fun(){
console.error("你好啊");
}
}
})
</script>
</body>
</html>
v-for
作用:遍历展示数据
v-for="(v,i) in arr"
语法:v-for"(参数1-----遍历出来的值,参数2-------遍历出来的下标) in 你要遍历的数据
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="demodiv">
<h1>v-for</h1>
<ul>
<li v-for="(v,i) in arr">{{v}}</li>
</ul>
<hr>
<table border="1">
<tr v-for="(v,i) in obj">
<td>{i}</td>
<td> {{v.name}} </td>
<td> {{v.age}} </td>
</tr>
</table>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
arr:["ddd","dee","ttt","rvv"],
obj:[
{name:"ccc1",age:10},
{name:"ccc2",age:11},
{name:"ccc3",age:12},
{name:"ccc4",age:13}
]
}
})
</script>
</body>
</html>
v-bind(使用中最容易忽略的指令)
作用:就是给html的属性插入变量
语法:v-bind:html标签的属性="变量" 简写 :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="../node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="demodiv">
<h1>v-bind</h1>
<!-- HTML的属性插变量使用v-bind -->
<a v-bind:href="ahref"> {{atext}} </a>
<!-- 简写 v-bind:替换成 : -->
<a :href="ahref"> {{atext}} </a>
</div>
<script>
new Vue({
el:"#demodiv",
data:{
ahref:"http://www.baidu.com",
atext:"点我去百度"
}
})
</script>
</body>
</html>