css层叠样式表是一门标记语言,并不是编程语言,因此不可以定义变量,可以引用,换句话说就是不具有任何语法支持,他主要缺陷如下:
导致无端添加了许多工作量,解决问题,前端开发人员会使用一中称为**【CSS预处理器】**的工具,提供缺失的样式层复用机制,减少冗余代码,提高代码的可维护性,提高开发效率
CSS预处理器定义了一种新的语言,其基本思想,用一种专门的编程语言,为CSS增加了一些编程的特性,将CSS作为目标生成文件,然后开发者只要使用这种语言,进行css编码工作,用一种专门的编程语言,进行Web页面样式设计,在通过编译器转化为正常的CSS文件,以供项目使用
javaScript 一门弱类型的脚本语言,启源代码在发往客户端运行之前不需要经过编译,而是将文本格式的字符代码发送给浏览器有浏览器解析运行
原生JS开发,也就是按照【ECMAScript】标准的开发方式,简称ES,特点是所有浏览器都支持
主要目的是实现一套代码三端统一(PC、Android:.apk、iOS:.ipa)能够调用设备底层赢件(如:传感器、GPS、摄像头等),打包方式主要有以下两种:
UI开发的框架:WeUI
为了降低开发复杂度,以后端为出发点,比如:Struts、SpringMVC等框架的使用,就是后端的MVC时代
HandlerMapping
查找Hander
,可以根据xml
配置、注解进行查找HnandlerMapping
向前端控制器返回Handler
Handler
Handler
执行完成给适配器返回ModelAndView
ModelAndView
,ModelAndView
是SpringMVC
框架的一个底层对象,包括Model
和ViewJSP
View
ModelAndView
对象中)填充到request
域此处MV*模式下:
为了降低复杂度,涌现出大量的前端框架,比如:AngularJS(提现了前端的mvc模式)
、React(虚拟DOM)
、Vue.js
(把前两者结合起来了)、EmberJS
等,这些框架的原则是按类型分层,比如Templates、Controller、Models,然后再从内层做切分
前端为主MV* 模式解决了很多问题,但是还存在不足的地方,随着NodeJS的兴起,JavaScript开始有能力运行服务端,意味着可以有一种新的开发模式:
这种研发模式下,前后端的职责很清晰,对前端来说,两个UI层各司其职:
通过NodeJS,Web Server 层也是JavaScript代码,这意味着部分代码前后可以复用,需要SEO的场景可以再服务端同步渲染,由于一步请求太多导致的性能问题也可以通过服务端来缓解,前一种模式的不足,可以通过这种模式几乎能够完美解决
与JSP模式相比,全栈模式是一种会,也的却是一种原始开发模式回归,不过是一种螺旋上升式的回归
基于NodeJS的全栈模式,依旧勉励很多挑战:
是一套用于构建用户的渐进式框架,发布于2014.2与其他的大型框架不同的是,Vue被设计为可以自底向上逐层应用,Vue的和辛苦只关注视图层,不紧易于上手,还便于第三方库(vue-router:跳转,vue-resource:通信,vuex:管理)或既有项目整合
Vue.js的API是参考了AngularJS、KnockoutJS、Ractive.js、Rivets.js
开发商:优雨溪
Soc (Separation of concerns)原则关注点分离 :
HTML + CSS +JS : 视图:给用户看,刷新后台的数据
网络通信:axios
MVVM (Model-View -ViewModel) 是一种软件架构设计模式,有微软WPF(用于替代WinForm,以前就是这个技术开发桌面应用程序的)和Silverligth(类似与Java Applet,简单点就是浏览器上运行的WPF)的架构师Ken Cooper 和 Ted Peters 开发,是一种简化用户界面的事件驱动编程方式 由 John Gossman (同样也是WPF 和 Silverlight的架构师)于2005年在博客上发表
Data Bindings 数据绑定 ViewModel把这些数据绑定在Vue(DOM)里面 ,ViewModel通过解析Model更新到View页面上 直接就是把Model里面定义的数据给他绑定到真实的DOM里面 ViewModel会监听View界面上的响应,然后回调到我们Model里面的定义的函数,然后就可以在这个Model的函数里面做更多的操作了
MVVM源自于经典MVC(Model-View-Contrller)模式,MVVM的核心是ViewModel层,负责转换Model中的数据对象来让数据变得更容易管理和使用,其作用如下:
MVVM已经相当成熟,主要运用不仅仅在网络应用陈程序中开发中,当下流行的MVVM框架有Vue.js、Angular.js等
在MVVM架构中,是不允许 数据 和 视图 直接通信的,只能通过ViewModel来通信,二ViewModel就是定义了一个Observer观察者
至此,我们就明白了,Vue.js就是一个MVVM的实现着,他的核心就是实现Dom监听与数据绑定
第一种方式,下面引入的是2.5.16版本,开发环境的cdn版本(开发环境版本,包含了有帮助的命令行警告,这里可以查阅2.6.10版本:https://cdn.jsdelivr.net/npm/vue/dist/vue.js
下面引入生产环境的cdn版本(生产环境版本,优化了尺寸和速度,这里可以查阅2.6.10版本:https://cdn.jsdelivr.net/npm/vue
v-bind等被称为指令,指令带有前缀v-,以表示它们是提供的特殊特性,他们会在渲染DOM上应用特殊的响应式行为,在这里表示:“将这个元素节点的title特性和Vue实例的message属性保持一致”
当你打开浏览器的JavaScript控制台,输入app.message=“新消息”,就会再一次看到这个绑定了title特性的HTML已经进行了更新
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
head>
<body>
<div id="app">
<span v-bind:title="message">
鼠标悬停几秒看看此处东热爱绑定的提示消息!
span>
{
{message}}
div>
<script>
var vm = new Vue({
el:"#app",
data:{
message:"hello vue!"
}
});
script>
body>
html>
什么是条件判断语句,以下两个属性
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
head>
<body>
<div id="app">
<h1 v-if="type==='A'">Ah1>
<h1 v-else-if="type==='B'">Bh1>
<h1 v-else-if="type==='D'">Dh1>
<h1 v-else-if="type==='C'">Ch1>
<h1 v-else>Gh1>
div>
<script>
var vm = new Vue({
el:"#app",
data:{
type: 'A'
}
});
script>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
head>
<body>
<div id="app">
<li v-for="item in items">
{
{item.message}}
li>
div>
<script>
var vm = new Vue({
el:"#app",
data: {
items: [
{
message:'狂神说java'},
{
message: '我学前端'},
{
message: '我爱中华'}
]
}
});
script>
body>
html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
head>
<body>
<div id="app">
<button v-on:click="sayHi">click Mebutton>
div>
<script>
var vm = new Vue({
el: "#app",
data: {
message: "狂神说Java"
},
methods:{
//方法必须定义在Vue的methods对象中,v-on:事件
sayHi:function () {
alert(this.message);
}
}
});
script>
body>
html>
Vue.js是一个MVVM框架,及数据双向绑定,即当数据发生变化的时候,视图也发生变化,真就是Vue.js的精髓之处
数据双向绑定,一定是对于UI控件来说的,非UI控件不会涉及到数据双向绑定,单项数据绑定是使用状态管理工具的前提,如果我们使用Vuex
,那么数据也是单项的,这时就会和双向数据绑定有冲突
在vue.js中,如果使用vuex
,实际上数据还是单项的,之说以说是数据双向绑定这是用的UI控件来说,对于我们处理表单,vue.js的双向数据绑定用起来就特别的舒服,及两者不互斥,在全局型数据流使用单项,方便跟踪;局部型数据流使用双向,简单易操作
你可以使用v-model指令在表单
及
元素上创建双向数据绑定,他会根据控件类型自动选取正确的方法来更新元素,尽管有些神奇,但
v-model
本质上不过时语法,负责监听用户的输入时间以及更新数据,并对一些极端场景进行一些特殊的处理
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="app">
下拉框:
<select v-model="shuxing">
<option disabled value="">---请选择---option>
<option>Aoption>
<option >Coption>
<option>Doption>
select>
<span>value:{
{shuxing}}span>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
<script>
var vm = new Vue({
el: "#app",
data: {
/*message: "123",*/
shuxing: ''
}
});
script>
body>
html>
实际开发中,我们通常采用vue-cli创建,.vue模板文件的方式开发,
什么是组件:组件是可复用的 Vue
实例,说白了就是一组可以重复使用的模板,跟JSTL的自定义标签、Thymeleaf的 th:fragment
等框架由衷的异曲同工之妙,通常一个应用会以一颗嵌套的组件树形式来组织:
假如,你可能有页头、侧边栏、内容区等组件,每个组件由包含其他的想导航栏连接、博文之类的组件
使用props属性传递参数
v-for="item in items"
:遍历Vue
实例中定义的名为items
的组件,并创建同等数量的组件
v-bind:item="item"
:将遍历的item
项绑定到组件中props
定义的名为item
属性上; =号左边的item为props定义的属性名,右边的的为item in items
中遍历的item项的值
什么是Axios:是一个开源的可以用在浏览端和NodeJS
的异步通信框架,他主要作用就是实现Axios异步通信,特点如下:
XMLHttpRequests
Node.js
创建http
请求Promise API【JS中链式编程】
由于Vue.js
是一个视图框架 并且作者(优雨溪)严格准守Soc(关注度隔离原则),所以Vue.js
并不包含Ajax的通信功能,为了解决通信问题,作者单独开发了一个名为vue-resource
的插件,不过在进入2.0版本以后停止了对插件的维护并推荐了Axious
框架,少用jQuery,因为他的操作Dom太频繁了
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<div id="vue">
<div>{
{info.name}}div>
<div>{
{info.address}}div>
<div>{
{info.links}}div>
div>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
<script src="https://unpkg.com/axios/dist/axios.min.js">script>
<script type="text/javascript">
var vm = new Vue({
el:'#vue',
data(){
return{
info:{
//请求的返回参数合适,必须和json字符串一样
name: null,
address: {
street:null,
city: null,
country: null
},
links:[
{
name: null,
url: null
},
{
name: null,
url:null
},
{
name: null,
url: null
}
]
}
}
},
mounted(){
//钩子函数 链式编程,es6新特性 get().then() 拿到数据并响应数据
axios.get("../data.json").then(response=>(this.info=(response.data)));
}
});
script>
body>
html>
计算属性的重点突出在属性
两个字上(属性属于名词),首先他是一个属性
其次这个属性有计算
的能力(计算是动词),这里的计算
就是这个函数,简单点来说买个他就是一个能够件计算结果缓存起来的属性(建新为转化成静态的属性),仅此而已,可以想象成缓存
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Titletitle>
<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js">script>
head>
<body>
<div id="app">
<p>currentTime1:{
{currentTime1()}}p>
<p>currentTime2:{
{currentTime2}}p>
div>
<script>
var vm = new Vue({
el: "#app",
data: {
message: "hello kuangshen"
},
//methods 方法 所有的方法都写在里面
methods: {
currentTime1 :function () {
return Date.now();//返回一个时间戳
}
},
//区别 methods通过方法名来调用 computed通过属性来调用 是内存里面的
computed: {
//计算属性 methods ,computed 方法可以不能重名 重名之后只会调用methods方法
currentTime2: function () {
return Date.now();
}
}
});
script>
body>
html>
vm.currentTiem2
改变下的数值,再测试观察结果调用方法时,每次都要进行计算,既然有计算过程则必定产生系统开销,如果不经意变化,此时可以考虑缓存把这个结果存起来,采用计算属性computed可以很方便做到,计算属性的主要特性是为了将不经常发生变化的计算结果进行缓存,可以节约系统开销
在Vue
中我们使用
元素作为承载分发内容的出口,作者称其为 插槽可以应用在组合组件的场景中
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载DOM、渲染——>更新——>渲染、卸载等一系列过程,我们成这就是Vue的生命周期,通俗的说就是Vue实例从创建到销毁的过程,就是生命周期
在Vue的整个生命周期中,他提供了一系列的事件,可以让我们从事件触发时注册JS方法,可以让我们用自己注册的js方法控制整个大局,在这些事件响应方法中的this直接指向的是Vue的实例
Vue-cli官方提供了一个脚手架。用于快速生成一个Vue的项目模板;预先定义好的目录结构以及基础代码,就好比创建maven项目可以选择一个顾家目录,这个骨架目录就是脚手架,开发更加快速
主要功能:
本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler)当webpack处理应用程序时,他会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每一个模块,然后将所有这些模块打包成一个或者多个bundle
Webpack是当下最热门的前端资源模块化管理和打包工具,他可以将许多松散偶尔的模块按照依赖和规则打包成符合生产环境部署的前端资源,还可以将按需加载的模块进行代码分离,等到实际需要实在一部加载,通过Loader 转换,任何形式的资源都可以当做模块,比如CommonsJS、AMD、ES6、CSS、JSON、ConffeeScript、LESS等
伴随着移动互联网的大潮,当今越来越多的的网站已经从网页模式进化到了WebApp模式,他们运行在现代浏览器里,使用HTML5、CSS3、ES6等新技术来开发丰富功能,网页已经不仅仅是完整浏览器的基本需求;WebApp 通常是一个SPA(单页面应用),每一个视图通过异步的方式加载,这导致叶明的初始化和使用过程中会加载越来越多的JS代码,真的给前端流程和资源组织带来了巨大挑战,
前端开发和其他的开发工作的主要区别,首先前端基于多语言,多层次的编码和组织工作,其次前端产品的交付是基于浏览器的,并且保证他们的浏览器快速、优雅的加载和更新,就需要以和模块化系统,这个理想中的模块化系统是前段工程师多年来一直探索的难题
Vue Router 是Vue.js官方的路由管理器,他和Vue.js的核心深度集成,让构建单页面应用变得易如反掌包含以下的功能有:
基于第一个vue-cli进行测试学习;先查看node_modules中是否存在vue-router
vue-router是一个插件包,所以我们还是需要用npm/cnpm来进行安装,打开命令行工具,进入你的目录,输入下面命令:
npm install vue-router --save-dev
如果在一个模块化工程使用它,必须通过Vue.use()明确安装路由功能:
import Vue from ‘vue’
import VueRouter from 'vue-router'
Vue.use(VueRouter);
安装Vue-axios
中…(img-IsJ2MU9C-1624074813424)]
[外链图片转存中…(img-O89Fw1Tt-1624074813425)]
Vue Router 是Vue.js官方的路由管理器,他和Vue.js的核心深度集成,让构建单页面应用变得易如反掌包含以下的功能有:
基于第一个vue-cli进行测试学习;先查看node_modules中是否存在vue-router
vue-router是一个插件包,所以我们还是需要用npm/cnpm来进行安装,打开命令行工具,进入你的目录,输入下面命令:
npm install vue-router --save-dev
如果在一个模块化工程使用它,必须通过Vue.use()明确安装路由功能:
import Vue from ‘vue’
import VueRouter from 'vue-router'
Vue.use(VueRouter);
安装Vue-axios