質問編集履歴

1

AtomButtonについての[補足]を追加しました。

2020/10/01 07:34

投稿

yuixiang
yuixiang

スコア0

test CHANGED
File without changes
test CHANGED
@@ -122,6 +122,186 @@
122
122
 
123
123
 
124
124
 
125
+ [補足]AtomButtonはリンクボタンのコンポーネントです。
126
+
127
+ ```Vue
128
+
129
+ <template>
130
+
131
+ <atom-link
132
+
133
+ :to="to"
134
+
135
+ :tag="tag"
136
+
137
+ class="button"
138
+
139
+ :class="classObject">
140
+
141
+ <span>
142
+
143
+ <slot />
144
+
145
+ </span>
146
+
147
+ </atom-link>
148
+
149
+ </template>
150
+
151
+
152
+
153
+ <script>
154
+
155
+ import Link from '@/components/atoms/Link'
156
+
157
+ export default {
158
+
159
+ name: 'AtomButton',
160
+
161
+ components: {
162
+
163
+ 'atom-link': Link
164
+
165
+ },
166
+
167
+ props: {
168
+
169
+ to: {
170
+
171
+ type: String,
172
+
173
+ default: null
174
+
175
+ },
176
+
177
+ tag: {
178
+
179
+ type: String,
180
+
181
+ default: null
182
+
183
+ },
184
+
185
+ classObject: {
186
+
187
+ type: [String, Array, Object],
188
+
189
+ default: null
190
+
191
+ }
192
+
193
+ }
194
+
195
+ }
196
+
197
+ </script>
198
+
199
+ ```
200
+
201
+ ここで使っているコンポーネントLinkの中身は下記の通りです。
202
+
203
+ ```Vue
204
+
205
+ <template>
206
+
207
+ <component
208
+
209
+ :is="element"
210
+
211
+ v-bind="{ [attribute]: to }">
212
+
213
+ <slot />
214
+
215
+ </component>
216
+
217
+ </template>
218
+
219
+
220
+
221
+ <script>
222
+
223
+ export default {
224
+
225
+ name: 'Link',
226
+
227
+ props: {
228
+
229
+ to: {
230
+
231
+ type: String,
232
+
233
+ default: null
234
+
235
+ },
236
+
237
+ tag: {
238
+
239
+ type: String,
240
+
241
+ default: null
242
+
243
+ }
244
+
245
+ },
246
+
247
+ data: () => ({
248
+
249
+ element: 'div',
250
+
251
+ attribute: null
252
+
253
+ }),
254
+
255
+ mounted () {
256
+
257
+ this.element = this.checkElement()
258
+
259
+ this.attribute = this.checkAttribute()
260
+
261
+ },
262
+
263
+ methods: {
264
+
265
+ checkElement () {
266
+
267
+ if (this.tag) return this.tag
268
+
269
+ if (!this.to) return 'div'
270
+
271
+ if (this.to.startsWith('http')) return 'a'
272
+
273
+ if (this.to.startsWith('/static') || this.to.startsWith('/assets')) return 'a'
274
+
275
+ return 'router-link'
276
+
277
+ },
278
+
279
+ checkAttribute () {
280
+
281
+ if (this.element === 'a') return 'href'
282
+
283
+ if (this.element === 'router-link') return 'to'
284
+
285
+ }
286
+
287
+ }
288
+
289
+ }
290
+
291
+ </script>
292
+
293
+
294
+
295
+ <style lang="scss" scoped>
296
+
297
+ </style>
298
+
299
+
300
+
301
+ ```
302
+
303
+
304
+
125
305
  ### 試したこと
126
306
 
127
307