# vue-demo
**Repository Path**: chmingx/vue-demo
## Basic Information
- **Project Name**: vue-demo
- **Description**: Vue学习笔记
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2021-06-28
- **Last Updated**: 2021-09-28
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# VUE
## 概述
Vue是一套用于构建用户界面的渐进式框架
MVVM:
- Model: 模型层,JS中的对象
- View: 试图从,这里表示DOM,HTML操作的元素
- VM: 视图模型双向绑定, Vue.js就是MVVM中的ViewModel层的实现者
- ViewModel能偶观察到数据变化,并对视图对应的内容进行更新
- ViewModel能够监听到视图的变化,并能够通知数据发生改变
使用方式:
- 下载Vue.js
- https://vuejs.org/js/vue.js
- https://vuejs.org/js/vue.mini.js
- CDN
- ``
- ``
## ES6新特性
### 变量定义let
```js
// var声明的变量没有局部作用域
// let声明的变量有局部作用域,此外let不能多次定义相同变量
let a = 0;
```
### 声明常量const
```js
// 声明后不能被改变,声明时必须初始化
const PI = 3.14;
```
### 解构
```js
// 数组解构
// 以前
let a=1, b=2, c=3;
// ES6
let [a, b, c] = [1, 2, 3]
// 对象解构
let user = {"name": "foo", "age": 18}
// 以前
let name1 = user.name
let age1 = user.age
// ES6
let {name2, age2} = user
```
### 模板字符串
相当于加强版的字符串,用反引号,除了作为字符串,还可以定义多行字符串,还可以在字符串中加入变量和表达式
```js
// 多行字符串
let string1 = `Hey,
how are you?`
// 字符串插入表达式
let name = "foo"
let age = 20
let info = `My name is ${name}, I am ${age + 1} years old.`
// 字符串中使用函数
function f() {
return "have fun!"
}
let string2 = `Game start, ${f()}`
```
### 声明对象简写
```js
let name = "foobar"
let age = 20
// 以前
let userOld = {name: name, age: age}
// ES6
let user = {name, age}
```
### 定义方法简写
```js
// 以前
let person1 = {
sayHi: function() {
console.log("Hi")
}
}
person1.sayHi()
// ES6
let person2 = {
sayHi() {
console.log("Hi")
}
}
person2.sayHi()
```
### 对象扩展运算符
对象扩展运算符`...`,用于取出参数对象所有可遍历属性然后拷贝到当前对象
```js
// 拷贝对象
let person1 = {"name": "foobar", "age": 20}
let person2 = {...person1}
console.log(person2)
// 合并对象
let age = {age: 15}
let name = {name: "foobar"}
let person3 = {...age, ...name}
```
### 箭头函数
箭头函数提供了一种更加简洁的函数书写方式,基本语法是:
> 参数 => 函数体
```js
// 以前
var f = function(a){
return a + 1
}
console.log(f1(1))
// ES6
var f2 = a => a + 1
console.log(f2(1))
```
## 第一个Vue应用
## v指令
- v-bind,将模型数据绑定到html的标签的属性中
- v-if
- v-for
- v-on
- v-model,双向绑定
实现绑定的两种形式:
- {{}}:用于文档内容
- v-bind:用于标签中
v-bind是指令,v-前缀表示它们是Vue提供的特殊指令
### 修饰符
是以半角句号指明的特殊后缀,用于指出一个指令应该以特殊方式绑定
例如`.prevent`修饰符告诉`v-on`指令对于触发的事件调用 `event.preventDefault()`,即阻止事件原本的默认行为
## Vue组件
组件是Vue最强大的功能之一,组件可以扩展HTML元素,封装可重用代码,组件系统让我们可以用独立可复用的小组件来构建大型应用。几乎任意类型的应用的界面都可以抽象为一个组件树。
## 路由
## 网络通信
Axios是一个开源的可以用在浏览器和NodeJS的异步通信框架, 主要作用是实现Ajax异步通信
axios是一个独立的项目,和vue一起使用,实现ajax操作
```html
```
## vue-cli
- nodejs, npm
- taobao
-
## Element-UI
## Node.js
## npm
```shell
# npm初始化项目
npm init -y
# 配置镜像
npm config set registry https://registry.npm.taobao.org
# 查看配置信息
npm config list
# 下载依赖
npm install jquery
# 项目开发需要的依赖包,但是生成环境中不包含的依赖包的下载
npm install --save-dev eslint
npm install -D eslint
# 全局安装工具
npm install -g webpack
# 更新
npm update 包名
npm update -g 包名
# 卸载
npm uninstall 包名
npm uninstall -g 包名
```
## babel
转码器,将es6代码转成es5代码
```shell
npm install --global babel-cli
```
使用:
- 创建配置文件 `.babelrc`
```
{
"presets": ["es2015"],
"plugins": []
}
```
- 安装转码器
```shell
npm install -D babel-preset-es2015
```
- 转码
```shell
# 转单个文件
babel src/example.js --out-file dist/compiled.js
babel src/exmaple.js -o dist/compiled.js
# 转整个目录
babel src --out-dir dist
babel src -d dist
```
## 模块化
ES5写法
```js
const sum = function(a, b) {
return parseInt(a) + parseInt(b)
}
const substract = function(a, b) {
return parseInt(a) - parseInt(b)
}
// 设置哪些方法可以被其他js调用
module.exports = [
sum,
substract
]
```
```js
// 引入模块
const a = require('./a.js')
// 调用
a.sum(1, 2)
a.substract(10, 3)
```
ES6写法
```js
export function getList(){
console.log("get list")
}
export function save(){
console.log("save data")
}
```
```js
// 导入
import {getList, save } from "./userApi.js"
// 调用
getList()
save()
```
## webpack
前端资源加载和打包工具。可以将多种静态资源转换成一个静态文件,减少页面的请求
```shell
# 安装
npm install -g webpack webpack-cli
webpack -v
```
- 编写js文件
- 打包目录下创建配置文件webpack.config.js
```js
const path = require("path"); // Node.js内置模块
module.exports = {
entry: './src/main.js', // 配置入口文件
output: {
path: path.resolv(__dirname, './dist'), // 输出路径
filename: 'bundle.js' // 输出文件
}
}
```
配置文件含义:读取当前项目目录下的src文件夹中的main.js入口文件内容,分析资源依赖,把相关js文件打包,打包后的文件放入当前目录的dist文件夹下,打包后的js文件名为bundle.js
- 命令行执行编译命令
```shell
# 打包
webpack
# or
webpack --mode=development
```
也可以配置项目的npm运行命令,修改package.json文件
```json
"scripts": {
// ...,
"dev": "webpack --mode=development"
}
```
然后运行npm命令打包
如果打包css,需要安装css加载器
```shell
npm install -D style-loader css-loader
```
修改webpack.config.js
```js
const path = require("path"); // Node.js内置模块
module.exports = {
entry: './src/main.js', // 配置入口文件
output: {
path: path.resolv(__dirname, './dist'), // 输出路径
filename: 'bundle.js' // 输出文件
},
module: {
rules: [
{
test: /\.css$/, // 打包规则应用到以css结尾的文件上
use: ['style-loader', 'css-loader']
}
]
}
}
```