javascript - Vuejs : weird class render

标签 javascript vue.js vuejs2

我有以下设置以及类和名称的奇怪渲染。

<component v-for="item in List" 
                :item="item"
                :class="item.class"
                :name="item.name"
</component>


let component = Vue.component('component', {
       props: ['item'],
       template: `<li :class="item.class">
                    {{ item.name }}
                  </li>`
       }),
       data: function (){
        return {
            List: [
                {key:0, class:'someClass', name:'someName'},

            ]
        }
    },
 })

渲染:

<li class="someClass someClass" name="someName"> someName  </li>

到底哪里来了双“someClass”?为什么“列表”中的“名称”项是这里的一个属性,因为它甚至没有被使用和 v 绑定(bind)作为属性? “name”是一个有点保留的属性吗?

先谢谢了:)

最佳答案

问题出在这里:

<component v-for="item in List" 
                :item="item"
                :class="item.class"
                :name="item.name">
</component>

在本部分中,您将 class 绑定(bind)到 item.class,并将属性 name 绑定(bind)到 item.name. Vue 会将这两个应用到相应组件的外部元素。

然后在该组件中添加 :class="item.class",这会再次添加该类。

要解决此问题,只需从第一个模板中删除 :class="item.class":name="item.name" 即可。

<component v-for="item in List" 
                :item="item">
</component>

还有一点神秘的是,您在 componentdata 中定义了 List,但您似乎在范围内使用它父组件的模板。

根据评论更新:

可以通过两种方式在外部元素上设置class。它可以来自组件本身、其模板内部,也可以从父模板中设置。

您选择哪一个取决于该类的功能以及两个组件中的哪一个负责该功能。两者都不一定是对的或错的。

通常,组件负责控制自己的样式,但一个常见的异常(exception)是控制布局的类。

例如,如果您有一个按钮组件,那么决定按钮是否应为红色、绿色或蓝色的类通常由组件本身管理。但是,如果该按钮需要在其父容器内右对齐,则按钮组件可能不需要知道这一点。该对齐决策由父容器控制,它可以在按钮上设置一个类,而无需按钮参与。

关于javascript - Vuejs : weird class render,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60959094/

相关文章:

javascript - Vue.js 路由器 : Run code when component is ready

javascript - Nuxtjs 无法在本地主机 :5000 but its working in 127. 0.0.1:5000 中工作

vue.js - VUE2js : How to have component re-render after its props change?

javascript - 当我的 script.js 在 Codecademy 上运行时无法制作它

javascript - 单击事件时文本区域上的 Jquery 表单弹出窗口

javascript - 如何在 ${} Javascript 中添加双花括号

javascript - 从 url 检索后,Vue2 数据未在模板中更新

javascript - 当我使用间接选择在 dojo 中的增强网格中单击一行时,如何自动选中复选框

node.js - vue-cli 加载程序不使用 webpack-simple 的默认初始化

javascript - 如果 IE11 或 IE10,浏览器会重定向 Vuetify Vue.js 应用程序