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 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 wasp-vue # 这里需要进行一些配置,默认回车即可

? Project name wasp-vue
? Project description A Vue.js project
? Author Parsifal
? 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 "wasp-vue".

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

To get started:

cd wasp-vue
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 wasp-vue
$ 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

模板