如何解决属性内插法已删除。使用v-bind或冒号速记?Vue.JS 2


99

我的Vue组件是这样的:

    <template>
        <div>
            <div class="panel-group" v-for="item in list">
                ...
                <div class="panel-body">
                    <a role="button" data-toggle="collapse" href="#purchase-{{ item.id }}" class="pull-right" aria-expanded="false" aria-controls="collapseOne">
                        Show
                    </a>
                </div>
                <div id="purchase-{{ item.id }}" class="table-responsive panel-collapse collapse" role="tabpanel">
                ...
                </div>
            </div>
        </div>
    </template>
    
    <script>
        export default {
            ...
            computed: {
                list: function() {
                    return this.$store.state.transaction.list
                },
                ...
            }
        }
    </script>

执行时,存在如下错误:

Vue模板语法错误:

id =“ purchase-{{item.id}}”“:属性内插已删除。请使用v-bind或冒号速记。

我该如何解决?

Answers:


189

在其中使用javascript代码v-bind(或快捷方式“:”):

:href="'#purchase-' + item.id"

:id="'purchase-' + item.id"

或者,如果使用ES6 +:

:id="`purchase-${item.id}`"

知道如何使它适用于对象而不是字符串吗?
Mike de Klerk

@MikedeKlerk只需删除括号:如果要绑定到对象foo,则v1语法为,:my-object="{{ foo }}"而v2语法为:my-object="foo"
感谢

<div>标签:<div :id="'purchase-id-' + item._id">。渲染示例:<div id="purchase-id-5bb254557e1cef3b4cc40529">
rprasad

1
如果要添加到现有属性该怎么办?例如追加一些类而不覆盖它们?
亚当·里斯

3
@AdamReis您可以拥有class:class相同的元素。Vue.js将合并这两个属性。看到那里:jsfiddle.net/eywraw8t/466181 或者如果您只想使用:classjsfiddle.net/eywraw8t/466183
Happyriwan

5

如果要从对象中提取数据,并且要从src / assets文件夹中提取图像,则需要像在下面那样在对象中包含require('assets / path / image.jpeg')

工作示例:

people: [
  {
    name: "Name",
    description: "Your Description.",
    closeup: require("../assets/something/absolute-black/image.jpeg"),
  },

不在您的v-img元素中-不起作用

<v-img :src="require(people.closeup)"></v-img>



0

最简单的方法也是要求文件地址

<img v-bind:src="require('../image-address/' + image_name)" />

下面的完整示例显示../assets/logo.png:

<template>
          <img v-bind:src="require('../assets/' + img)" />
</template>

<script>
export default {
  name: "component_name",
  data: function() {
    return {
      img: "logo.png"
    };
  }
};
</script>

0

最优雅的解决方案是将图像保存在Webpack之外。默认情况下,Webpack会在base64中压缩图像,因此,如果将图像保存在资产文件夹中,则不会起作用,因为Webpack会在base64中压缩图像,而ISN不是反应变量。

要解决您的问题,您需要将图像保存在PUBLIC PATH中。通常,公共路径位于“ public”文件夹或“ statics”中。

最后,您可以执行以下操作:

data(){
  return {
    image: 1,
    publicPath: process.env.BASE_URL
  }
}

而您的HTML您可以执行以下操作:

<img :src="publicPath+'../statics/img/p'+image+'.png'" alt="HANGOUT PHOTO">

何时使用公用文件夹

  • 您需要在构建输出中使用特定名称的文件
  • 文件取决于可更改执行时间的反应变量
  • 您有图片,需要动态引用其路径
  • 某些库可能与Webpack不兼容,您别无选择,只能将其作为标签包含在内。

更多信息:Vue JS文档中的“ HTML和静态资产”

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.