必ず value という名前で作成しましょう
export default {
props: {
value: {
type: String,
required: true
}
}
}
export default {
computed: {
inputValue: {
get() {
return this.value;
},
set(value) {
this.$emit('input', value);
}
}
} ,
}
<input type="text" v-model="inputValue" />
以上です。
<my-component v-model="item.content.value"></my-component>
インストール
yarn add vuedraggable
cssがめんどくさい場合は bootstrapも入れておきましょう
yarn add bootstrap-vue
コレクションの操作がめんどくさい場合は lodashも入れておきましょう
yarn add lodash
yarn add @types/lodash
xhr を使用するときは axios も入れておきましょう
yarn add axios
main.js に 以下も追加します
import Axios from 'axios'
Vue.use(Axios)
mkdir src/types
vi src/types/vuedraggable.d.ts
src/types/vuedraggable.d.ts
declare module 'vuedraggable'
コピーをさせたいリストを次のように変更します
<draggable
group="items"
>
↓
<draggable
:group="{ name: 'items', pull: 'clone', put: false }"
>
<template v-if="data == 'aaa' ">
<img src="cool-img" alt="awesome">
<h1>AAA</h1>
<p>Cool Text AAA</p>
</template>
<template v-else-if="data == 'bbb' ">
<img src="cool-img" alt="awesome">
<h1>BBB</h1>
<p>Cool Text BBB</p>
</template>
npm install --global @vue/cli
一度ターミナルを再起動してから
バージョンの確認
vue -V
@vue/cli 4.5.11
vue create my-project-name
Typescript を利用するために Manually select features を選択します。
cd my-project-name
npm run serve
dist フォルダにビルド結果が出力されます
npm run build
vue 2 の場合は
vue.config.js
module.exports = {
publicPath: './'
}
vue 3 の場合は
vue.config.js
module.exports = {
baseUrl: './'
}
これはオブジェクトが undefined なのに、オブジェクトのメンバ変数にアクセスしようとした時によくおこります。
次のようにあらかじめ存在チェックを入れて回避しましょう。
{{ props.row.client.tel }}
↓ ( v-if を使って props.row.client の存在を確認する )
<span v-if="props.row.client">{{ props.row.client.tel }}</span>
(例: projects の中身が3つ以上ある場合 )
<li v-if="props.row.projects.length > 2">
↓ エラーが出る場合はこのように書き換えます
<li v-if="props.row.projects && props.row.projects.length > 2">
よくある結果セットから、特定のカラムだけ取り出して配列にします。
new Vue({
el: '#app',
data: {
key: 'name',
users: [
{id: 1, name: 'sato', age: 33},
{id: 2, name: 'suzuki', age: 26},
{id: 3, name: 'yamada', age: 40},
]
},
filters: {
pluck(users, key) {
return users.map(user => user[key])
}
}
})
引用 : https://iwb.jp/vuejs-custom-filter-sample-list/
また、そのままカンマ区切りで出力する場合は次のように .join(', ') します。
{{ props.row.tantos | pluck('name').join(', ') }}
filters: {
/**
* @param {Date} value - Date オブジェクト
* @param {string} format - 変換したいフォーマット
*/
moment(value, format) {
return moment(value).format(format);
}
}
npm install -g yarn
プロジェクト名を mysite としています。
yarn create nuxt-app mysite
cd mysite
yarn dev
http://localhost:3000/
でサイトにアクセスできるようになります。
pages ディレクトリの中に works ディレクトリを作成して 1001.vue を次の内容で保存します。
<template>
<div>
アイウエオ
</div>
</template>
http://localhost:3000/works/1001
でアクセスできるようになります。
yarn generate
dist/ ディレクトリが作成されてそこに書き出されます。
<div v-html="my_calc(props.row.sum_no)"></div>
↑
props.row.sum_no を my_calc メソッドを通した結果を エスケープせずに表示します
<span v-html="rawHtml"></span>
↑
この span のコンテンツは rawHtml プロパティの値に置き換えられ、プレーンな HTML として解釈されます。
http://haixing-hu.github.io/vue-html-editor/
jQueryのsummer note の vue.js移植版
[v-cloak] {
display: none;
}
<div v-cloak>
これだけでレンダリング前は非表示にして、レンダリング後に自動的に表示されるようになります。
<transition-group>
<div v-for="v,i in data_loop" :key="v.id">
(% v.tanto_name %)
</div>
</transition-group>
↓ これはレンダリングするとこのようになります
<span>
<div>担当者A</div>
<div>担当者B</div>
<div>担当者C</div>
</span>
transition-group タグが span タグ に変わります
任意のタグにするには
<transition-group>
↓
<transition-group tag="div">
とします。(div タグになります)
.v-enter-active, .v-leave-active {
transition: opacity 1s;
}
.v-enter, .v-leave-to {
opacity: 0;
}
以上で vue.js のデータを削除した時にアニメーションがつけられます。 簡単ですね。
拡張は色々できます。
数字に3桁ごとにカンマをつけるフィルター「number_format」を作成する
Vue.filter('number_format', function (value) {
if (! value) { return false; }
return value.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , '$1,' );
});
よくあるテンプレートのフィルターと同じ書き方で使えます。
{{ props.row.price_with_shipping_no|number_format }}
{{ 123456789 | number_format }}