Vue
Vue
概述
Vue是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其他大型框架不同的是,Vue被设计为可以自底层向上逐层应用。Vue的核心只关注视图层,不仅易于上手,还便于第三方库。(如:vue-router,跳转,vue-resource,通信,vuex:管理)或既有项目整合。
官网:https://cn.vuejs.org/v2/guide/
前端知识体系
前端三要素
- HTML(结构层):超文本标记语言。决定网页的结构和内容。
- CSS(表现层):层叠样式,设定网页表现样式。
- JavaScript(行为层):是一种弱类型脚本语言,其源码不需要经过编译,而是由浏览器解释运行,用于控制网页的行为。
CSS
CSS 层叠样式表是一门标记语言,并不是编程语言,因此不可以自定义变量,不可以引用等,换句话说就是不具备任何语法支持,它主要缺陷如下:
- 语法不够强大,比如无法嵌套书写,导致模块化开发中需要书写很多重复的选择器;
- 没有变量和合理的样式复用机制,使得逻辑上相关的属性值必须以字面量的形式重复输出,导致难以维护;
这就导致了我们在工作中无端增加了许多工作量。为了解决这个问题,前端开发人员会使用一种称之为【CSS预处理器】的工具,提供 CSS缺失的样式层复用机制,减少冗余代码,提高样式代码的可维护性。大大提高了前端在样式上的开发效率。
- Less中文网:https://less.nodejs.cn/
- Less快速入门:https://less.bootcss.com/
- webpack打包
行为层JavaScript
三端统一
混合开发(Hybrid App)
主要的目的是实现一套代码三端统一(PC,Android:.apk,IOS:.ipa)并能够调用到设备底层硬件(如:传感器,GPS,摄像头等),打包方式主要有以下两种:
- 云打包:HBuild->HBuildX,DCloud出品;API Cloud
- 本地打包:Cordova(前身是PhoneGap)
微信小程序
方便微信小程序UI开发的框架:WeUI
后端技术
前端人员为了方便开发也需要掌握一定的后端技术,但我们Java后台人员知道后台知识体系极其庞大复杂,所以为了方便前端人员开发后台应用,就出现了 NodeJS这样的技术。
NodeJS的作者已经声称放弃NodeJS(说是架构做的不好再加上笨重的node modules,可能让作者不爽了吧),开始开发全新架构的 Deno。
既然是后台技术,那肯定也需要框架和项目管理工具,NodeJS框架及项目管理工具如下:
- Express: NodeJS 框架
- Koa:Express简化版
- NPM:项目综合管理工具,类似于 Maven
- YARN:NPM 的替代方案,类似于 Maven 和 Gradle的关系
主流前端框架
iView,ElementUI,ICE,VantUI,AtUI,CubeUI,
第一个Vue程序
安装vue插件(安装后若在新建项目中找不到):点击settings->editor->file and code templates->点击vue single file component点击上方copy temlpate即可。
下载地址
-
开发版本
- 包含完整的警告和调试模式:https://vuejs.org/
- 删除了警告:https://vuejs.org/js/vue.min.js
-
CDN
View
View是视图层,也就是用户界面。前端主要由HTML 和css来构建,为了更方便地展现 ViewModel 或者 Model 层的数据,已经产生了各种各样的前后端模板语言,比如 FreeMarker、Thymeleaf等等,各大MVVM 框架如Vuejs,AngularJS,EJS等也都有自己用来构建用户界面的内置模板语言。
Model
Model 是指数据模型泛指后端进行的各种业务逻辑外理和数据操控,主要围绕数据库系统展开。这里的难点主要在于需要和前端约定统一的接口规则。
ViewModel
ViewModel是由前端开发人员组织生成和维护的视图数据层。在这一层,前端开发者对从后端获取的 Model 数据进行转换处理,做二次封装,以生成符合 View 层使用预期的视图数据模型。
需要注意的是ViewModel所封装出来的数据模型包括视图的状态和行为两部分,而Model层的数据模型是只包含状态的。
-
比如页面的这一块展示什么,那一块展示什么这些都属于视图状态(展示)。
-
页面加载进来时发生什么,点击这一块发生什么,这一块滚动时发生什么这些都属于视图行为(交互)
视图状态和行为都封装在了ViewModel里。这样的封装使得ViewModel可以完整地去描述View 层。由于实现了双向绑定,ViewModel的内容会实时展现在 View 层,这是激动人心的,因为前端开发者再也不必低效又麻烦地通过操纵DOM去更新视图。
MVVM 框架已经把最脏最累的一块做好了,我们开发者只需要处理和维护ViewModel,更新数据视图就会自动得到相应更新,真正实现事件驱动编程。
View 层展现的不是 Model 层的数据,而是 ViewModel 的数据,由 ViewModel 负责与 Model层交互,这就完全解耦了View层和Model层,这个解耦是至关重要的,它是前后端分离方案实施的重要一环。
MVVM 模式的实现者
- Model:模型层,在这里表示JavaScript对象
- View:视图层,在这里表示 DOM(HTML操作的元素)
- ViewModel:连接视图和数据的中间件,Vuejs就是MVVM中的ViewModel层的实现者
在MVVM架构中,是不允许数据和视图直接通信的,只能通过ViewModel 来通信,而ViewModel就是定义了一个Observer观察者。ViewModel能够观察到数据的变化,并对视图对应的内容进行更新。ViewModel 能够监听到视图的变化,并能够通知数据发生改变。
至此,我们就明白了,Vue.is就是一个MVVM的实现者,他的核心就是实现了DOM监听与数据绑定。
为什么要使用 Vue.js
- 轻量级,体积小是一个重要指标。Vue.js 压缩后有只有 20多kb (Angular压缩后56kb+,React压缩后44kb+)
- 移动优先。更适合移动端,比如移动端的 Touch事件。易上手,学习曲线平稳,文档齐全
- 吸取了 Angular(模块化)和React(虚拟DOM)的长处,并拥有自己独特的功能,如:计算属性
- 开源,社区活跃度高
第一个Vue程序
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
{{message}}
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
//Model:数据
data:{
message:"hello,vue!"
}
});
</script>
</body>
</html>
V-bind
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
<span v-bind:title="message">鼠标悬停几秒种查看此处动态绑定的提示信息</span>
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
//Model:数据
data:{
message:"hello,vue!"
}
});
</script>
</body>
</html>
你看到的v-bind等被称为指令。指令带有前缀v-,以表示它们是Vue提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的title特性和Vue实例的message属性保持一致”。如果你再次打开浏览器的JavaScript控制台,输入appmessage='新消息,就会再一次看到这个绑定了title特性的HTML 已经进行了更新。
判断-循环
v-if,v-else
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
<h1 v-if="ok">Yes</h1>
<h1 v-else="ok">No</h1>
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
ok: true
}
});
</script>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
<h1 v-if="type==='A'">A</h1>
<h1 v-else-if="type==='B'">B</h1>
<h1 v-else-if="type==='D'">D</h1>
<h1 v-else>C</h1>
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
type: 'A'
}
});
</script>
</body>
</html>
V-for
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
<li v-for="item in items">
{{item.message}}
</li>
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
data:{
items:[
{message: '狂神说java'},
{message: '狂神说前端'},
]
}
});
</script>
</body>
</html>
事件
v-on监听事件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
<button v-on:click="sayhi">click</button>
</div>
<!--1.导入vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
let vm=new Vue({
el:"#app",
data: {message:"狂神说java"},
methods:{
//方法必须定义在vue的Method中,v-on:事件
sayhi:function (event){
alert(this.message);
}
}
});
</script>
</body>
</html>
表单双绑、组件
什么是双向数据绑定
Vue.js 是一个 MVVM 框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,视图发生变化的时候,数据也会跟着同步变化。这也算是 Vue.js 的精之处了。
值得注意的是,我们所说的数据双向绑定,一定是对于 UI 控件来说的,非 UI 控件不会涉及到数据双向绑定。单向数据绑定是使用状态管理工具的前提。如果我们使用 vuex ,那么数据流也是单项的,这时就会和双向数据绑定有冲突。
为什么要实现数据的双向绑定
在 Vue.js 中,如果使用 vuex ,实际上数据还是单向的,之所以说是数据双向绑定,这是用的Ul 控件来说,对于我们处理表单,Vue.js 的双向数据绑定用起来就特别舒服了。即两者并不互斥,在全局性数据流使用单项,方便跟踪:局部性数据流使用双向,简单易操作。
在表单中使用双向数据绑定
你可以用 v-model 指令在表单 、
本文作者:努力的小L
本文链接:https://www.cnblogs.com/sx-xiaoL/p/17589926.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步