1

我想在我的 Vue3 应用程序中的 PrimeVue 元素上应用一些边距。基于文档中的示例

https://www.primefaces.org/primevue/showcase/#/selectbutton

我有一个工作示例,图标和文本之间有一个边距

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width,initial-scale=1.0" />

        <!-- PrimeVue -->
        <link href="https://unpkg.com/primevue@^3/resources/themes/saga-blue/theme.css" rel="stylesheet" />
        <link href="https://unpkg.com/primevue@^3/resources/primevue.min.css" rel="stylesheet" />
        <link href="https://unpkg.com/primeflex@2.0.0/primeflex.min.css" rel="stylesheet" />
        <link href="https://unpkg.com/primeicons/primeicons.css" rel="stylesheet" />

        <!-- Dependencies -->
        <script src="https://unpkg.com/vue@next"></script>
        <script src="https://unpkg.com/primevue@^3/core/core.js"></script>

        <!-- Demo -->
        <script src="https://unpkg.com/primevue@^3/selectbutton/selectbutton.min.js"></script>
        <link href="./index.css" rel="stylesheet" />
    </head>
    <body>
        <div id="app">
            <p-selectbutton v-model="selectedValue" :options="options" dataKey="value">
                <template #option="slotProps">
                    <i class="pi pi-check-circle" />
                    <span class="p-ml-4">Some text</span>
                </template>
            </p-selectbutton>
        </div>

        <script type="module">
        const { createApp, ref } = Vue;

        const App = {
            setup() {
                const selectedValue = ref();
                
                const options = ref([
                    { value: 'left' },
                    { value: 'right' }
                ]);

                return { selectedValue, options }
            },
            components: {
                "p-selectbutton": primevue.selectbutton
            }
        };

        createApp(App)
            .use(primevue.config.default)
            .mount("#app");
        </script>

    </body>
</html>

但是保证金在我的项目中不起作用。对于复制:

vue create foo

# select default Vue3 app

cd foo

# based on https://primefaces.org/primevue/showcase/#/setup

npm install primevue

npm install primeicons

npm install primeflex

我将 main.js 文件更改为

import { createApp } from 'vue'
import PrimeVue from "primevue/config";
import "primevue/resources/themes/saga-blue/theme.css";
import "primevue/resources/primevue.min.css";
import "primeicons/primeicons.css";
import "primeflex/primeflex.css";
import SelectButton from "primevue/selectbutton";
import App from './App.vue'

createApp(App)
    .use(PrimeVue)
    .component("p-select-button", SelectButton)
    .mount('#app')

我将 App.vue 文件更改为

<template>
  <p-select-button v-model="selectedValue" :options="options" dataKey="value">
      <template #option>
          <i class="pi pi-check-circle" />
          <span class="p-ml-4">Some text</span>
      </template>
  </p-select-button>
</template>

<script>
import { ref } from "vue";

export default {
  setup() {
    const selectedValue = ref();
    
    const options = ref([
        { value: 'left' },
        { value: 'right' }
    ]);

    return { selectedValue, options }
  },
}
</script>

运行应用程序时,结果是

在此处输入图像描述

有人知道为什么保证金在第一个示例中有效,但在我的代码中无效?我错过了什么?

4

1 回答 1

2

您的 CDN 演示使用 PrimeFlex 2:

<link href="https://unpkg.com/primeflex@2.0.0/primeflex.min.css" rel="stylesheet" />
                                        

但是您的应用程序使用 PrimeFlex 3(即npm install primeflex安装3.1.0)。为了便于阅读,最新版本已经从所有类名中删除了p-前缀,所以现在的类名是ml-4.

解决方案 1:将类名更新为ml-4

您可以在以下位置使用 PrimeFlex 3 的类名App.vue

<!-- BEFORE -->
<span class="p-ml-4">Some text</span>

<!-- AFTER -->
<span class="ml-4">Some text</span>

演示 1

解决方案 2:降级到 PrimeFlex 2

如果您更喜欢使用现有版本(可能是为了最大限度地减少大型应用程序中的更改),请安装 PrimeFlex 2:

npm install -S primeflex@2

演示 2

于 2021-10-27T03:48:44.297 回答