study Vue.js 1

https://jp.vuejs.org/v2/guide/ 「はじめに」を理解する

by naba_naba

HTML

<!-- <script src="https://unpkg.com/vue"></script> -->
<h3>はじめにを理解する</h3>
<p>Hello Vue!</p>
<div id="app">
  {{ message }}
</div>
<button id='btn'>change message</button>
<hr>
<p class="memo">メモ:v-〇〇 属性はディレクティブと呼ばれています。Vue.js によって提供された特別な属性です。
</p>
<p>v-bindディレクティブ :title<br>マウスオーバーするとページを開いた時間が反映されているよ</p>
<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>
<button id='btn2'>title change</button>
<hr>
<p>v-ifディレクティブ 条件分岐 (表示切り替え)</p>
<div id="app-3">
  <span v-if="seen">Now you see me</span>
</div>
<button id='btn3'>hide</button>
<hr>
<p>v-forディレクティブ ループ</p>
<div id="app-4">
  <ol>
    <li v-for="todo in todos">
      {{ todo.text }}
    </li>
  </ol>
</div>
<button id='btn4'>add list</button>
<hr>
<p>v-onディレクティブ ユーザー入力の制御</p>
<p class="memo">
メモ:イベントリスナを追加しVue インスタンスのメソッドを呼び出せた。<br>javascriptでのDOM操作をしないでアプリケーションの状態のみ更新している。
</p>
<div id="app-5">
  <p>{{ message }}</p>
  <button v-on:click="reverseMessage">Reverse Message</button>
</div>
<hr>
<p>v-modelディレクティブ 双方向バインディング</p>
<div id="app-6">
  <p>{{ message }}</p>
  <input v-model="message">
</div>
<p>
コンポーネントによる構成
</p>
<div id="app-7">
  <ol>
    <!-- 
      各 todo-item の内容を表す todo オブジェクトを与えます。
      これにより内容は動的に変化します。
      また後述する "key" を各コンポーネントに提供する必要があります。
    -->
    <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
  </ol>
</div>
<p class="memo">
ざっくり何を書いているか:<br> <コンポーネント名 v-for="配列のアイテム(任意名称) in 配列データ(例ではapp7.groceryList)" v-bind:コンポーネントのプロパティ="配列のアイテム(任意名称)"></コンポーネント名>
</p>
<p class="memo">
メモ:大規模なアプリケーションでは、開発を行いやすくするために、アプリケーション全体をコンポーネントに分割することが必要です。
</p>
<p class="memo">
メモ:コンポーネントにはプロパティとテンプレートが含まれる
</p>
<hr>
<h3>ここまでの内容でコンポーネントを使ってユーザー入力の制御を入れる</h3>
<div id="app-8">
  <list-item v-for="item in myList" v-bind:list="item"></list-item>
  <input v-model="message">
  <button v-on:click="addList">add List</button>
</div>
<hr>
<h3>疑問・課題</h3>
<ul>
  <li>コンポーネントごとにnew...

SCSS

p {
  color: #ca5555;
}
.memo {
  color: #7d75ff;
  font-size: 0.8em;
}

JavaScript

var app = new Vue({
  el: '#app',
  data: {
    message: 'Hello Vue!'
  }
})
var app2 = new Vue({
  el: '#app-2',
  data: {
    message: 'You loaded this page on ' + new Date().toLocaleString()
  }
})
var app3 = new Vue({
  el: '#app-3',
  data: {
    seen: true
  }
})
var app4 = new Vue({
  el: '#app-4',
  data: {
    todos: [
      { text: 'Learn JavaScript' },
      { text: 'Learn Vue' },
      { text: 'Build something awesome' }
    ]
  }
})



var btn = document.getElementById('btn');
btn.addEventListener('click', function(){
	app.message = 'change!';
});
var btn2 = document.getElementById('btn2');
btn2.addEventListener('click', function(){
	app2.message = 'some new message';
});
var btn3 = document.getElementById('btn3');
btn3.addEventListener('click', function(){
	app3.seen = false;
});
var btn4 = document.getElementById('btn4');
btn4.addEventListener('click', function(){
	app4.todos.push({ text: 'New item' });
});


var app5 = new Vue({
  el: '#app-5',
  data: {
    message: 'Hello Vue.js!'
  },
  methods: {
    reverseMessage: function () {
      this.message = this.message.split('').reverse().join('')
    }
  }
})
var app6 = new Vue({
  el: '#app-6',
  data: {
    message: 'Hello Vue!'
  }
})

// todo-item と呼ばれる新しいコンポーネントを定義
Vue.component('todo-item', {
  // todo-item コンポーネントはカスタム属性のような "プロパティ" で受け取ります。
  // このプロパティは todo と呼ばれます。
  props: ['todo'],
  template: '<li>{{ todo.text }}</li>'
})
// 提供する"key" 
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' }
    ]
  }
})


Vue.component('list-item', {
  props: ['list'],
  template: '<li>{{ list.string }}</li>'
})

var app8 = new Vue({
  el: '#app-8',
  data: {
    myList: [
      { id: 0, string: 'リスト1' },
      { id: 1, string: 'リスト2' },
      { id: 2, string: 'リスト3' }
    ]
  },
  message: '',
  methods: {
    addList: function () {
     this.myList.push({...