前言:Vue.js的优点
体积小:压缩后只有33k;
更高的运行效率:基于虚拟DOM,一种可以预先通过JavaScript进行各种计算,把最终的DOM操作计算出来并优化的技术,由于这种DOM操作属于预处理操作,并没有真实的操作DOM,所以叫做虚拟DOM;
双向数据绑定:让开发者不用再去操作DOM对象,把更多的精力投入到业务逻辑上;
生态丰富、学习成本低:市场上拥有大量成熟、稳定的基于vue.js的ui框架及组件,拿来即用实现快速开发;对初学者友好、入门容易、学习资料多;
随着前端技术的不断发展,前端开发能够处理的业务越来越多,网页也变得越来越强大和动态化,这些进步都离不开JavaScript。在目前的开发中,已经把很多服务端的代码放到了浏览器中来执行,这就产生了成千上万行的JavaScript代码,他们连接着各式各样的HTML和CSS文件,但是缺乏正规的组织形式。这也是为什么越来越多的前端开发者使用JavaScript框架的原因,目前比较流行的前端框架有Angular、Reac、Vue等。
Vue是一款友好的、多用途且高性能的JavaScript框架,它能够帮助你创建可维护性和可测试性更强的代码库。Vue是渐进式的JavaScript框架,也就是说,如果你已经有了现成的服务端应用,你可以将Vue作为该应用的一部分嵌入其中,带来更加丰富的交互体验。或者如果你希望将更多业务逻辑放到前端来实现,那么Vue的核心库及其生态系统也可以满足你的各式需求。和其他框架一样,Vue允许你将一个网页分割成可复用的组件,每个组件都包含属于自己的HTML、CSS、JavaScript,以用来渲染网页中相应的地方。如果我们构建了一个大型的应用,可能需要将东西分割成为各自的组件和文件,使用Vue的命令行工具,使快速初始化一个真实的工程变得非常简单。
一、VUE介绍HelloWord
1、首先在VScode新建一个文件夹
2、引入VUE(就像后端引入一个框架的jar包一样)
参考官网https://cn.vuejs.org/v2/guide/installation.html#NPM
①npm引入
#首选在控制台执行
npm init -y
#然后
npm install vue
然后新建一个index.html,在页面输入!回车就可以自动生成如下页面
!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
//此处不是自动生成,而是自己引入vue
<script src="./node_modules/vue/dist/vue.js"></script>
</body>
</html>
②也可以使用script引入如下
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<div id="app">
<input type="text" v-model="num">
<button v-on:click="num++">点赞</button>
<button v-on:click="cancle">取消</button>
<h1>{{name}}很帅,有{{num}}个人为他点赞</h1>
</div>
<body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
let vm = new Vue({
el: "#app", //绑定元素
data: { //封装数据
name: "我",
num: 1
},
//声明方法
methods: {
cancle() {
this.num--
}
},
})
</script>
</body>
</html>
二、VUE指令
1、v-html和v-text:v-text不会进行编译,v-html会进行编译
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<div id="app">
{{msg}}
<spon v-html="msg"></spon>
<spon v-text="msg"></spon>
</div>
<body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
msg: "<h1>Hello</h1>"
}
})
</script>
</body>
</html>
2、v-bind和v-model
{{}}只能在标签外,二v-bind可以在标签内,以下是利用v-bind绑定链接,利用v-bind来绑定颜色,字体大小等等,v-bind是单向绑定的
v-model则是双向绑定,一般用于表单或者是自定义提交项
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<a v-bind:href="link">gogogo</a>
<span v-bind:class="{active:isActive,'text-danger':hasError}" v-bind:style="{color:color1,fontSize:size}">你好</span>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
isActive: "true",
hasError: "true",
link: "http:www.baidu.com",
color1: "red",
size: "50px"
},
})
</script>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<h4>精通的语言</h4>
<input type="checkbox" value="java" v-model="language">java<br>
<input type="checkbox" value="c++" v-model="language">c++<br>
<input type="checkbox" value="python" v-model="language">python<br> 选中了{{language.join(",")}}
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
language: [],
},
})
</script>
</html>
3、v-on
v-on可以绑定单击事件v-on:click="",简写就是@click,@就相当于v-on:
<!DOCTYPE html>
<html lang="en">
<script src="./node_modules/vue/dist/vue.js"></script>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<input type="text" v-model="num" @click="num=10" @keyup.up="num+=2" @keyup.down="num-=2">
</div>
</body>
<script>
new Vue({
el: "#app",
data: {
num: 1
},
})
</script>
</html>
4、v-for
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="(user,index) in users">
{{index}} ==>> {{user.name}}<br>
<span v-for="(v,k,i) in user">
{{i}} ==>> {{k}} ==>> {{v}}<br>
</span>
</li>
</ul>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
users: [{
name: "马云",
age: "59"
}, {
name: "胡歌",
age: "39"
}, ]
}
})
</script>
</html>
5、v-if、v-show页面效果是一样的,区别在于一个是通过样式来将他隐藏,一个是直接没有这段代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<input type="button" @click="show=!show" value="切换是否显示">
<h1 v-if="show">if</h1>
<h1 v-show="show">if</h1>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
show: true
},
})
</script>
</html>
6、计算属性和侦听器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li>西游记,价格:{{xprice}},数量:<input type="text" v-model="xnum" @click="xnum++"></li>
<li>水浒传,价格:{{yprice}},数量:<input type="text" v-model="ynum"></li>
<!-- <li>totalprice:{{xprice*xnum+yprice*ynum}}</li> -->
<li>totalprice:{{totalprice}}</li>
<li>{{msg}}</li>
</ul>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
new Vue({
el: "#app",
data: {
xprice: 10,
yprice: 20,
xnum: 1,
ynum: 2,
msg: ""
},
//计算属性
computed: {
totalprice() {
return this.xprice * this.xnum + this.yprice * this.ynum;
}
},
//侦听器
watch: {
xnum: function(newVal, oldVal) {
if (newVal >= 3) {
this.msg = "库存超出限制"; //将msg的值改变
this.xnum = 3; //将xnum设置为最大值
} else {
this.msg = "";
}
}
},
})
</script>
</html>
7、过滤器
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<ul>
<li v-for="user in userList">
{{user.id}} -->> {{user.name}} -->> {{user.gender==1?"男":"女"}}-->>
<br> {{user.id}} -->> {{user.name}} -->> {{user.gender| gFilter}}-->>
</li>
</ul>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
Vue.filter("gFilter", function(val) {
if (val == 1) {
return "男的";
} else {
return "女的";
}
})
let vm = new Vue({
el: "#app",
data: {
userList: [{
id: 1,
name: "jack",
gender: 1
}, {
id: 2,
name: "tom",
gender: 2
}, ]
},
})
</script>
</html>
8、组件化
①组件其实就是一个vue实例,因此定义时也会接收data,methods等
②组件不会与页面的元素绑定,否则就无法复用,因此没有el属性
③但是组件渲染需要html模板,所以增加了template属性,值就是html属性
④全局组件定义完毕,任何vue实例都可以直接在html中通过组件名称来使用组件了
⑤data必须是一个函数,不再是一个对象
全局和局部组件如下演示
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<div id="app">
<button @click="count++">我被点击了{{count}}次</button>
<counter></counter>
<button-counter></button-counter>
</div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
//全局声明一个组件
Vue.component("counter", {
template: '<button @click="count++">我被点击了{{count}}次!!!</button>',
data() {
return {
count: 1
}
}
});
//局部声明组件
const buttonCounter = {
template: '<button @click="count++">我被点击了{{count}}次啊啊</button>',
data() {
return {
count: 1
}
}
};
new Vue({
el: "#app",
data: {
count: 1
},
components: {
'button-counter': buttonCounter
}
})
</script>
</html>
三、VUE模块开发
1、开发准备
①全局安装webpack
npm install webpack -g
②全局安装vue脚手架
npm install -g @vue/cli-init
③初始化vue项目
#vue脚手架使用模板初始化一个appname项目
vue init webpack appname
④启动vue项目
#项目中有package.json中有scripts,代表我们能运行的命令
#npm start运行命令
npm run dev
2、VUE每个文件干啥的
webpack生成vue目录结构1、build是存放打包工具webpack有关的代码
2、config是一些配置信息
3、node_modules是当前项目里的所有依赖,也就是npm install安装进来的
4、src是平常用到的功能文件夹,一般都会在src里面操作
5、static存放一些静态资源图片字体之类
6、剩下的也是一些配置文件,比如说babelrc是语法转移的相关工具
7、index.html是首页内容
8、package-lock.json是npm依赖包的一些信息,会将每一个依赖的详细信息列出来
9、最后,我们开发一般专心用src就可以了
3、项目运行流程:
主入口是index.html,main.js的Vue实例就挂在了index.html上
index.html main.js 在vue里面的路由如上就相当于导入了main.js同级目录router文件夹下的内容,其中包含index.js,如图index中export导出了一个组件,在main.js中就导入了这个组件,并且自己起了个名字router
index.js app.vue如上导入了组件vue,最后还有一个模板渲染组件template也就是App组件,组件主要分为以下三部分,以后多模块开发也会分为这三个组件来开发。
.vue组件的三部分 App.vue详细结构如上模板template具体分为两个部分,上面是一个<img>,下面<router-view/>路由视图,要根据下面的访问路径具体决定。也就是根据index.js中的路由规则决定的。所以如下访问“/”就是访问组件HelloWord也就是HelloWord.vue
image.png四、vue的生命周期
https://blog.csdn.net/haochangdi123/article/details/78358895
四、Element——Vue的组件库
1、安装
参考官网:https://element.eleme.cn/#/zh-CN/component/quickstart
#推荐使用
npm i element-ui -S
#安装element-ui和样式组件
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
Vue.use(ElementUI);
这样ElementUI组件就导入进来了
网友评论