Vue遵循Soc关注度分离原则
是纯粹的视图层框架
并不包含AJAX之类的通信功能
使用Axios框架做异步通信
Vue 的核心库只关注视图层
,方便与第三方库或既有项目整合
HTML + CSS + JS : 视图: 给用户看,刷新后台给的数据
AngulaJS
的模块化
开发React
的虚拟DOM
虚拟DOM
:把DOM操作放到内存中执行v-if
v-else-if
v-else
v-for
v-on
: 绑定事件 , 简写为@
v-model
: 数据双向绑定v-bind
: 给组件绑定参数,简写为:
slot
:插槽this.$emit("事件名",参数);
计算属性
的特色:缓存计算数据
图源:https://blog.csdn.net/github_37516320/article/details/78321391
概念
关注点分离(Separation of concerns,SOC)是对只与“特定概念、目标”(关注点)相关联的软件组成部分进行“标识、封装和操纵”的能力,即标识、封装和操纵关注点的能力。
是处理复杂性的一个原则。由于关注点混杂在一起会导致复杂性大大增加,所以能够把不同的关注点分离开来,分别处理就是处理复杂性的一个原则,一种方法。
关注点分离是面向方面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来。
业务逻辑的代码中不再含有针对特定领域问题代码的调用(将针对特定领域问题代码抽象化成较少的程式码,例如将代码封装成function或是class),业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在整个应用程序中的变动就可以很好的管理起来。
具体说明(概念比较难理解)
上述论述中的四句话总结
大神们说,Vue的实际开发都是:
NodeJS
vue-cli
脚手架axios
vue-router
vuex
Element UI
(饿了么出品)ICE
(阿里巴巴出品)官方文档
参考文章:①、②、③带注释
Vue 实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载 DOM、渲染→更新→渲染、卸载等一系列过程
,我们称这是 Vue 的生命周期
。通俗说就是 Vue 实例从创建到销毁的过程,就是生命周期。
在 Vue 的整个生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册 JS 方法,可以让我们用自己注册的 JS 方法控制整个大局,在这些事件响应方法中的 this 直接指向的是 Vue 的实例。
️ Vue.js 开发的标准工具
预先定义好的目录结构及基础代码,就好比咱们在创建 Maven 项目时可以选择创建一个骨架项目,这个骨架项目就是脚手架,我们的开发更加的快速。
Node.js:http://nodejs.cn/download/
新版本都自带npm
npm:一个软件包管理工具,类似于Linux的apt
npm 是 JavaScript 世界的包管理工具,并且是 Node.js 平台的默认包管理工具。通过 npm 可以安装、共享、分发代码,管理项目依赖关系。
安装无脑下一步就可以了,安装在自己的环境目录下。
Git:https://git-scm.com/downloads
检查Node.js安装是否成功:
以管理员身份查看
node -v
,打印出版本号即可!npm -v
,打印出版本号即可!安装 Node.js 淘宝镜像加速器(cnpm):
# -g 就是全局安装
npm install cnpm -g
# 若安装失败,则将源npm源换成淘宝镜像
# 因为npm安装插件是从国外服务器下载,受网络影响大
# 或使用如下语句解决 npm 速度慢的问题(一般不使用)
npm config set registry https://registry.npm.taobao.org
安装过程有点慢,耐心等待!虽然安装了cnpm,但是尽量少用!
安装的位置:C:\Users\Administrator\AppData\Roaming\npm
选一个安装就可以
# 安装了cnpm
cnpm install vue-cli -g
# 没安装cnpm
npm install -g @vue/cli
# 或者
yarn global add @vue/cli
# 测试是否安装成功
# 查看可以基于哪些模板创建 vue 应用程序,通常我们选择 webpack
vue list
注意: 如果有安装版本的问题
# 先卸载当前版本
npm uninstall -g vue-cli
# 安装新的包
npm install -g @vue/cli
# 检查版本
vue --version
❯ @vue/cli 4.5.7
为什么呢?
vue-cli
项目:
vue create name
vue init webpack name
:基于WebPage
模板
ES5 (全浏览器支持)
ES6 (常用,当前主流版本: webpack打包成为ES5支持! )
不管是哪种创建方式,都先是安装环境依赖npm install
,最后运行的命令都是:
npm run dev
npm run dev
不行,就试试npm run serve或npm run start
至于为什么,看这篇文章:npm run dev 报错:missing script:dev
vue create myvue
你可以选默认的包含了基本的 Babel + ESLint 设置的 preset,也可以选“手动选择特性”来选取需要的特性。甚至是最新的Vue 3.0 beta。
这个默认的设置非常适合快速创建一个新项目的原型,而手动设置则提供了更多的选项,它们是面向生产的项目更加需要的。
cd myvue
npm install
npm run dev #不行就npm run serve
WebPage
模板)项目:(首先:创建一个Vue项目,我们随便建立一个空的文件夹在电脑上)# 这里的 myvue 是项目名称,可以根据自己的需求起名
vue init webpack myvue
提示 | 说明 |
---|---|
Project name | 项目名称,默认 回车 即可 |
Project description | 项目描述,默认 回车 即可 |
Author | 项目作者,默认 回车 即可 |
Runtime + Compiler | 运行时编译 |
Install vue-router | 是否安装 vue-router?选择 n 不安装(后期需要再手动添加) |
Use ESLint to lint your code | 是否使用 ESLint 做代码检查?选择 n 不安装(后期需要再手动添加) |
Set up unit tests | 单元测试相关,选择 n 不安装(后期需要再手动添加) |
Setup e2e tests with Nightwatch | 单元测试相关,选择 n 不安装(后期需要再手动添加) |
Should we run npm install for you after the project has been created | 创建完成后直接初始化?选择 n,我们手动执行 |
一路选择 n ,主要是自己手动实践去完成这些模块。
cd myvue
npm install
npm run dev
npm install
;npm run dev
npm run dev
不行,就试试npm run serve
或npm run start
从图中我们可以看出,Webpack
可以将多种静态资源js、css、less
转换成一个静态文件,减少了页面的请求。
本质上,webpack是一个现代JavaScript应用程序的静态模块打包器(module bundler)。当webpack处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个bundle.
Webpack是当下最热门的前端资源模块化管理和打包工具,它可以将许多松散耦合的模块按照依赖和规则打包成符合生产环境部署的前端资源。还可以将按需加载的模块进行代码分离,等到实际需要时再异步加载。通过loader转换,任何形式的资源都可以当做模块,比如CommonsJS、AMD、ES6、 CSS、JSON、CoffeeScript、LESS等;
伴随着移动互联网的大潮,当今越来越多的网站已经从网页模式进化到了WebApp模式。它们运行在现代浏览器里,使用HTML5、CSS3、ES6 等新的技术来开发丰富的功能,网页已经不仅仅是完成浏览器的基本需求; WebApp通常是一个SPA (单页面应用) ,每一个视图通过异步的方式加载,这导致页面初始化和使用过程中会加载越来越多的JS代码,这给前端的开发流程和资源组织带来了巨大挑战。
前端开发和其他开发工作的主要区别,首先是前端基于多语言、多层次的编码和组织工作,其次前端产品的交付是基于浏览器的,这些资源是通过增量加载的方式运行到浏览器端,如何在开发环境组织好这些碎片化的代码和资源,并且保证他们在浏览器端快速、优雅的加载和更新,就需要一个模块化系统,这个理想中的模块化系统是前端工程师多年来一直探索的难题。
1. Script标签
<script src = "module1.js"></script>
<script src = "module2.js"></script>
<script src = "module3.js"></script>
这是最原始的JavaScript文件加载方式,如果把每一个文件看做是一个模块,那么他们的接口通常是暴露在全局作用域下,也就是定义在window对象中,不同模块的调用都是一个作用域。
这种原始的加载方式暴露了一些显而易见的弊端:
的书写顺序进行加载2. CommonsJS
服务器端的NodeJS遵循CommonsJS规范,该规范核心思想是允许模块通过require方法来同步加载所需依赖的其它模块,然后通过exports或module.exports来导出需要暴露的接口。
require("module");
require("../module.js");
export.doStuff = function(){};
module.exports = someValue;
优点:
缺点:
实现:
3. AMD
Asynchronous Module Definition规范其实主要一个主要接口define(id?,dependencies?,factory);它要在声明模块的时候指定所有的依赖dependencies,并且还要当做形参传到factory中,对于依赖的模块提前执行。
define("module",["dep1","dep2"],functian(d1,d2){
return someExportedValue;
});
require(["module","../file.js"],function(module,file){});
优点:
缺点:
实现:
4. CMD
Commons Module Definition规范和AMD很相似,尽保持简单,并与CommonsJS和NodeJS的Modules规范保持了很大的兼容性。
define(function(require,exports,module){
var $=require("jquery");
var Spinning = require("./spinning");
exports.doSomething = ...;
module.exports=...;
});
优点:
缺点
实现:
5. ES6模块
EcmaScript 6标准增加了JavaScript语言层面的模块体系定义。ES 6模块的设计思想, 是尽量静态化, 使编译时就能确定模块的依赖关系, 以及输入和输出的变量。Commons JS和AMD模块,都只能在运行时确定这些东西。
import "jquery"
export function doStuff(){}
module "localModule"{}
优点:
缺点:
实现:
大家期望的模块:
系统可以兼容多种模块风格, 尽量可以利用已有的代码, 不仅仅只是JavaScript模块化, 还有CSS、图片、字体等资源也需要模块化。
WebPack 是一款模块加载器兼打包工具
,它能把各种资源,如 JS、JSX、ES6、SASS、LESS、图片等都作为模块来处理和使用
。
npm
安装Webpack
:npm install webpack -g
npm install webpack-cli -g
webpack -v
webpack-cli -v
创建 webpack.config.js
配置文件
entry
:入口文件, 指定Web Pack用哪个文件作为项目的入口
output
:输出, 指定WebPack把处理完成的文件放置到指定路径
module
:模块, 用于处理各种类型的文件
plugins
:插件, 如:热更新、代码重用等
resolve
:设置路径指向
watch
:监听, 用于设置文件改动后直接打包
module.exports = {
//入口文件,指定用哪个文件作为项目的入口
entry: "./modules/main.js",
//输出
output: {
path: "",
//把处理完成的文件放置到指定路径
filename: "./js/bundle.js"
},
//模块,用于处理各种类型的文件
module: {
loaders: [
/* {test:/\.js$/,;\loade:""} */
]
},
//插件,如:热更新、代码重用等
plugins: {},
//路径指向
resolve: {},
//监听,用于设置文件改动后直接打包
watch: true
}
/* ES6模块
export const entry = "./modules/main.js";
export const output = {
path: "",
filename: "./js/bundle.js"
};
export const module = {
loaders: [
{test:/\.js$/,;\loade:""}
]
};
export const plugins = {};
export const resolve = {};
export const watch = true;
*/
直接运行webpack
命令打包
创建空白项目文件夹webpack-study
创建一个名为modules
的目录,用于放置JS模块等资源文件
在modules
下创建模块文件,如hello.js
,用于编写JS模块相关代码:
//暴露一个方法
//ES5模块
exports.sayHi = function() {
// export function sayHi() { //ES6模块
document.write("Hello Webpack
");
}
modules
下创建一个名为main.js
的入口文件,用于打包时设置entry
属性://require 导入一个模块,就可以调用这个模块中的方法了
//ES5模块
var hello = require("./hello");
// import "./hello"; //ES6模块
hello.sayHi();
webpack.config.js
配置文件:module.exports = {
//入口文件,,指定用哪个文件作为项目的入口
entry: "./modules/main.js",
//输出
output: {
//把处理完成的文件放置到指定路径
filename: "./js/bundle.js"
},
//监听,用于设置文件改动后直接打包
// watch: true
}
webpack
命令打包index.html
,导入webpack
打包后的JS文件:<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Webpack Demo</title>
</head>
<body>
<!-- 前端的模块化开发 -->
<script src="./dist/js/bundle.js"></script>
</body>
</html>
webpack --watch
命令,用于监听变化,实现热部署
--watch
用于监听变化说明:
Vue Router
是Vue.js官方的路由管理器(路径跳转)。它和Vue.js的核心深度集成,让构建单页面应用
变得易如反掌。包含的功能有:
安装
基于第一个vue-cli
进行测试学习:先查看node_modules
中是否存在 vue-router
vue-router
是一个插件包,所以我们还是需要用 npm/cnpm
来进行安装的。打开命令行工具,进入你的项目目录,输入下面命令。
npm install vue-router --save-dev
安装完之后去node_modules
路径看看是否有vue-router
信息 有的话则表明安装成功。
如果在一个
模块化工程
中使用它,必须要通过Vue.use()
明确地安装路由功能:
import Vue from 'vue'
import VueRouter from 'vue-router'
//显示声明使用VueRouter
Vue.use(VueRouter);
实例demo
./src/App.vue
./src/main.js
./index.html
这三个文件的关系是 index.html
调用main.js
调用App.vue
。
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>myvuetitle>
head>
<body>
<div id="app">div>
body>
html>
vue-router
路由插件)
import Vue from 'vue'
import App from './App'
import VueRouter from 'vue-router'
Vue.config.productionTip = false
//显示声明使用VueRouter
Vue.use(VueRouter);
new Vue({
el: '#app',
components: { App },
template: ' '
})
<template>
<div id="app">
<h1>roch1>
div>
template>
<script>
export default {
name: 'App',
}
script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
style>
components
目录下,定义一个Content
组件和Main
组件:<template>
<div>
<h1>内容页h1>
<h3>学科h3>
<ul>
<li>Linuxli>
<li>Javali>
<li>Vueli>
ul>
<h3>怎么学h3>
<ol>
<li>看文档li>
<li>看视频li>
<li>做笔记li>
ol>
div>
template>
<script>
export default {
name: "Content"
}
script>
<style scoped>
style>
<template>
<div>
<h1>个人介绍h1>
<ul>
个人主页
ul>
div>
template>
<script>
export default {
name: "Main"
}
script>
<style scoped>
style>
创建src/router
目录,专门存放路由。
创建src/router/index.js
主配置文件:
index.js
:Vue官方命名规则,主配置文件,实现全局配置
path
:路由路径,类似Spring
中的@RequestMapping
name
:路由名称component
:跳转到组件import Vue from 'vue';
//导入路由插件
import VueRouter from 'vue-router';
//导入自定义组件
import Content from '../components/Content.vue';
import Main from '../components/Main.vue';
//安装路由
Vue.use(VueRouter);
//配置导出路由
export default new VueRouter({
routes: [
{
//路由路径,类似Spring中的@RequestMapping
path: "/content",
//路由名称
name: "content",
//跳转到组件
component: Content,
}, {
//路由路径
path: "/main",
//路由名称
name: "main",
//跳转到组件
component: Main,
}
]
})
main.js
中启用上述配置的路由:router
:全局唯一router/index.js
主配置文件,实现全局配置
import Vue from 'vue'
import App from './App'
//导入路由配置目录,自动扫描里面的路由配置
import router from './router'
Vue.config.productionTip = false
new Vue({
el: '#app',
//配置路由
router,
components: { App },
template: ' '
})
<template>
<div id="app">
<h1>roch1>
<router-link to="/main">首页router-link>
<router-link to="/content">内容页router-link>
<router-view>router-view>
div>
template>
<script>
export default {
name: 'App',
}
script>
<style>
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
style>
npm run dev
,测试、查看效果。