我正在VueJS中呈现store 标题列表,其中一些有url属性,一些没有.如果标题有url,我想添加a href属性:

<div v-for="(store, index) in stores">
  <span v-if="store.link"><a :href="store.link" target="_blank">{{ store.title }}</a></span>
  <span v-else="store.link">{{ store.title }}</span>
</div>

这是可行的,但代码看起来是重复的.有没有办法进一步简化代码?

推荐答案

可以使用组件标记:

var app = new Vue({
  el: '#app',
  data () {
    return {
      stores: [
        {title:'product1',link:'/products/222'},
        {title:'product2'},
        {title:'product3',link:'/products/333'},
        {title:'product4'}
      ]
    }
  }
})
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<div id="app">
  <div v-for="(store, index) in stores">
    <component :is="store.link?'a':'span'" :href="store.link || ''" target="_blank">{{store.title}}
    </component>
  </div>
</div>

Vue.js相关问答推荐

将 html 文件移出 dist vite 中的 src 文件夹

绑定事件在渲染函数中不起作用

vuejs3 youtube-plugin YT 未定义控制台错误

带有 netlify.toml 文件的环境变量

如果找不到路由,Vue.js如何重定向到公共路由

如何对将 DOM 元素附加到 HTML 正文的 Vue 组件进行单元测试?

使用 Vue 和 JS 下载 CSV 文件

Vue.js 中有没有类似Jquery $(document).ready的功能?

如何为 Vue 项目设置 lint-staged?

自定义props类型

Vue.js 中 Chrome 和 Datalist 的性能问题

React.js 是否有类似 Vue.js

使用 Blade/Mustache 模板混合 Laravel 和 Vue.Js

vue 3 使用 Vuex 和路由的服务器端渲染

重新加载页面正在 vue 组件中的插槽上闪烁内容

VueJS 路由 - 使用子路由和 Vuetify 时如何停止多个活动路由(active routes)?

使用 Vue.js 获取所有选中复选框的列表

在子元素 vueJS.2 之间切换active类

vuex 是 state.array.push react式的吗?

Vue.js 3 - 替换/更新react性对象而不会失go react性