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>
这将渲染一个待办事项列表。每个 <li>
元素都是为 todos
数组中的每个项创建的。
使用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