VueJS - 模板:初學者指南
你好,未來的 Vue.js 超級巨星!我很興奮能成為您進入 Vue.js 模板世界的導遊。作為一個教了多年計算機科學的人,我可以向您保證,Vue.js 是最適合初學者的框架之一。所以,請繫好安全帶,我們一起來探索吧!
Vue.js 模板是什麼?
在我們開始編程之前,讓我們先了解 Vue.js 中的模板是什麼。把它想像成您網頁的骨架——這是您定義 HTML 構架並加入一些 Vue.js 魔法以使其動態化和互動化的地方。
基本結構
這裡有一個簡單的 Vue.js 模板:
<div id="app">
{{ message }}
</div>
在這個例子中,{{ message }}
是 Vue.js 中的一種特殊語法,稱為“插值”。它就像一個佔位符,Vue.js 將用實際數據替換它。
讓我們看看它是如何工作的:
<div id="app">
{{ message }}
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello, Vue!'
}
})
</script>
當您運行這段代碼時,您會在頁面上看到 "Hello, Vue!"。神奇吧?模板中的 {{ message }}
被我們 Vue 實例數據中的 message
值替換。
指令:Vue 的特殊指示
現在,讓我們來談談指令。這些是以 v-
開頭的特殊屬性,給 Vue.js 提供如何行為的指示。它們就像小魔法師,在您的 HTML 上施展魔法!
v-bind:動態屬性
v-bind
指令用於動態地將屬性绑定到表達式。它非常常用,甚至有一個簡寫::
。
<div id="app">
<a v-bind:href="url">點我!</a>
<!-- 簡寫 -->
<a :href="url">點我!</a>
</div>
<script>
new Vue({
el: '#app',
data: {
url: 'https://vuejs.org/'
}
})
</script>
在這個例子中,<a>
標籤的 href
屬性被動態地設定為 Vue 實例數據中的 url
值。
v-if, v-else-if, v-else:條件渲染
這些指令允許您根據表達式的真值條件性地渲染元素。
<div id="app">
<p v-if="seen">現在你看得到我</p>
<p v-else>現在你看不到我</p>
</div>
<script>
new Vue({
el: '#app',
data: {
seen: true
}
})
</script>
嘗試將 seen
改為 false
,然後看神奇發生!
v-for:列表渲染
v-for
指令用於基於數組渲染列表項目。
<div id="app">
<ul>
<li v-for="todo in todos">
{{ todo.text }}
</li>
</ul>
</div>
<script>
new Vue({
el: '#app',
data: {
todos: [
{ text: '學習 JavaScript' },
{ text: '學習 Vue' },
{ text: '建立一些很棒的东西' }
]
}
})
</script>
這將渲染一個待辦事項列表。對於 todos
數組中的每個項目,都會創建一個 <li>
元素。
使用 v-on 進行事件處理
v-on
指令用於聆聽 DOM 事件,當事件被觸發時運行一些 JavaScript 代碼。它非常有用,甚至有一個簡寫:@
。
<div id="app">
<p>{{ message }}</p>
<button v-on:click="reverseMessage">反轉信息</button>
<!-- 簡寫 -->
<button @click="reverseMessage">反轉信息</button>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!'
},
methods: {
reverseMessage: function () {
this.message = this.message.split('').reverse().join('')
}
}
})
</script>
點擊按鈕,然後看您的信息做一個後空翻!
使用 v-model 進行雙向绑定
v-model
指令在表單輸入元素或組件上創建雙向绑定。
<div id="app">
<input v-model="message">
<p>信息是:{{ message }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello Vue!'
}
})
</script>
在輸入字段中輸入內容,然後看信息實時更新。這就像魔法,但更好——這是 Vue.js!
計算屬性和監聽器
計算屬性
計算屬性就像是超強大的數據屬性。它們是基於其他屬性計算出來的屬性。
<div id="app">
<p>原始信息:"{{ message }}"</p>
<p>計算反轉信息:"{{ reversedMessage }}"</p>
</div>
<script>
new Vue({
el: '#app',
data: {
message: 'Hello'
},
computed: {
reversedMessage: function () {
return this.message.split('').reverse().join('')
}
}
})
</script>
reversedMessage
屬性將始終是 message
的反轉,當 message
改變時,它會自動更新!
監聽器
監聽器就像是您數據的警衛。它們會監視數據的變化,並在變化發生時執行動作。
<div id="app">
<p>
問一個是/否問題:
<input v-model="question">
</p>
<p>{{ answer }}</p>
</div>
<script>
new Vue({
el: '#app',
data: {
question: '',
answer: '問題通常包含一個問號。 ;-)'
},
watch: {
question: function (newQuestion, oldQuestion) {
this.answer = '等待您停止輸入...'
this.debouncedGetAnswer()
}
},
created: function () {
this.debouncedGetAnswer = _.debounce(this.getAnswer, 500)
},
methods: {
getAnswer: function () {
if (this.question.indexOf('?') === -1) {
this.answer = '問題通常包含一個問號。 ;-)'
return
}
this.answer = '思考中...'
var vm = this
axios.get('https://yesno.wtf/api')
.then(function (response) {
vm.answer = _.capitalize(response.data.answer)
})
.catch(function (error) {
vm.answer = '錯誤!無法連接到 API。' + error
})
}
}
})
</script>
在這個例子中,我們正在監視 question
屬性。當它改變時,我們更新 answer
並調用一個方法從 API 獲取新答案。
方法表
這裡是一個總結我們所涵蓋方法的表格:
方法 | 描述 | 示例 |
---|---|---|
v-bind |
動態绑定屬性 | <a v-bind:href="url"> |
v-if |
條件渲染 | <p v-if="seen">Now you see me</p> |
v-for |
列表渲染 | <li v-for="item in items">{{ item }}</li> |
v-on |
事件处理 | <button v-on:click="doSomething"> |
v-model |
雙向数据绑定 | <input v-model="message"> |
以上就是 Vue.js 模板的入門步驟。記住,熟能生巧,所以不要害怕嘗試這些概念。在您知道之前,您將會建立令人驚艷的 Vue.js 應用程序。快樂編程!
Credits: Image by storyset