Vue基础-基础

摘要

待续。。。

安装

使用淘宝 NPM 镜像

大家都知道国内直接使用npm的官方镜像是非常慢的,这里推荐使用淘宝 NPM镜像。

淘宝NPM镜像是一个完整npmjs.org镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步。

你可以使用淘宝定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

使用方法

1
2
3
4
5
6
#升级 npm
cnpm install npm -g


# 升级或安装 cnpm
npm install cnpm -g

安装vue

1
2
# 最新稳定版
$ cnpm install vue

安装 webpack

1
cnpm install webpack -g

命令行工具

1
2
# 全局安装 vue-cli
$ cnpm install --global vue-cli

重建链接

1
brew unlink node && brew link --overwrite node

创建一个基于 webpack 模板的新项目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
cd work/
$ vue init webpack anthill

? Project name anthill
? Project description A Vue.js project
? Author Casstiel
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? Yes
? Pick an ESLint preset Standard
? Set up unit tests Yes
? Pick a test runner karma
? Setup e2e tests with Nightwatch? Yes
? Should we run `npm install` for you after the project has been created? (recommended) no

vue-cli · Generated "anthill".

# Project initialization finished!
# ========================

To get started:

cd anthill
npm install (or if using yarn: yarn)
npm run lint -- --fix (or for yarn: yarn run lint --fix)
npm run dev

Documentation can be found at https://vuejs-templates.github.io/webpack

$ cd anthill
$ cnpm install
# cnpm install vue-router vue-resource
$ cnpm run dev

目录结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.
├── README.md # 项目的说明文档,markdown 格式
├── build # 项目构建(webpack)相关代码
├── config # 配置目录,包括端口号等。
├── index.html # 首页入口文件,你可以添加一些 meta 信息或统计代码啥的。
├── node_modules # npm 加载的项目依赖模块
├── package.json # 项目配置文件。
├── src
# 这里是我们要开发的目录,基本上要做的事情都在这个目录里。里面包含了几个目录及文件:
# assets: 放置一些图片,如logo等。
# components: 目录里面放了一个组件文件,可以不用。
# App.vue: 项目入口文件,我们也可以直接将组件写这里,而不使用 components 目录。
# main.js: 项目的核心文件。
├── static # 静态资源目录,如图片、字体等。
└── test # 初始测试目录,可删除

App.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
$ cat App.vue

<!-- 展示模板 -->
<template>
<div id="app">
<img src="./assets/logo.png">
<hello></hello>
<hello></hello>
<router-view/>
</div>
</template>

<script>
// 导入组件
import Hello from './components/Hello'

export default {
name: 'app',
components: {
Hello
}
}
</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>

Hello.vue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
cat components/Hello.vue

<template>
<div class="hello">
<h1>{{ msg }}</h1>
</div>
</template>

<script>
export default {
name: 'hello',
data () {
return {
msg: 'Hello World'
}
}
}
</script>

语法格式

1
2
3
4
5
6
7
8
9
10
11
12
13
var vm = new Vue({
el: '#vue_det',
data: {
site: "xxx",
url: "www.xxx.com",
alexa: "10000"
},
methods: {
details: function() {
return this.site + " - 学的不仅是技术,更是梦想!";
}
}
})
  • el 它是 DOM 元素中的 id。在上面实例中 id 为 vue_det
  • data 用于定义属性,实例中有三个属性分别为:site、url、alexa。
  • methods 用于定义的函数,可以通过 return 来返回函数值。
  • " " 用于输出对象属性和函数返回值。

双向绑定

1
2
3
4
5
6
7
8
9
10
// 它们引用相同的对象!
document.write(vm.site === data.site) // true
document.write("<br>")
// 设置属性也会影响到原始数据
vm.site = "Runoob"
document.write(data.site + "<br>") // Runoob

// ……反之亦然
data.alexa = 1234
document.write(vm.alexa) // 1234

模板

数组的常用操作方式

https://blog.csdn.net/qq_25354709/article/details/86548332

1
2
3
4
5
6
7
8
9
10
11
12
pop,push,unshfit,shfit,slice,splice,reverse,sort,indexOf,lastIndexOf,concat

(pop push unshift shift splice reverse sort ) 括号中的能改变原数组,叫数组的变异

# 常用
forEach,filter,map,find,some,every,includes,reduce

some,every 是 ES5的

ES6:(includes,find),其余都是ES5的

filter(过滤),map(映射)

循环语法

https://blog.csdn.net/qq_25354709/article/details/86548332

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

let arr = [1, 2, 3, 4, 5];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}

# forEach不支持return
let arr = [1, 2, 3, 4, 5];
arr.forEach(function (item, index) {
console.log(item);
});


# for of 支持return,并且是只能遍历数组,不能遍历对象
# for of 是ES6语法

let arr = [1, 2, 3, 4, 5];
for(let val of arr) {
console.log(val);
}

# for of 遍历对象

let obj = {school: 'name', age: 8};
for (let val of Object.keys(obj)) {
console.log(obj[val]);
}

# filter是过滤的意思,filter不会操作原数组,返回的是过滤后的新数组。
let newAry = [1, 2, 3, 4, 5].filter(function (item, index) { //index是索引
return item > 2 && item < 5;
});
console.log(newAry); // [3, 4]

map是映射的意思,将一个数组映射成一个新数组。

map不操作原数组,返回一个新数组。
let arr1 = [1, 2, 3].map(function (item, index) {
return 2;
});
console.log(arr1); // [2,2,2]

let arr2 = [1, 2, 3].map(function (item, index) {
return item *= 3;
});
console.log(arr2); // [3,6,9]

let arr3 = [1, 2, 3].map(function (item, index) {
return `<li>${item}</li>`;
});
console.log(arr3); // [ '<li>1</li>', '<li>2</li>', '<li>3</li>' ]
console.log(arr3.join('')); // <li>1</li><li>2</li><li>3</li>

通过抛出异常终止forEach

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
try {
treeList.forEach(one => {
if (one.type === "product") {
console.log(treeList)
if (one.name !== item.parent) {
one.checked = false
} else if (one.name === item.parent) {
this.applyInfo.appList = []
throw new Error("ChooseAllProduct")
}
} else if (one.type === "app") {
if (one.parent !== item.parent) {
one.checked = false
} else {
this.applyInfo.appList.push(one.name)
}
}
})
} catch (e) {
if (e.message !== "ChooseAllProduct") throw e
}