質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1402閲覧

Vue.js で computedのsetプロパティとgetプロパティに変数を渡すにはどうすればいいですか

qwe001

総合スコア133

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/07/03 03:37

ボタンを押すと、チェックボックスを全選択する機能を実装しました。

今回、チェックボックスが二種類あるので、二つ分用意しました。

computed : { selectAllGenres : { get : function() { if(this.chkGenres.length == this.genres.length){ return true; } else { return false; } }, set : function (value) { //全選択のチェックボックスを操作した場合 let chkArr = new Array(); if(value){ this.genres.forEach(function(genre){ chkArr.push(genre.name); }); } this.chkGenres = chkArr; } } } computed : { selectAllDepartments : { get : function() { if(this.chkDepartments.length == this.departments.length){ return true; } else { return false; } }, set : function (value) { // 全選択のチェックボックスを操作した場合 let chkArr = new Array(); if(value){ this.departments.forEach(function(department){ chkArr.push(department.name); }); } this.chkDepartments = chkArr; } } }

ほぼ同じ記述ですので、こんな風に関数をまとめたいです
(試してないので多分動きませんがイメージとして)

computed : { selectAll : { get : function(chkItems, items) { if(chkItems.length == items.length){ return true; } else { return false; } }, set : function (value, chkItems, items) { //全選択のチェックボックスを操作した場合 let chkArr = new Array(); if(value){ this.items.forEach(function(item){ chkArr.push(item.name); }); } chkItems = chkArr; } }, selectAllGenres : { get : this.selectAll.get(this.chkGenres, this.genres), set : this.selectAll.set(value, this.chkGenres, this.genres) }, selectAllDepartments : { get : this.selectAll.get(this.chkDepartments, this.departments), set : this.selectAll.set(value, this.chkDepartments, this.departments) } }

私のやりたいことを実現する方法はありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sousuke

2020/07/03 05:43

htmlとdataの提示もお願いしたい。
guest

回答1

0

ベストアンサー

methodsでやることだと思うけどなぜcomputedなの?

余計なおせっかいでindeterminate かっこいいだるるるおぉ!?
jsfiddle

html

1<div id="app"> 2 <label> 3 <input type="checkbox" 4 v-model.lazy="items1All" 5 @change="allChange(items1All,items1)" 6 :indeterminate.prop="isIndeterminate(items1)">AllChange! 7 </label> 8 <ul> 9 <template v-for="(i,index) in items1" :key="i.text"> 10 <li><label><input type="checkbox" v-model="i.check">{{ i.text }}</label></li> 11 </template> 12 </ul> 13</div>

javascript

1var app = new Vue({ 2 el: '#app', 3 data: { 4 items1All: false, 5 items1: [{ 6 check: false, 7 text: "item1" 8 }, { 9 check: false, 10 text: "item2" 11 }, { 12 check: false, 13 text: "item3" 14 }, { 15 check: false, 16 text: "item4" 17 }, { 18 check: false, 19 text: "item5" 20 }] 21 }, 22 methods: { 23 isIndeterminate: function(arr) { 24 const ret = !(arr.every((v) => v.check) || arr.every((v) => !v.check)) 25 if (ret) { 26 this.items1All = false; 27 } 28 return ret; 29 }, 30 allChange: function(val, arr) { 31 arr.forEach((v) => { 32 v.check = val 33 }) 34 } 35 } 36})

isIndeterminateのfunctionもっとかっこよく書ける人いない?(他人事)

投稿2020/07/03 06:40

sousuke

総合スコア3830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問