memperkenalkan
Apakah itu Vue.js?
Bersedia?
- Vue (sebutan /vju?/, serupa dengan paparan) ialah rangka kerja
progresif untuk binaan pengguna Tidak seperti rangka kerja besar lain, Vue direka bentuk untuk digunakan lapisan demi lapisan dari bawah ke atas. Pustaka teras Vue hanya memfokuskan pada lapisan paparan, yang bukan sahaja mudah untuk dimulakan, tetapi juga mudah untuk disepadukan dengan perpustakaan pihak ketiga atau projek sedia ada. Sebaliknya, apabila digabungkan dengan rantai alat moden
dan pelbagai perpustakaan sokongan - , Vue juga mampu sepenuhnya menyediakan pemacu untuk aplikasi satu halaman yang kompleks.
Jika anda ingin mengetahui lebih lanjut tentang Vue sebelum menyelaminya, kami menghasilkan video
yang memandu anda melalui konsep terasnya dan contoh projek. - Jika anda sudah menjadi pembangun bahagian hadapan yang berpengalaman dan ingin mengetahui perbezaan antara Vue dan perpustakaan/rangka kerja lain, sila lihat
Bandingkan rangka kerja lain.
Panduan Rasmi menganggap anda mempunyai pengetahuan pertengahan tentang HTML, CSS dan JavaScript. Jika anda baru mula mempelajari pembangunan bahagian hadapan, menggunakan rangka kerja sebagai langkah pertama anda mungkin bukan idea terbaik—kumpul asas sebelum kembali! Pengalaman sebelumnya dengan rangka kerja lain berguna, tetapi tidak diperlukan.
PemasanganCara paling mudah untuk mencuba Vue.js ialah menggunakan contoh Hello World pada JSFiddle. Anda boleh membukanya dalam tab baharu dalam penyemak imbas anda dan ikuti contoh untuk mempelajari beberapa penggunaan asas. Atau anda boleh membuat fail
.html
.html
文件,然后通过如下方式引入 Vue:<!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
或者:
<!-- 生产环境版本,优化了尺寸和速度 --> <script src="https://cdn.jsdelivr.net/npm/vue"></script>
安装教程给出了更多安装 Vue 的方式。请注意我们不推荐新手直接使用
vue-cli
,尤其是在你还不熟悉基于 Node.js 的构建工具时。如果你喜欢交互式的东西,你也可以查阅这个 Scrimba 上的系列教程,它揉合了录屏和代码试验田,并允许你随时暂停和播放。
声明式渲染
Vue.js 的核心是一个允许采用简洁的模板语法来声明式地将数据渲染进 DOM 的系统:
<div id="app"> {{ message }} </div>
var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } })
输出:
Hello Vue!
我们已经成功创建了第一个 Vue 应用!看起来这跟渲染一个字符串模板非常类似,但是 Vue 在背后做了大量工作。现在数据和 DOM 已经被建立了关联,所有东西都是响应式的。我们要怎么确认呢?打开你的浏览器的 JavaScript 控制台 (就在这个页面打开),并修改
app.message
的值,你将看到上例相应地更新。除了文本插值,我们还可以像这样来绑定元素特性:
<div id="app-2"> <span v-bind:title="message"> 鼠标悬停几秒钟查看此处动态绑定的提示信息! </span> </div>
var app2 = new Vue({ el: '#app-2', data: { message: '页面加载于 ' + new Date().toLocaleString() } })
输出:
鼠标悬停几秒钟查看此处动态绑定的提示信息!
这里我们遇到了一点新东西。你看到的
v-bind
特性被称为指令。指令带有前缀v-
,以表示它们是 Vue 提供的特殊特性。可能你已经猜到了,它们会在渲染的 DOM 上应用特殊的响应式行为。在这里,该指令的意思是:“将这个元素节点的title
特性和 Vue 实例的message
属性保持一致”。如果你再次打开浏览器的 JavaScript 控制台,输入
app2.message = '新消息'
,就会再一次看到这个绑定了title
特性的 HTML 已经进行了更新。条件与循环
控制切换一个元素是否显示也相当简单:
<div id="app-3"> <p v-if="seen">现在你看到我了</p> </div>
var app3 = new Vue({ el: '#app-3', data: { seen: true } })
输出:
现在你看到我了
继续在控制台输入
app3.seen = false
, dan kemudian memperkenalkan Vue seperti berikut:<div id="app-4"> <ol> <li v-for="todo in todos"> {{ todo.text }} </li> </ol> </div>
🎜atau: 🎜var app4 = new Vue({ el: '#app-4', data: { todos: [ { text: '学习 JavaScript' }, { text: '学习 Vue' }, { text: '整个牛项目' } ] } })
🎜Tutorial pemasangan🎜 memberikan lebih banyak cara untuk memasang Vue. Sila ambil perhatian bahawa kami tidak mengesyorkan orang baru untuk menggunakanvue-cli
secara langsung, terutamanya jika anda tidak biasa dengan alat binaan berasaskan Node.js. 🎜🎜Jika anda suka perkara interaktif, anda juga boleh menyemak siri tutorial ini tentang Scrimba🎜, yang menggabungkan rakaman Skrin dan kod medan ujian, dan membolehkan anda berhenti seketika dan bermain pada bila-bila masa. 🎜🎜
🎜Declarative rendering
🎜Pada terasnya, Vue.js ialah sistem yang membenarkan pemaparan data secara deklaratif ke dalam DOM menggunakan sintaks templat ringkas:
🎜<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('') } } })
🎜Output:🎜<div id="app-6"> <p>{{ message }}</p> <input v-model="message"> </div>
🎜Kami telah berjaya mencipta aplikasi Vue pertama kami ! Ia kelihatan sangat serupa dengan memaparkan templat rentetan, tetapi Vue melakukan banyak kerja di belakang tabir. Memandangkan data dan DOM telah dipautkan, semuanya responsif. Bagaimana kita mengesahkan perkara ini? Buka konsol JavaScript penyemak imbas anda (buka pada halaman ini) dan ubah suai nilaiapp.message
Anda akan melihat kemas kini contoh di atas dengan sewajarnya. 🎜🎜Selain interpolasi teks, kita juga boleh mengikat sifat elemen seperti ini: 🎜var app6 = new Vue({ el: '#app-6', data: { message: 'Hello Vue!' } })
// 定义名为 todo-item 的新组件 Vue.component('todo-item', { template: '<li>这是个待办项</li>' })
🎜Output:
🎜<ol> <!-- 创建一个 todo-item 组件的实例 --> <todo-item></todo-item> </ol>
🎜Di sini kita menemui sesuatu yang baharu. Ciriv-bind
yang anda lihat dipanggil arahan. Arahan diawali denganv-
untuk menunjukkan bahawa ia adalah ciri khas yang disediakan oleh Vue. Seperti yang anda mungkin sangka, mereka menggunakan gelagat responsif khas pada DOM yang diberikan. Di sini, maksud arahan ini ialah: "Jadikan atributtitle
nod elemen ini konsisten dengan atributmessage
contoh Vue." 🎜🎜Jika anda membuka konsol JavaScript penyemak imbas sekali lagi dan memasukkanapp2.message = 'New Message'
, anda akan melihat atributtitle
terikat ini sekali lagi HTML telah dikemas kini. 🎜🎜
🎜Keadaan dan kitaran
🎜Ia juga agak mudah untuk mengawal sama ada elemen dipaparkan atau tidak:
🎜Vue.component('todo-item', { // todo-item 组件现在接受一个 // "prop",类似于一个自定义特性。 // 这个 prop 名为 todo。 props: ['todo'], template: '<li>{{ todo.text }}</li>' })
<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>
🎜Output: 🎜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: '随便其它什么人吃的东西' } ] } })
🎜Teruskan masukkanapp3.seen = false
dalam konsol, anda akan dapati bahawa mesej yang dipaparkan sebelum ini hilang . 🎜Contoh ini menunjukkan bahawa kita boleh mengikat data bukan sahaja pada teks atau atribut DOM, tetapi juga kepada DOM struktur. Selain itu, Vue juga menyediakan sistem kesan peralihan yang berkuasa yang boleh menggunakan kesan peralihan secara automatik apabila Vue memasukkan/mengemas kini/mengalih keluar elemen.
Terdapat banyak arahan lain, masing-masing mempunyai fungsi khas. Contohnya, arahan
v-for
boleh mengikat data tatasusunan untuk memaparkan senarai item:v-for
指令可以绑定数组的数据来渲染一个项目列表:<div id="app"> <app-nav></app-nav> <app-view> <app-sidebar></app-sidebar> <app-content></app-content> </app-view> </div>
rrreee输出:
在控制台里,输入
app4.todos.push({ text: '新项目' })
,你会发现列表最后添加了一个新项目。处理用户输入
为了让用户和你的应用进行交互,我们可以用
rrreeerrreeev-on
指令添加一个事件监听器,通过它调用在 Vue 实例中定义的方法:输出:
注意在
reverseMessage
方法中,我们更新了应用的状态,但没有触碰 DOM——所有的 DOM 操作都由 Vue 来处理,你编写的代码只需要关注逻辑层面即可。Vue 还提供了
rrreeerrreeev-model
指令,它能轻松实现表单输入和应用状态之间的双向绑定。输出:
组件化应用构建
组件系统是 Vue 的另一个重要概念,因为它是一种抽象,允许我们使用小型、独立和通常可复用的组件构建大型应用。仔细想想,几乎任意类型的应用界面都可以抽象为一个组件树:
在 Vue 里,一个组件本质上是一个拥有预定义选项的一个 Vue 实例。在 Vue 中注册组件很简单:
rrreee现在你可以用它构建另一个组件模板:
rrreee但是这样会为每个待办项渲染同样的文本,这看起来并不炫酷。我们应该能从父作用域将数据传到子组件才对。让我们来修改一下组件的定义,使之能够接受一个 prop:
rrreee现在,我们可以使用
Output:v-bind
rrreeerrreeeDalam konsol, masukkan
🎜🎜app4.todos.push({ text: 'Projek baharu ' })
, anda akan mendapati bahawa item baharu ditambahkan pada penghujung senarai.🎜Memproses input pengguna🎜
🎜Untuk pengguna berinteraksi dengan aplikasi anda , kita boleh menggunakan arahanv-on
untuk menambah pendengar acara, yang melaluinya ia memanggil kaedah yang ditakrifkan dalam contoh Vue: 🎜rrreeerrreee🎜Output: 🎜🎜🎜🎜🎜Perhatikan bahawa dalammesej terbalik > kaedah, Kami mengemas kini keadaan aplikasi tanpa menyentuh DOM - semua operasi DOM dikendalikan oleh Vue, dan kod yang anda tulis hanya perlu memfokuskan pada tahap logik. 🎜🎜Vue juga menyediakan arahanv-model
, yang boleh mencapai pengikatan dua hala dengan mudah antara input borang dan keadaan aplikasi. 🎜rrreeerrreee🎜Output: 🎜🎜🎜🎜Pembinaan aplikasi berasaskan komponen🎜
🎜Sistem komponen ialah satu lagi konsep penting Vue, kerana Ia adalah abstraksi yang membolehkan kami membina aplikasi besar menggunakan komponen kecil, bebas dan sering boleh digunakan semula. Jika anda memikirkannya dengan teliti, hampir semua jenis antara muka aplikasi boleh diabstraksikan ke dalam pepohon komponen: 🎜🎜🎜🎜Dalam Vue, komponen pada asasnya ialah contoh Vue dengan pilihan yang dipratentukan. Mendaftar komponen dalam Vue adalah mudah: 🎜rrreee🎜 Kini anda boleh menggunakannya untuk membina templat komponen lain: 🎜rrreee🎜 Tetapi ini menghasilkan teks yang sama untuk setiap item tugasan, yang tidak kelihatan menarik. Kita seharusnya dapat menghantar data daripada skop induk kepada komponen anak. Mari ubah suai definisi komponen untuk menerima prop🎜: 🎜rrreee🎜Kini, kita boleh menggunakan < The code>v-bind Arahan menghantar item tugasan kepada setiap komponen output gelung: 🎜rrreeerrreee🎜Output: 🎜🎜🎜🎜🎜Walaupun ini hanyalah contoh yang disengajakan, kami telah berjaya membahagikan aplikasi kepada dua unit yang lebih kecil. Unit kanak-kanak dipisahkan dengan baik daripada unit induk mereka melalui antara muka prop. Kami kini boleh menambah baik lagi komponen
<todo-item>
untuk menyediakan templat dan logik yang lebih kompleks tanpa menjejaskan unit induk.<todo-item>
组件,提供更为复杂的模板和逻辑,而不会影响到父单元。在一个大型应用中,有必要将整个应用程序划分为组件,以使开发更易管理。在 后续教程 中我们将详述组件,不过这里有一个 (假想的) 例子,以展示使用了组件的应用模板是什么样的:
rrreee与自定义元素的关系
你可能已经注意到 Vue 组件非常类似于自定义元素——它是 Web 组件规范的一部分,这是因为 Vue 的组件语法部分参考了该规范。例如 Vue 组件实现了 Slot API 与
Dalam aplikasi yang besar, adalah perlu untuk membahagikan keseluruhan aplikasi kepada komponen untuk menjadikan pembangunan lebih mudah diurus. Kami akan merangkumi komponen secara terperinci dalam mengikuti tutorialis
- , tetapi berikut ialah contoh (hipotesis) untuk menunjukkan aplikasi yang menggunakan komponen Apa templat kelihatan seperti:
- rrreee
- Hubungan dengan elemen tersuai
Tersuai Elements - ia adalah sebahagian daripada spesifikasi Komponen Web, kerana bahagian sintaks komponen Vue merujuk kepada spesifikasi ini. Sebagai contoh, komponen Vue melaksanakan API Slot
danadalah
sifat. Walau bagaimanapun, terdapat beberapa perbezaan utama:Spesifikasi Komponen Web telah dilengkapkan dan diterima pakai, tetapi tidak dilaksanakan secara asli oleh semua penyemak imbas. Pada masa ini, Safari 10.1+, Chrome 54+ dan Firefox 63+ menyokong Komponen Web secara asli. Sebaliknya, komponen Vue tidak memerlukan sebarang poliisi dan berkelakuan secara konsisten merentas semua penyemak imbas yang disokong (IE9 dan ke atas). Apabila perlu, komponen Vue juga boleh dibalut dengan elemen tersuai asli. Komponen Vue menyediakan beberapa ciri penting yang tidak ada pada elemen tersuai tulen, terutamanya aliran data merentas komponen, komunikasi acara tersuai dan penyepaduan alat binaan.
Walaupun Vue tidak menggunakan elemen tersuai secara dalaman, apabila aplikasi menggunakan elemen tersuai atau diterbitkan dalam bentuk elemen tersuai,
. CLI Vue juga menyokong membina komponen Vue menjadi elemen tersuai asli. 🎜🎜🎜🎜🎜Adakah anda bersedia? 🎜🎜🎜🎜Kami baru sahaja membincangkan secara ringkas ciri paling asas teras Vue - selebihnya tutorial ini akan merangkumi ciri lanjutan ini dengan lebih terperinci, jadi pastikan anda membaca keseluruhan tutorial! 🎜🎜🎜🎜🎜 🎜
masih mempunyai kebolehoperasian yang baik