starzware

ITスキル

Vue.js

TIPS
if

例) <div v-if="errors.length" >
※ifはDOM要素を追加削除
for

例) <li v-for="error in errors" >
show

例) <li v-show="error in errors" >
※showはsytleのdisplayによる表示/非表示
v-

v-on v-on:input/v-on:change/v-on:click
 (省略形)@click v-on:click
v-bind v-bind:属性名
 (省略形):属性名
v-model v-on:change/v-bind:valueをまとめる
基本形

var vm = new Vue({
  data: {
    キー: 値
  },
  beforeCreate: {
    //(インスタンスが生成されデータが初期化される前)
  }
  created: {
    //(インスタンスが生成されデータが初期化される後)
  }
  beforeMounted: {
    //(インスタンスがDOM要素にマウントされる前)
  }
  mounted: {
    //(インスタンスがDOM要素にマウントされる後)
  }
  beforeUpdate: {
    //(データが更新されDOM要素に適用される前後)
  }
  updated: {
    //(データが更新されDOM要素に適用される後)
  }
  beforeDestroy: {
    //(VUEインスタンスが破棄される前)
  }
  destroyed: {
    //(VUEインスタンスが破棄される後)
  }
  filters:{
    関数名: function(){}
  },
  computed:{
    関数名: function(){}
  },
  methods:{
    関数名: function(event){}
  }
})
基本形(component)

//import {OtherFunction} from 'xxxxx'
//import OtherComponent from 'xxxxx'
export default {
  component:{
    OtherComponent
  },
  data: {
    キー: 値
  },
  filters:{
    関数名: function(){}
  },
  computed:{
    関数名: function(){}
  },
  methods:{
    関数名: function(event){}
  }
}
ライフサイクル

(インスタンスが生成されデータが初期化される前後)
beforeCreate
created
(インスタンスがDOM要素にマウントされる前後)
beforeMounted
mounted
(データが更新されDOM要素に適用される前後)
beforeUpdate
updated
(VUEインスタンスが破棄される前後)
beforeDestroy
destroyed
アセット

static/〜 webpackしない
src/assets/〜 webpackする
環境変数

production → config/prod.env.js
development → config/dev.env.js
testing → test.env.js

prcess.envで制御?
props

propsで定義した変数は参照・変更ともにwatch/computed以外の関数では使用しない
使用すると、連動しなくなる
watch

オブジェクト(プロパティを持っている)をwatchする場合は
deep:trueに設定する
[vue router]リンク

[vue router]としてのリンク
例) 
<router-link to="/">Home</router-link>
[router]ハメ込み場所

[vue router]で可変する場所(タグ) in App.vue
例) 
<router-view/>
[router]ルート設定ファイル

[vue router]でルート設定するファイル
router/index.js
[router]ルートフック

[vue router]ルートフック
A.グローバルフック
 router.beforeEach
B.ルート単位フック
 ルート設定で定義
 beforeEnter:
C.コンポーネント内フック
 beforeRouterEnter: function 〜
 (離れていくときはbeforeRouterLeave)
[Vuex]状態

使うとき
 this.$store.xxxxx
ステート(state:)
ミューテーション(mutations:)
 ステートの更新
 store.commit('関数')
ゲッター(getters:)
 ステートの値を別の値に算出するとき
アクション(actions:)
 非同期処理や外部APIと通信し、ミューテーションを呼び出す
 store.dispatch('関数')
親コンポーネントからデータを渡す&イベントを受け取る

<ChildComponent :属性名="this.変数" @click="子からのイベント受け取りした際の呼び出し関数" ></ChildComponent>
import ChildComponent from './ChildComponent'
親コンポーネントからデータを受け取る&イベントを渡す

Vue.component(コンポーネント名, {
  props:{
    親から受け取る属性名:{
        type: Stringとか,
        default: デフォルト値,
        required: 必須か(boolean),
        validator: バリデーション用関数
    }
  },
  methods:{
    sample(){
        // 親コンポーネントにイベントを渡す
        this.$emit("onClick", "引数");
    }
  }
})
親コンポーネントへイベント通知する(Javascript構文だけど)

イベントのlisten   $on(eventName)
イベントのtrigger  $emit(eventName)
exportとimport

(exportする外部ファイル)
function_file.js
  function funcA() {}
  export default { funcA }; //これをしないと外部から使用できない
(importする側)
import { funcA } from './function_file'; //exportされているものを使用できるようにする
プロジェクト作成

vue create <project_name>
==========================================
Vue CLI v x.x.x
? Please pick a preset: [Manually select features]
? Check the features needed for your project: [Babel, Router, Linter, Unit]
? Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n) [Yes]
? Pick a linter / formatter config: [Prettier]
? Pick additional lint features: (Press <space> to select, <a> to toggle all, <i> to invert selection) [Lint on save]
? Pick a unit testing solution: [Jest]
? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? (Use arrow keys) [In dedicated config files]
? Save this as apreset for future projects? (y/N) [N]
==========================================
[axios]リクエストパラメータ

baseURL: urlが絶対パスではない場合に結合
url:     url
method:  get / post / put
params:  urlパラメータ指定
data:    リクエストパラメータ?指定
timeout: タイムアウト
headers: ヘッダ設定
responseType: レスポンスタイプ(blobとか)
[Vue Router]

index.htmlにアクセスするようにする
ビルドの際にindex.htmlにapp.jsを読み込むソースが入り込む
(多分、index.htmlのapp.jsでルーティング処理されて該当画面の処理に処理が移る)
(Springで言うDispatchServletのようなもの?)
xxxx

$refs ref指定している部分
$t    (Vue I18n) $t('')
$router (Vue Router)#path #query #push
フィルタとソート

// filter
const COLUMN = 'column1';
this.list = json_data.filter(v => v[COLUMN].includes(this.searchText));
// sort(asc)
const col = 'column1';
this.list.sort(function(a, b) { if (a[col] > b[col]) { return 1; } else { return -1; } });
テーブルとデータ

<table>
<tr v-for="item in list">
<td>{{item.column1}}</td>
</tr>
</table>