Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

Vue.js 入門 vol.1

参考サイト

https://jp.vuejs.org/v2/guide/

Vue のチュートリアル

  • vueの基本機能をみてみる。
<!-- ここでvueを読み込むする -->
<script src="https://unpkg.com/vue"></script>

<!-- ここのappは、vue のselector? -->
<div id="app">
  <!-- {{ }} でcontextの、messageを表示できる -->
  {{ message }}
</div>
var app = new Vue({
  el: '#app', // elで #app は、id=app で指定ができるという意味かな?
  data: {
    message: 'Hello Vue!' // message
  }
})
  • 次に、ディレクティブと言われる機能を使ってみる。
<script src="https://unpkg.com/vue"></script>

<div id="app-2">
<!-- v-bindは、この要素の title 属性を Vue インスタンスの message プロパティによって更新して保存する という意味 -->
  <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()
  }
})
  • ちなみに、app2 のmessageは、app2.message = "test" というように、上書きできる。
var app2 = new Vue({
    el: '#app-2',
  data: {
    message: 'You loaded this page on ' + new Date()
  }
})

app2.message = "test" //この場合、v-bind:title="message"で表示されるのは、"test"に上書きされる
  • if文を使ってみる。
<div id="app-3">
  <p v-if="seen">Now you see me</p>
</div>
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})

// app3.seen = false とすると、文章は消える
  • for文を使ってみる。
<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 Javas'},
      { text: 'Learn Vue'},
      { text: 'Build something'}
    ]
  }
})
  • ユーザー入力の制御。v-onディレクティブを使ってみる。
<div id="app-5">
  <p>{{ message }}</p>
  <!-- v-onディレクティブを使って clickした時に実行する メソッドを呼び出す -->
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>
var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: { //methodsで、実行する
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})
  • v-modelを使ってみる。
<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!' //messageの初期値
  }
})

Component

  • Componentを登録してみる。htmlの方は、呼び出すときのコード
// todo-item と呼ばれる新しいコンポーネントを定義
Vue.component('todo-item', {
  template: '<li>This is a todo</li>'
})
<ol>
  <!-- todos 配列にある各 todo に対して todo-item コンポーネントのインスタンスを作成する -->
  <todo-item></todo-item>
</ol>
  • componentを利用して、todo listを作成してみる。
Vue.component('todo-item', { //<todo-item> selector
  props: ['todo'], // todo というプロパティを設定
  template: '<li>{{ todo.text }}</li>' //todoプロパティのtext属性?を取り出す
})
var app7 = new Vue({
  el: '#app-7', // id=app-7
  data: {
    groceryList: [
      { id: 0, text: 'Vegetables' },
      { id: 1, text: 'Cheese' },
      { id: 2, text: 'Whatever else humans are supposed to eat' }
    ]
  }
})
<div id="app-7">
  <ol>
    <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
  </ol>
</div>

* v-for="item in groceryList"で、itemを1つずつ取り出す。
* 取り出したitemオブジェクトを、v-bindで、todo-itemコンポーネントの、todoプロパティに渡す。
* todo-itemは、templateを返して、表示する。
* どうもこれは、v-for と、v-bindの順番を逆にしても動作するぽい。

まとめ

  • 文法もあんまり難しくなさそうだし、めっちゃよさそう!