2019-04-21 11:50:48 +08:00

301 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<div class="content guide with-sidebar index-guide">
<h1>介绍</h1>
<h2 id="Vue-js-是什么"><a class="headerlink" href="#Vue-js-是什么" title="Vue.js 是什么"></a>Vue.js 是什么</h2><p>Vue (读音 /vjuː/,类似于 <strong>view</strong>) 是一套用于构建用户界面的<strong>渐进式框架</strong>。与其它大型框架不同的是Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与<a href="single-file-components.html">现代化的工具链</a>以及各种<a href="https://github.com/vuejs/awesome-vue#libraries--plugins" rel="noopener" target="_blank">支持类库</a>结合使用时Vue 也完全能够为复杂的单页应用提供驱动。</p>
<p>如果你想在深入学习 Vue 之前对它有更多了解,我们<a href="#" id="modal-player">制作了一个视频</a>,带您了解其核心概念和一个示例工程。</p>
<p>如果你已经是有经验的前端开发者,想知道 Vue 与其它库/框架有哪些区别,请查看<a href="comparison.html">对比其它框架</a></p>
<h2 id="起步"><a class="headerlink" href="#起步" title="起步"></a>起步</h2><p class="tip">官方指南假设你已了解关于 HTML、CSS 和 JavaScript 的中级知识。如果你刚开始学习前端开发,将框架作为你的第一步可能不是最好的主意——掌握好基础知识再来吧!之前有其它框架的使用经验会有帮助,但这不是必需的。</p>
<p>尝试 Vue.js 最简单的方法是使用 <a href="https://jsfiddle.net/chrisvfritz/50wL7mdz/" rel="noopener" target="_blank">JSFiddle 上的 Hello World 例子</a>。你可以在浏览器新标签页中打开它,跟着例子学习一些基础用法。或者你也可以<a download="index.html" href="https://gist.githubusercontent.com/chrisvfritz/7f8d7d63000b48493c336e48b3db3e52/raw/ed60c4e5d5c6fec48b0921edaed0cb60be30e87c/index.html" rel="noopener noreferrer" target="_blank">创建一个 <code>.html</code> 文件</a><a>,然后通过如下方式引入 Vue</a></p>
<pre><code class="hljs html"><span class="hljs-comment">&lt;!-- 开发环境版本,包含了有帮助的命令行警告 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
<p>或者:</p>
<pre><code class="hljs html"><span class="hljs-comment">&lt;!-- 生产环境版本,优化了尺寸和速度 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">script</span> <span class="hljs-attr">src</span>=<span class="hljs-string">"https://cdn.jsdelivr.net/npm/vue"</span>&gt;</span><span class="undefined"></span><span class="hljs-tag">&lt;/<span class="hljs-name">script</span>&gt;</span></code></pre>
<p><a href="/guide/installation.html">安装教程</a>给出了更多安装 Vue 的方式。请注意我们<strong>不推荐</strong>新手直接使用 <code>vue-cli</code>,尤其是在你还不熟悉基于 Node.js 的构建工具时。</p>
<p>如果你喜欢交互式的东西,你也可以查阅<a href="https://scrimba.com/playlist/pXKqta" rel="noopener" target="_blank">这个 Scrimba 上的系列教程</a>,它揉合了录屏和代码试验田,并允许你随时暂停和播放。</p>
<h2 id="声明式渲染"><a class="headerlink" href="#声明式渲染" title="声明式渲染"></a>声明式渲染</h2><div class="scrimba"><a href="https://scrimba.com/p/pXKqta/cQ3QVcr" rel="noopener noreferrer" target="_blank">在 Scrimba 上尝试这节课</a></div>
<p>Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>&gt;</span>
{{ message }}
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">'Hello Vue!'</span>
}
})</code></pre>
<div class="demo" id="app">
{{ message }}
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
<p>我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是<strong>响应式的</strong>。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改 <code>app.message</code> 的值,你将看到上例相应地更新。</p>
<p>除了文本插值,我们还可以像这样来绑定元素特性:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-2"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">span</span> <span class="hljs-attr">v-bind:title</span>=<span class="hljs-string">"message"</span>&gt;</span>
鼠标悬停几秒钟查看此处动态绑定的提示信息!
<span class="hljs-tag">&lt;/<span class="hljs-name">span</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app2 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-2'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">'页面加载于 '</span> + <span class="hljs-keyword">new</span> <span class="hljs-built_in">Date</span>().toLocaleString()
}
})</code></pre>
<div class="demo" id="app-2">
<span v-bind:title="message">
鼠标悬停几秒钟查看此处动态绑定的提示信息!
</span>
</div>
<script>
var app2 = new Vue({
el: '#app-2',
data: {
message: '页面加载于 ' + new Date().toLocaleString()
}
})
</script>
<p>这里我们遇到了一点新东西。你看到的 <code>v-bind</code> 特性被称为<strong>指令</strong>。指令带有前缀 <code>v-</code>,以表示它们是 Vue 提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的 <code>title</code> 特性和 Vue 实例的 <code>message</code> 属性保持一致”。</p>
<p>如果你再次打开浏览器的 JavaScript 控制台,输入 <code>app2.message = '新消息'</code>,就会再一次看到这个绑定了 <code>title</code> 特性的 HTML 已经进行了更新。</p>
<h2 id="条件与循环"><a class="headerlink" href="#条件与循环" title="条件与循环"></a>条件与循环</h2><div class="scrimba"><a href="https://scrimba.com/p/pXKqta/cEQe4SJ" rel="noopener noreferrer" target="_blank">在 Scrimba 上尝试这节课</a></div>
<p>控制切换一个元素是否显示也相当简单:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-3"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span> <span class="hljs-attr">v-if</span>=<span class="hljs-string">"seen"</span>&gt;</span>现在你看到我了<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app3 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-3'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">seen</span>: <span class="hljs-literal">true</span>
}
})</code></pre>
<div class="demo" id="app-3">
<span v-if="seen">现在你看到我了</span>
</div>
<script>
var app3 = new Vue({
el: '#app-3',
data: {
seen: true
}
})
</script>
<p>继续在控制台输入 <code>app3.seen = false</code>,你会发现之前显示的消息消失了。</p>
<p>这个例子演示了我们不仅可以把数据绑定到 DOM 文本或特性,还可以绑定到 DOM <strong>结构</strong>。此外Vue 也提供一个强大的过渡效果系统,可以在 Vue 插入/更新/移除元素时自动应用<a href="transitions.html">过渡效果</a></p>
<p>还有其它很多指令,每个都有特殊的功能。例如,<code>v-for</code> 指令可以绑定数组的数据来渲染一个项目列表:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-4"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">li</span> <span class="hljs-attr">v-for</span>=<span class="hljs-string">"todo in todos"</span>&gt;</span>
{{ todo.text }}
<span class="hljs-tag">&lt;/<span class="hljs-name">li</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app4 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-4'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">todos</span>: [
{ <span class="hljs-attr">text</span>: <span class="hljs-string">'学习 JavaScript'</span> },
{ <span class="hljs-attr">text</span>: <span class="hljs-string">'学习 Vue'</span> },
{ <span class="hljs-attr">text</span>: <span class="hljs-string">'整个牛项目'</span> }
]
}
})</code></pre>
<div class="demo" id="app-4">
<ol>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ol>
</div>
<script>
var app4 = new Vue({
el: '#app-4',
data: {
todos: [
{ text: '学习 JavaScript' },
{ text: '学习 Vue' },
{ text: '整个牛项目' }
]
}
})
</script>
<p>在控制台里,输入 <code>app4.todos.push({ text: '新项目' })</code>,你会发现列表最后添加了一个新项目。</p>
<h2 id="处理用户输入"><a class="headerlink" href="#处理用户输入" title="处理用户输入"></a>处理用户输入</h2><div class="scrimba"><a href="https://scrimba.com/p/pXKqta/czPNaUr" rel="noopener noreferrer" target="_blank">在 Scrimba 上尝试这节课</a></div>
<p>为了让用户和你的应用进行交互,我们可以用 <code>v-on</code> 指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-5"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{{ message }}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">button</span> <span class="hljs-attr">v-on:click</span>=<span class="hljs-string">"reverseMessage"</span>&gt;</span>逆转消息<span class="hljs-tag">&lt;/<span class="hljs-name">button</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app5 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-5'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">'Hello Vue.js!'</span>
},
<span class="hljs-attr">methods</span>: {
<span class="hljs-attr">reverseMessage</span>: <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
<span class="hljs-keyword">this</span>.message = <span class="hljs-keyword">this</span>.message.split(<span class="hljs-string">''</span>).reverse().join(<span class="hljs-string">''</span>)
}
}
})</code></pre>
<div class="demo" id="app-5">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">逆转消息</button>
</div>
<script>
var app5 = new Vue({
el: '#app-5',
data: {
message: 'Hello Vue.js!'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
</script>
<p>注意在 <code>reverseMessage</code> 方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。</p>
<p>Vue 还提供了 <code>v-model</code> 指令,它能轻松实现表单输入和应用状态之间的双向绑定。</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-6"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">p</span>&gt;</span>{{ message }}<span class="hljs-tag">&lt;/<span class="hljs-name">p</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">input</span> <span class="hljs-attr">v-model</span>=<span class="hljs-string">"message"</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js"><span class="hljs-keyword">var</span> app6 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-6'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">message</span>: <span class="hljs-string">'Hello Vue!'</span>
}
})</code></pre>
<div class="demo" id="app-6">
<p>{{ message }}</p>
<input v-model="message"/>
</div>
<script>
var app6 = new Vue({
el: '#app-6',
data: {
message: 'Hello Vue!'
}
})
</script>
<h2 id="组件化应用构建"><a class="headerlink" href="#组件化应用构建" title="组件化应用构建"></a>组件化应用构建</h2><div class="scrimba"><a href="https://scrimba.com/p/pXKqta/cEQVkA3" rel="noopener noreferrer" target="_blank">在 Scrimba 上尝试这节课</a></div>
<p>组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:</p>
<p><img src="https://cn.vuejs.org/images/components.png"/></p>
<p>在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:</p>
<pre><code class="hljs js"><span class="hljs-comment">// 定义名为 todo-item 的新组件</span>
Vue.component(<span class="hljs-string">'todo-item'</span>, {
<span class="hljs-attr">template</span>: <span class="hljs-string">'&lt;li&gt;这是个待办项&lt;/li&gt;'</span>
})</code></pre>
<p>现在你可以用它构建另一个组件模板:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-comment">&lt;!-- 创建一个 todo-item 组件的实例 --&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">todo-item</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">todo-item</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span></code></pre>
<p>但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个 <a href="components.html#通过-Prop-向子组件传递数据">prop</a></p>
<pre><code class="hljs js">Vue.component(<span class="hljs-string">'todo-item'</span>, {
<span class="hljs-comment">// todo-item 组件现在接受一个</span>
<span class="hljs-comment">// "prop",类似于一个自定义特性。</span>
<span class="hljs-comment">// 这个 prop 名为 todo。</span>
props: [<span class="hljs-string">'todo'</span>],
<span class="hljs-attr">template</span>: <span class="hljs-string">'&lt;li&gt;{{ todo.text }}&lt;/li&gt;'</span>
})</code></pre>
<p>现在,我们可以使用 <code>v-bind</code> 指令将待办项传到循环输出的每个组件中:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app-7"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-comment">&lt;!--
现在我们为每个 todo-item 提供 todo 对象
todo 对象是变量,即其内容可以是动态的。
我们也需要为每个组件提供一个“key”稍后再
作详细解释。
--&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">todo-item</span>
<span class="hljs-attr">v-for</span>=<span class="hljs-string">"item in groceryList"</span>
<span class="hljs-attr">v-bind:todo</span>=<span class="hljs-string">"item"</span>
<span class="hljs-attr">v-bind:key</span>=<span class="hljs-string">"item.id"</span>
&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">todo-item</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">ol</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<pre><code class="hljs js">Vue.component(<span class="hljs-string">'todo-item'</span>, {
<span class="hljs-attr">props</span>: [<span class="hljs-string">'todo'</span>],
<span class="hljs-attr">template</span>: <span class="hljs-string">'&lt;li&gt;{{ todo.text }}&lt;/li&gt;'</span>
})
<span class="hljs-keyword">var</span> app7 = <span class="hljs-keyword">new</span> Vue({
<span class="hljs-attr">el</span>: <span class="hljs-string">'#app-7'</span>,
<span class="hljs-attr">data</span>: {
<span class="hljs-attr">groceryList</span>: [
{ <span class="hljs-attr">id</span>: <span class="hljs-number">0</span>, <span class="hljs-attr">text</span>: <span class="hljs-string">'蔬菜'</span> },
{ <span class="hljs-attr">id</span>: <span class="hljs-number">1</span>, <span class="hljs-attr">text</span>: <span class="hljs-string">'奶酪'</span> },
{ <span class="hljs-attr">id</span>: <span class="hljs-number">2</span>, <span class="hljs-attr">text</span>: <span class="hljs-string">'随便其它什么人吃的东西'</span> }
]
}
})</code></pre>
<div class="demo" id="app-7">
<ol>
<todo-item :key="item.id" v-bind:todo="item" v-for="item in groceryList"></todo-item>
</ol>
</div>
<script>
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: '随便其它什么人吃的东西' }
]
}
})
</script>
<p>尽管这只是一个刻意设计的例子,但是我们已经设法将应用分割成了两个更小的单元。子单元通过 prop 接口与父单元进行了良好的解耦。我们现在可以进一步改进 <code>&lt;todo-item&gt;</code> 组件,提供更为复杂的模板和逻辑,而不会影响到父单元。</p>
<p>在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更易管理。在<a href="components.html">后续教程</a>中我们将详述组件,不过这里有一个 (假想的) 例子,以展示使用了组件的应用模板是什么样的:</p>
<pre><code class="hljs html"><span class="hljs-tag">&lt;<span class="hljs-name">div</span> <span class="hljs-attr">id</span>=<span class="hljs-string">"app"</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">app-nav</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">app-nav</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">app-view</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">app-sidebar</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">app-sidebar</span>&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">app-content</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">app-content</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">app-view</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">div</span>&gt;</span></code></pre>
<h3 id="与自定义元素的关系"><a class="headerlink" href="#与自定义元素的关系" title="与自定义元素的关系"></a>与自定义元素的关系</h3><p>你可能已经注意到 Vue 组件非常类似于<strong>自定义元素</strong>——它是 <a href="https://www.w3.org/wiki/WebComponents/" rel="noopener" target="_blank">Web 组件规范</a>的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 <a href="https://github.com/w3c/webcomponents/blob/gh-pages/proposals/Slots-Proposal.md" rel="noopener" target="_blank">Slot API</a><code>is</code> 特性。但是,还是有几个关键差别:</p>
<ol>
<li><p>Web Components 规范已经完成并通过,但未被所有浏览器原生实现。目前 Safari 10.1+、Chrome 54+ 和 Firefox 63+ 原生支持 Web Components。相比之下Vue 组件不需要任何 polyfill并且在所有支持的浏览器 (IE9 及更高版本) 之下表现一致。必要时Vue 组件也可以包装于原生自定义元素之内。</p>
</li>
<li><p>Vue 组件提供了纯自定义元素所不具备的一些重要功能,最突出的是跨组件数据流、自定义事件通信以及构建工具集成。</p>
</li>
</ol>
<p>虽然 Vue 内部没有使用自定义元素,不过在应用使用自定义元素、或以自定义元素形式发布时,<a href="https://custom-elements-everywhere.com/#vue" rel="noopener" target="_blank">依然有很好的互操作性</a>。Vue CLI 也支持将 Vue 组件构建成为原生的自定义元素。</p>
<h2 id="准备好了吗?"><a class="headerlink" href="#准备好了吗?" title="准备好了吗?"></a>准备好了吗?</h2><p>我们刚才简单介绍了 Vue 核心最基本的功能——本教程的其余部分将涵盖这些功能以及其它高级功能更详细的细节,所以请务必读完整个教程!</p>
<div class="modal" id="video-modal"><div class="video-space" style="padding: 56.25% 0 0 0; position: relative;"></div></div>
<div class="guide-links">
<span><a href="installation.html">安装</a></span>
<span style="float: right;"><a href="instance.html">Vue 实例</a></span>
</div>
<div class="footer">
<script src="//m.servedby-buysellads.com/monetization.js" type="text/javascript"></script>
<div class="bsa-cpc"></div>
<script>
(function(){
if(typeof _bsa !== 'undefined' && _bsa) {
_bsa.init('default', 'CKYD62QM', 'placement:vuejsorg', {
target: '.bsa-cpc',
align: 'horizontal',
disable_css: 'true'
});
}
})();
</script>
发现错误?想参与编辑?
<a href="https://github.com/vuejs/cn.vuejs.org/blob/master/srcindex.md" target="_blank">
在 GitHub 上编辑此页!
</a>
</div>
</div>