【发布时间】:2019-06-27 02:34:32
【问题描述】:
我正在讨论我应该如何设计我的 Vue 组件。这是问题所在:我有两个 Vue 组件共享相同的 sass。但是,每个都有稍微不同的标记、状态和方法。我想知道如何减少sass 代码重复的数量。我不想在两个不同的组件中有两次基本相同的标记和样式。因此,我想知道最好的方法是什么。
可能的解决方案 1:
制作一个base 组件,该组件具有两个组件都使用的必要sass。包括 slots 以传递来自其他两个组件的标记。在其他两个组件中,添加base 组件并将标记传递给slots。这通过保留base 组件中所需的所有常见sass 来减少sass 重复的数量。
可能的解决方案 2:
使用所有常见的 css 创建一个额外的 sass 文件,然后将其导入需要样式的组件文件中。我不确定这在Vue 世界中是否可以接受。我从未见过作者为sass 提供单独文件的项目。它总是只包含在单个文件组件中。在styles 目录中,人们通常只包含全局变量和mixin。它们不包括仅在两个组件中使用的样式。
可能的解决方案 3:
将这两个组件合二为一,并使用布尔值和条件来确定在该组件中使用什么标记和状态。我觉得这是一个糟糕的设计,因为它本质上就像将布尔参数传递给函数。它违反了单一职责原则。它将组件分成两个不同的部分,我觉得在发生这种情况时最好有两个组件而不是一个,以防止出现分歧。
到目前为止,除了在两个不同的文件中重复 sass 之外,这些是我能想到的唯一解决方案。我知道 sass 中的 mixin,但我不确定应该将 mixin 放在哪里。这将进入哪个目录,我将如何组织它?此外,我也知道 Vue 中的 mixins,但我不认为 Vue mixins 允许将 sass 放置在其中。这是我现在面临的一个大难题。任何帮助表示赞赏。提前致谢。
【问题讨论】:
-
@RoyJ 你能把 css 放在 mixins 中吗?还有没有更好的文档来扩展 vue 的单个文件组件。现有的文档真的很模糊,很难理解
-
我认为您不能将 CSS 放入 mixins。您可以将 CSS 放在包含 mixin 的组件中。我一直忘记它是
extends作为扩展组件的选项。希望这会有所帮助。 -
@RoyJ 我尝试使用
extends,但它不起作用。它没有扩展组件。它只是创建一个新组件而不扩展任何 css 或标记。我猜它只扩展了道具、数据等,而不是标记。我不知道现在该怎么办。我现在正在考虑解决方案 2。 -
好吧,使用可能的解决方案 2,您可以在相关组件中导入单个 SCSS 文件。
<style lang="scss"> @import 'src/assets/css/mycss_lib.css'; </style>
标签: vue.js sass vuejs2 vue-component mixins