iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 2
1
Modern Web

用範例理解 Vue.js系列 第 2

用範例理解 Vue.js #2:用七個官方範例初步認識 Vue.js

https://ithelp.ithome.com.tw/upload/images/20171212/20107107vmAQZ29kFA.png

非常偷懶的把官方介紹七個範例照打,目的在於粗略了解 Vue 在幹麻。

可以點擊各個範例的 fiddle 連結自行修改和觀看結果。

Vue example

01 - Hello Vue

最基礎的資料綁定就是插入 string,利用 Mustache 的語法:

<div id="app">
  <p>{{ message }}</p>
</div>
new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue.js!'
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107x3c68K62nj.png
附上 fiddle (https://jsfiddle.net/hunterliu/ofmm9pk9/)

有時 double curly braces 的語法會與後端有衝突,為避免這樣的情況發生,可以在 Vue Instance 的選項物件中加入delimiters: ['${', '}']
我們可以簡單改寫上例如下:

<div id="app">
  <p>${ message }</p>
</div>
new Vue({
  el: '#app',
  delimiters: ['${', '}'],
  data: {
    message: 'Hello Vue.js!'
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107bc5yX6WBUJ.png
附上 fiddle https://jsfiddle.net/hunterliu/ofmm9pk9/1/

02 - Bind Message

Vue 可以透過 v-bind 綁定 HTML 的屬性。

<div id="app-2">
  <span v-bind:title="message">
    Hover your mouse over me for a few seconds
    to see my dynamically bound title!
  </span>
</div>
var app2 = new Vue({
  el: '#app-2',
  data: {
    message: 'You loaded this page on ' + new Date().toLocaleString()
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107kvPot9ao50.png
附上 fiddle (https://jsfiddle.net/hunterliu/f7swmcnb/)

03 - Conditional Rendering

透過 v-if 這個指令(directive)決定是否顯示p tag。

<div id="app-3">
  <p v-if="seen">Now you see me</p>
</div>
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107qpwEk8HPBl.png
附上 fiddle (https://jsfiddle.net/hunterliu/hj0kuy8j/1/)

04 - List Rendering

透過 v-for 這個指令(directive)顯示 todos list。

<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: 'Learn JavaScript' },
      { text: 'Learn Vue' },
      { text: 'Build something awesome' }
    ]
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107XC2A0JseCv.png
附上 fiddle (https://jsfiddle.net/hunterliu/5qx0rguc/)

在console輸入app4.todos.push({ text: 'New item' })可以看到新增了一項todo。

05 - Event Handling

透過 v-on 綁定 click 事件,點擊button時執行reverseMessage,將message反轉。

<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>
var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107iZuXkYOU6u.png
附上 fiddle (https://jsfiddle.net/hunterliu/s5qcnq9c/)

06 - Form Input Bindings

透過 v-model 可雙向綁定 input 和 vue instance 的 message。

<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107o28xlUvxcU.png
附上 fiddle (https://jsfiddle.net/hunterliu/hakh94ro/1/)

07 - Component

<div id="app-7">
  <ol>
    <todo-item
      v-for="item in groceryList"
      v-bind:todo="item"
      v-bind:key="item.id">
    </todo-item>
  </ol>
</div>
Vue.component('todo-item', {
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
})

var app7 = new Vue({
  el: '#app-7',
  data: {
    groceryList: [
      { id: 0, text: 'Vegetables' },
      { id: 1, text: 'Cheese' },
      { id: 2, text: 'Whatever else humans are supposed to eat' }
    ]
  }
})

執行結果
https://ithelp.ithome.com.tw/upload/images/20171212/20107107d5lGmf5qY6.png
附上 fiddle (https://jsfiddle.net/hunterliu/6bmrr9ar/1/)

參考資料


上一篇
用範例理解 Vue.js #1:前言
下一篇
用範例理解 Vue.js #3:Vue Instance & Instance Lifecycle Hooks
系列文
用範例理解 Vue.js30

1 則留言

我要留言

立即登入留言