【注意】最后更新于 June 15, 2020,文中内容可能已过时,请谨慎使用。
看到各种 vue 入门全部都是 webpack 的我表示没有什么问题。但是却发觉无法将这些 webpack 的工作流推荐给其它人。一说 npm,webpack,babel 什么的纷纷表示太麻烦。
也许他们还是更喜欢 cdn 引入,手写 js 吧。所以这个就是纯粹的 vue 不用 webpack 不用 babel。直接用我们喜欢的 es5 的 js 写。等到觉得 vue 的好再推荐他们 webpack 什么的。
然后模块化还是需要一个所有我选择了 requirejs。
零、文章中的一些定义
- 所有的 js 与 css 库都会使用 cdn。
- 一些需要修改的库无法使用 cdn 的会说明。
- cdn 使用 bootcdn 对应国内环境
- 这里面说到的 vue 源码均为 2.0.3
- 源码下载: 地址
一、Hello World
hello_world.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>hello_world</title>
<script
type="text/javascript"
src="https://cdn.bootcss.com/vue/2.0.3/vue.js"
></script>
</head>
<body>
<div id="app">
<!--你可以在这里写模板也可以在js的Vue实例中写-->
</div>
<script src="js/hello_world.js"></script>
</body>
</html>
|
以上开头引入了 vue 并在 body 中写了一个 id 为app
的 div,其中 vue 的模板我们可以直接写在这个 div 中也可以写在 js 的 vue 实例的 template 中。然后在 body 中的最后引入入口 js/hello_world.js。
js/hello_world.js
1
2
3
4
5
6
7
| new Vue(
el:'#app',
data: {
mes: 'hello vue'
},
template: '<span>{{mes}}</span>'
);
|
el 表示 vue 的实例挂载点,看了 vue 源码使用的是document.querySelector
,(vue/src/platforms/web/util/index.js#15)。
选择失败会使用document.createElement
,(vue/src/platforms/web/util/index.js#20)为我们生成一个 div。所以document.querySelector
能支持的 vue 就能支持。
data 表示 vue 实例的属性。可以被 template 通过{{}}表达式访问
template 表示模板里面的文字会被编译后转换到挂载点上
效果图
和我说的一样,但是你会说这样的不需要框架也能做啊,当然 vue 的效果不止这点先说个它的数据绑定看下面的 hello_world2
源码:
在 git 仓库的 hello_world 分支中
二、HelloWorld2
js/hello_world.js
这边不需要修改其他的仅需要 js 即可
1
2
3
4
5
6
7
8
9
10
11
| new Vue({
el: "#app",
data: {
mes: "hello vue"
},
template: '<div>\
<input v-model="mes" type="text">\
<br/>\
<span>{{ mes }}</span>\
</div>'
});
|
这里我写了一个 input 并在上面写了一个 vue 指令 v-model。这个是为 input 之类专用的指令可以把 input 的内容与 vue 实例里的属性绑定。input 的内容修改会改变 mes 然后因为 mes 改变了 span 中的 mes 重新生成了。
效果图
如果使用 vue 的 devtoolt 效果会更好能直接看到数据的变化。
源码:
在 git 仓库的 hello_world2 分支中
三、使用 requirejs
在现在很多库都已经完全支持 amd 规范导入,十分推荐使用 requirejs。当然你使用了 webpack 就没有必要使用 requirejs。这里不说 requirejs 的好处,只是不使用 webpack 的话缺少一个模块化工具。
我们这边把上面第一个 hello_world 修改为 requirejs 的
hello_requirejs.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| <!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>hello_world</title>
<script
type="text/javascript"
data-main="js/main.js"
src="https://cdn.bootcss.com/require.js/2.3.2/require.min.js"
></script>
</head>
<body>
<div id="app">
<!--你可以在这里写模板也可以在js的Vue实例中写-->
</div>
</body>
</html>
|
js/main.js
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
| // 习惯写iife了可以不需要
(function(require, define) {
require.config({
paths: {
// vue cdn别名
vue: "https://cdn.bootcss.com/vue/2.0.3/vue"
}
});
// 下面的应该放到其他文件中
define(function(require, exports, module) {
// 使用别名加载vue
var Vue = require("vue");
new Vue({
el: "#app",
data: {
mes: "hello vue to requirejs"
},
template: "<span>{{ mes }}</span>"
});
});
/*另一种requirejs的模块声明
define(['vue'], function(Vue){
});
*/
})(require, define);
|
效果图
这个没有必要效果图了。。
源码:
在 git 仓库的 hello_requirejs 分支中
四、使用其它 vue 库
这里我用element-ui来做示例
使用 hello_requirejs 修改
hello_requirejs.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| <!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>hello_world</title>
<link
rel="stylesheet"
href="https://cdn.bootcss.com/element-ui/1.0.0-rc.8/theme-default/index.css"
/>
<script
type="text/javascript"
data-main="js/main.js"
src="https://cdn.bootcss.com/require.js/2.3.2/require.min.js"
></script>
</head>
<body>
<div id="app">
<!--你可以在这里写模板也可以在js的Vue实例中写-->
</div>
</body>
</html>
|
增加一个 element 的 css。也可以使用 requirejs 的插件来加载 css
js/main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| (function(require, define) {
require.config({
paths: {
vue: "https://cdn.bootcss.com/vue/2.0.3/vue",
// 使用cdn无法加载找了一下是因为define("ELEMENT",["vue"],t)多了一个"ELEMENT"参数
element: "element"
}
});
define(function(require, exports, module) {
var element_ui = require("element");
var Vue = require("vue");
element_ui.install(Vue);
new Vue({
el: "#app",
data: {
mes: "hello_el-button"
},
template: "<el-button>{{ mes }}</el-button>"
});
});
})(require, define);
|
效果图
源码:
在 git 仓库的 hello_element 分支中
文章作者
上次更新
2020-06-15 18:12:42 +08:00
(9c054d8)
许可协议
CC BY-NC-ND 4.0