Quick Started Back
As a framework for building user interfaces, vue is mainly designed to focus on the view layer only, so that developers can easily integrate it with other libraries or existing projects. Here is a note for quick starting within Vue according to the official document, and if you want to learn it in deep, it is suggested that going through the whole tutorials step by step.
1. Declarative Rendering
With template syntax supported by Vue, we are allowed to declaratively render data to the DOM like following snippet:
<div id="app">
<!-- using double braces, while single under React -->
{{ message }}
</div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue',
},
});
Correspondingly, Vue will handle all data bindings underneath, which sometimes should be a complicated process, as when we set app.message
with another text, we can feel its data bindings by checking the change of DOM. What if data.message
can be generated directly as the element's title? Vue has provided us a specific property, named v-bind:{property}
, for us, which apparently with v-
as its prefix.
<div id="app" v-bind:title="message">
hover to check titles
</div>
const app = new Vue({
el: '#app',
data: {
message: `current time: ${new Date().toLocaleString()}`,
},
});
Whenever you hover the application element, the title should be shown with a dynamic data message (like time in this instance).
2. Conditionals and Loops
Some logical operations upon templates, like conditional logic or circle logic, are quite a hard requirement for all developers as there are all kinds of data to show.
Take the conditional one as an example, Vue has provided us v-if
, while v-for
for circles.
<div id="app">
<span v-if="visible">Can you see me?</span>
</div>
const app = new Vue({
el: '#app',
data: {
visible: true,
},
});
When there is cyclical data like todo
lists:
<div id="app">
<p>TODO lists</p>
<ol>
<li v-for="todo in todos">{{ todo.content }}</li>
</ol>
</div>
const app = new Vue({
el: '#app',
data: {
todos: [
{content : 'task1'},
{content : 'task2'},
{content : 'task3'},
]
},
});
3. Handling User Input
The most important thing for Vue is to handle inputs from users, like clicking, typing, etc. v-on:{event}
directive can be simply used for those cases, like v-on:click
for listening clicking from users. Certainly, we may also need to create an handler in the Vue instance:
<div id="app">
<p>{{ message }}</p>
<button v-on:click="reverse">reverse message</button>
</div>
const app = new Vue({
el: '#app',
data: {
message: 'Hello Vue',
},
methods: {
reverse: function () {
this.message = this.message.split('').reverse().join('');
},
},
});
From the snippet above, we can apparently know that what we need to do inside an Vue instance is to change its state, rather than modifying its DOM directly, as Vue has given you a favor. What if handling users' typing? v-model
is a great directive for making two-way biding between from input and the instance:
<div id="app">
<p>{{ message }}</p>
<input v-model="message" />
</div>
4. Components
As projects become larger and larger, a component system is an important concept for developers to manage a large-scale system with different self-contained and reusable components, like React. In Vue, register a component is quite straightforward:
Vue.component('todo-item', {
template: '<li>this is a todo item</li>',
});
And then, in the template, we can import this component like this:
<ol>
<!-- an instance of the todo-item component -->
<todo-item></todo-item>
</ol>
When we need to generate different items with different data, we can set up a defined property for this component before, named with todo
here:
Vue.component('todo-item', {
props: ['todo'],
template: '<li>{{ todo.content }}</li>',
});
As shown above, the component accept a todo
property to access its content
member so that it can generate different things. While using the component within template, we can pass data through it like this:
<ol>
<todo-item todo="task1></todo-item>
<todo-item todo="task2></todo-item>
<todo-item todo="task3></todo-item>
</ol>
Oops, circle logic has shown its charm here (note: key
is required when loop Vue components, which will be explained in a later article):
<ol>
<todo-item
v-for="task in tasks"
v-bind:todo="task"
v-bind:key="task.id"></todo-item>
</ol>