回答編集履歴

1

追加

2017/02/28 05:41

投稿

turbgraphics200
turbgraphics200

スコア4269

test CHANGED
@@ -71,3 +71,111 @@
71
71
  });
72
72
 
73
73
  ```
74
+
75
+
76
+
77
+ 2017/2/28 更新
78
+
79
+ いろいろと試してみてほぼダメでした。とりあえず、<select>を子コンポーネントにして、選択時のイベントを拾い、親のsavedを更新するようにするというやり方で対応はできました。
80
+
81
+ [検証ページ](http://codepen.io/gtk2k/pen/LWVKjj)
82
+
83
+ ```html
84
+
85
+ <ul id=list>
86
+
87
+ <li v-for="(sv, i) in saved">
88
+
89
+ <select-component :selected="sv" :idx="i" />
90
+
91
+ </li>
92
+
93
+ <li>
94
+
95
+ <input type="button" value="+" @click="addNewSaved">
96
+
97
+ </li>
98
+
99
+ </ul>
100
+
101
+ ```
102
+
103
+ ```javascript
104
+
105
+ const selectComponent = Vue.extend({
106
+
107
+ data: function() {
108
+
109
+ return {
110
+
111
+ froms: [{name:"AAA",id:"1"}, {name:"BBB",id:"2"}, {name:"CCC",id:"3"}, {name:"DDD",id:"1"}]
112
+
113
+ }
114
+
115
+ },
116
+
117
+ props: [
118
+
119
+ 'idx',
120
+
121
+ 'selected'
122
+
123
+ ],
124
+
125
+ methods: {
126
+
127
+ updateVal: function(a, b, c) {
128
+
129
+ var selectedItem = this.froms.filter(v => v.name === this.$el.value)[0];
130
+
131
+ this.$parent.saved[+this.idx] = selectedItem;
132
+
133
+ // savedが更新されているか確認
134
+
135
+ console.log('---');
136
+
137
+ this.$parent.saved.forEach(v => console.log(v.id, v.name));
138
+
139
+ }
140
+
141
+ },
142
+
143
+ template: '<select v-model="selected.name" @change="updateVal"><option v-for="from in froms" :value="from.name">{{from.name}}</option></select>'
144
+
145
+ });
146
+
147
+
148
+
149
+ const list = new Vue({
150
+
151
+ el: '#list',
152
+
153
+ data: function() {
154
+
155
+ return {
156
+
157
+ saved: [{name:"BBB",id:"2"},{name:"CCC",id:"3"}]
158
+
159
+ }
160
+
161
+ },
162
+
163
+ methods: {
164
+
165
+ addNewSaved: function () {
166
+
167
+ this.saved.push({ name:"AAA", id:"1" });
168
+
169
+ },
170
+
171
+ },
172
+
173
+ components: {
174
+
175
+ 'select-component': selectComponent
176
+
177
+ }
178
+
179
+ });
180
+
181
+ ```