【问题标题】:VS grammar: `option` cannot be nested inside `span`VS 语法:`option` 不能嵌套在`span` 中
【发布时间】:2020-01-13 15:31:24
【问题描述】:

我正在创建一个自定义 Vue 组件,它用作将 jQuery Select2 小部件应用到传统 HTML select 元素的包装器。

一切正常,但 Visual Studio 对我实施解决方案的方式发出语法警告:

<select2 v-on:change="change($event)">
    <option></option>
    <option v-for="(option, optionIndex) in options"
            v-bind:key="optionIndex"
            v-bind:value="option.value">{{option.text}}</option>
</select2>

每个option 元素下方都有一条绿色波浪线,并带有以下注释:

元素'option'不能嵌套在'span'中。

信息清晰易懂。 option 元素应该在 select 内部,但由于我使用的是自定义 select2 组件,Visual Studio 会感到困惑。

我遇到的问题是我的自定义组件实际上只是 select 元素的包装器,因此它在技术上会产生适当的输出。

有没有办法强制 Visual Studio 忽略这种特殊情况,这样我的滚动条中就不会出现语法警告?

有没有其他方法来实现这个组件,所以它不会抱怨?

我想我也许可以为 options 添加另一个道具并传入一个数组以在组件内创建 option 节点,而不是通过插槽传递它们,但它变得复杂,因为我们有一个许多组件使用它与不同的选项属性来产生值和文本(即option.labeloption.id 而不是option.textoption.value),所以看起来插槽最适合我们的需求。

我的另一个想法是创建一个 select2option 组件,它只是标准选项的包装器,但这似乎太过分了,我无法想象我们的其他开发人员会直观地使用这些标准选项而不是标准 option 元素。

只是想知道 Visual Studio 是否有什么可以在不完全关闭语法的情况下纠正这种行为的方法。

【问题讨论】:

    标签: visual-studio vue.js jquery-select2


    【解决方案1】:

    根据DOM Template Parsing Caveats,你应该可以做到

    <select is="select2" v-on:change="change($event)">
        <option></option>
        <option v-for="(option, optionIndex) in options"
                v-bind:key="optionIndex"
                v-bind:value="option.value">{{option.text}}</option>
    </select>
    

    还要注意proper practice is to have a hyphen in your component name

    【讨论】:

    • 感谢文档链接。所以is 属性导致select 呈现为select2 那么,我理解正确吗?我创建组件的原因是因为它通常是动态呈现的,我需要它来在挂载和呈现时初始化小部件。
    • 是的,is 属性允许您使用 HTML 所需的标签,但 Vue 会将其解释为组件。
    • 太棒了。我想我记得以前看到过,但我不知道它是如何使用的。感谢快速响应。感谢您提供有关连字符的说明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2018-09-02
    • 2012-04-24
    • 2014-07-07
    • 1970-01-01
    • 2013-05-17
    • 2016-05-02
    相关资源
    最近更新 更多