下方有HTML源码示例
Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。
Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合
与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。
另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。
官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。
尝试 Vue.js 最简单的方法是使用 Hello World 例子。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以创建一个 .html,然后通过如下方式引入 Vue:
<!-- 开发环境版本,包含了有帮助的命令行警告 -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
或
<!-- 生产环境版本,优化了尺寸和速度 -->
<script src="https://cdn.jsdelivr.net/npm/vue"></script>
声明式渲染
<div id="app">
{{ message }}
</div>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
文本插值,我们还可以像这样来绑定元素 attribute
<div id="app-2">
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于 ' + new Date().toLocaleString()
}
})
条件与循环
<div id="app-3">
<p v-if="seen">现在你看到我了</p>
</div>
var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})
v-for
指令可以绑定数组的数据来渲染一个项目列表:
<div id="app-4">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div>
var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{ text: '学习 JavaScript' },
{ text: '学习 Vue' },
{ text: '整个牛项目' }
]
}
})
处理用户输入
<div id="app-5">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">反转消息</button>
</div>
var app5 = new Vue({
el: '#app-5',
data: {
message: 'Hello Vue.js!'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
Vue 还提供了 v-model
指令,它能轻松实现表单输入和应用状态之间的双向绑定
<div id="app-6">
<p>{{ message }}</p>
<input v-model="message">
</div>
var app6 = new Vue({
el: '#app-6',
data: {
message: 'Hello Vue!'
}
})
组件化应用构建
<div id="app-7">
<ol>
<!--
现在我们为每个 todo-item 提供 todo 对象
todo 对象是变量,即其内容可以是动态的。
我们也需要为每个组件提供一个“key”,稍后再
作详细解释。
-->
<todo-item
v-for="item in groceryList"
v-bind:todo="item"
v-bind:key="item.id"
></todo-item>
</ol>
</div>
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.text }}</li>'
})
var app7 = new Vue({
el: '#app-7',
data: {
groceryList: [
{ id: 0, text: '蔬菜' },
{ id: 1, text: '奶酪' },
{ id: 2, text: '随便其它什么人吃的东西' }
]
}
})
下方有完整的练习代码,一个HTML页面
1 <html>
2 <head>
3 <title>Hello World</title>
4
5 <!-- 开发环境版本,包含了有帮助的命令行警告 -->
6 <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
7 </head>
8
9 <body>
10
11 <p>
12 <h3>练习1</h1>
13 <div id="app">
14 {{ message }}
15 </div>
16 </p>
17
18 <hr/>
19
20 <p>
21 <h3>练习2</h1>
22 <div id="app-2">
23 <span v-bind:title="message">
24 鼠标悬停几秒钟查看此处动态绑定的提示信息!
25 <br>
26 打开浏览器的 JavaScript 控制台,输入 app2.message = '新消息' 再次悬停
27 </span>
28 </div>
29 </p>
30
31 <hr/>
32
33 <p>
34 <h3>练习3</h1>
35 <div id="app-3">
36 <p v-if="seen">现在你看到我了</p>
37 继续在控制台输入 app3.seen = false,你会发现之前显示的消息消失了。
38 </div>
39 </p>
40
41 <hr/>
42
43 <p>
44 <h3>练习4</h1>
45 <div id="app-4">
46 <ol>
47 <li v-for="todo in todos">
48 {{ todo.text }}
49 </li>
50 </ol>
51 在控制台里,输入 app4.todos.push({ text: '新项目' }),你会发现列表最后添加了一个新项目
52 </div>
53 </p>
54
55 <hr/>
56
57 <p>
58 <h3>练习5</h1>
59 <div id="app-5">
60 <p>{{ msg }}</p>
61 <button v-on:click="reverseMessage">反转消息</button>
62 </div>
63 </p>
64
65 <hr/>
66
67 <p>
68 <h3>练习6</h1>
69 <div id="app-6">
70 <p>{{ msg }}</p>
71 <input v-model="msg">
72 </div>
73 </p>
74
75 <hr/>
76
77 <p>
78 <h3>练习7</h1>
79 <div id="app-7">
80 <ol>
81 <!-- 创建一个 todo-item 组件的实例 -->
82
83 <!--
84 现在我们为每个 todo-item 提供todo对象
85 todo 对象是变量,即其内容可以是动态的
86 我们也需要为每个组件提供一个 "key" ,稍后再作详细解释
87 -->
88 <todo-item
89 v-for="item in groceryList"
90 v-bind:todo="item"
91 v-bind:key="item.id"
92 ></todo-item>
93 </ol>
94 </div>
95 </p>
96
97 <hr/>
98
99 <p>
100 <h3>练习8</h1>
101 <span> (假想的) 例子</span>
102 <div id="app">
103 <app-nav></app-nav>
104 <app-view>
105 <app-sidebar></app-sidebar>
106 <app-content></app-content>
107 </app-view>
108 </div>
109 </p>
110
111
112
113
114 <script>
115
116 var app = new Vue({
117 el : "#app",
118 data:{
119 message: "hello world"
120 }
121 })
122
123 var app2 = new Vue({
124 el: "#app-2",
125 data: {
126 message: "页面加载于" + new Date().toLocaleString()
127 }
128 })
129
130 var app3 = new Vue({
131 el: '#app-3',
132 data:{
133 seen: true
134 }
135 })
136
137 var app4 = new Vue({
138 el: '#app-4',
139 data: {
140 todos:[
141 { text: "学习 Java"},
142 { text: "学习 Vue"},
143 { text: "测试项目"},
144 ]
145 }
146 })
147
148 var app5 = new Vue({
149 el: '#app-5',
150 data:{
151 msg: "hello Vue"
152 },
153 methods:{
154 reverseMessage: function(){
155 this.msg = this.msg.split('').reverse().join('')
156 }
157 }
158 })
159
160 var app6 = new Vue({
161 el: '#app-6',
162 data: {
163 msg: "hello zcy"
164 }
165 })
166
167 Vue.component('todo-item',{
168 // todo-item 组件现在接受一个
169 // "prop",类似于一个自定义 attribute
170 // 这个 prop 名为 todo
171 props: ['todo'],
172 // template: '<li>这是个代办项</li>'
173 template: '<li> {{ todo.text }} </li>'
174 })
175
176 var app7 = new Vue({
177 el: '#app-7',
178 data:{
179 groceryList: [
180 { id:0, text: '蔬菜'},
181 { id:1, text: '奶酪'},
182 { id:2, text: '肉肉'}
183 ]
184 }
185 })
186
187 </script>
188
189 </body>
190
191 </html>
View Code