teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追加

2017/02/28 05:41

投稿

turbgraphics200
turbgraphics200

スコア4269

answer CHANGED
@@ -34,4 +34,58 @@
34
34
  }
35
35
  }
36
36
  });
37
+ ```
38
+
39
+ 2017/2/28 更新
40
+ いろいろと試してみてほぼダメでした。とりあえず、<select>を子コンポーネントにして、選択時のイベントを拾い、親のsavedを更新するようにするというやり方で対応はできました。
41
+ [検証ページ](http://codepen.io/gtk2k/pen/LWVKjj)
42
+ ```html
43
+ <ul id=list>
44
+ <li v-for="(sv, i) in saved">
45
+ <select-component :selected="sv" :idx="i" />
46
+ </li>
47
+ <li>
48
+ <input type="button" value="+" @click="addNewSaved">
49
+ </li>
50
+ </ul>
51
+ ```
52
+ ```javascript
53
+ const selectComponent = Vue.extend({
54
+ data: function() {
55
+ return {
56
+ froms: [{name:"AAA",id:"1"}, {name:"BBB",id:"2"}, {name:"CCC",id:"3"}, {name:"DDD",id:"1"}]
57
+ }
58
+ },
59
+ props: [
60
+ 'idx',
61
+ 'selected'
62
+ ],
63
+ methods: {
64
+ updateVal: function(a, b, c) {
65
+ var selectedItem = this.froms.filter(v => v.name === this.$el.value)[0];
66
+ this.$parent.saved[+this.idx] = selectedItem;
67
+ // savedが更新されているか確認
68
+ console.log('---');
69
+ this.$parent.saved.forEach(v => console.log(v.id, v.name));
70
+ }
71
+ },
72
+ template: '<select v-model="selected.name" @change="updateVal"><option v-for="from in froms" :value="from.name">{{from.name}}</option></select>'
73
+ });
74
+
75
+ const list = new Vue({
76
+ el: '#list',
77
+ data: function() {
78
+ return {
79
+ saved: [{name:"BBB",id:"2"},{name:"CCC",id:"3"}]
80
+ }
81
+ },
82
+ methods: {
83
+ addNewSaved: function () {
84
+ this.saved.push({ name:"AAA", id:"1" });
85
+ },
86
+ },
87
+ components: {
88
+ 'select-component': selectComponent
89
+ }
90
+ });
37
91
  ```