Воссоздание чего-то в Vue, что я сделал в React
Я работаю над своим личным портфолио, и мои социальные сети сохранены в качестве шаблона, чтобы просто отказаться от использования этого кода в React.
{this.state.contact.map((contact, index) =>
<a className="social-icons" href={`${contact.href}`} target="_blank" rel="noopener noreferrer" key={index}>
<h3 className={`ion-social-${contact.title}`}></h3>
</a>
)}
Я пытаюсь создать тот же эффект при использовании Vue для ion-social-icons, но мне сложно разобраться, как его реализовать, поскольку я просто получаю сообщение об ошибке при использовании v-bind:class, который не ' не очень помогает. Это то, что я сейчас пытаюсь.
<p class="social-media snippet ion-social-{{social.title}}" v-for="social in socials" v-bind:key="social">
{{ social.title }}
</p>
Я также относительно новичок в Vue.
2 ответа
Вы получаете ошибку:
Interpolation inside attributes has been removed. Use v-bind or the colon shorthand instead.
For example, instead of <div class="{{ val }}">, use <div :class="val">.
Вдобавок ко всему, есть 3 способа установить атрибут html в Vue.
Вы хотите установить строковый литерал. Просто напишите это так, как если бы вы писали обычный HTML.
class="myClass"
, Вы не можете интерполировать javascript здесь, что вы пытаетесь сделать и о чем предупреждал Vue.Вы хотите использовать переменную javascript, определенную в вашем компоненте. использование
v-bind
,v-bind:class="myClassVariable"
То же, что и выше, где
:
это просто ярлык дляv-bind
,:class="myClassVariable"
Рабочий пример привязки вашего класса выглядит следующим образом:
<p class="social-media snippet" :class="'ion-social-'+social.title" ...
Значение внутри :class="..."
это просто выражение, где 'ion-social'
строковый литерал, который добавляется к переменной social.title
, Как только ваш шаблон запутается, что сейчас, вы должны удалить логику из вашего шаблона и поместить его в компонент.
Использование интерполяции в атрибутах HTML было возможно в Vue 1.0, но больше не поддерживается начиная с 2.0. Здесь вам нужно использовать v-bind, а затем добавить переменную со строкой, как в JS.
<p
v-for="social in socials"
v-bind:class="'social-media snippet ion-social-' + social.title"
v-bind:key="social"
>
{{ social.title }}
</p>