标签: vue-composition-api

如何使用 VueJs 3 组合 api 中的 Mounted 函数?

我正在尝试 vueJs 3 中的组合 api。不幸的是我不知道如何在 setup() 中包含我安装的代码。当我将代码放入设置中时,JavaScript 会尝试访问尚未渲染的 DOM。谁能告诉我如何重写这个?

选项 api 风格(有效)

<script>
export default {
    name: "NavBar",
    data() {
        return {};
    },
    methods: {},
    mounted() {
        const bm = document.querySelector('#toggle');
        const menu = document.querySelectorAll('nav ul li');
        const overlay = document.querySelector('#overlay');

        // ...
        bm.addEventListener('click', () => {  
            bm.classList.toggle("active");
            overlay.classList.toggle("open");
        })
 
    },
}
</script>
<template>
    <header>
        <div class="button_container" id="toggle">
          <span class="top"></span>
          <span class="middle"></span>
          <span class="bottom"></span>
        </div>
        <div class="overlay" id="overlay">
          <nav class="overlay-menu">
            <ul>
            <li><a href="#home">Home</a></li>
            <!-- ... -->
            </ul>
          </nav>
        </div>      
    </header> …
Run Code Online (Sandbox Code Playgroud)

vue.js vue-composition-api

11
推荐指数
1
解决办法
2万
查看次数

如何正确重置 Vue Composition Api 的反应值

我想知道我应该如何在 vuejs 设置中重置反应?(我知道如果将其更改为 ref 并使用 view.value 将解决此问题,但使用反应式应该有一个答案)

在此处输入图片说明

javascript typescript vuejs3 vue-composition-api

10
推荐指数
2
解决办法
3289
查看次数

Vue 3.0 如何在不更改 prop 的情况下将 prop 分配给 ref

我从父组件发送一个道具:user。现在,在子组件中,我想复制它而不改变 prop 的值。

我尝试这样做:

export default defineComponent({
  props: {
    apiUser: {
      required: true,
      type: Object
    }
  },
  setup(props) {
    const user = ref(props.apiUser);

    return { user };
  }
});
Run Code Online (Sandbox Code Playgroud)

但是,如果我更改用户对象的值,它也会更改 apiUser 属性。我想也许使用Object.assign会起作用,但随后裁判不再有反应。

在 Vue 2.0 中我会这样做:

export default defineComponent({
  props: {
    apiUser: {
      required: true,
      type: Object
    }
  },
  setup(props) {
    const user = ref(props.apiUser);

    return { user };
  }
});
Run Code Online (Sandbox Code Playgroud)

感谢 @buttons 的评论,得出了答案。

const user = reactive({ ...props.apiUser });

javascript vue.js vue-composition-api

10
推荐指数
2
解决办法
5万
查看次数

我在 Nuxt 2.14.0 中运行的是哪个版本的 Vue?

我正在尝试确定我的 Nuxt 应用程序 (2.14.0) 是使用 Vue 2 还是 Vue 3,但我不知道。我已经潜入node_modules并查看了我的锁定文件,但不能确定。我认为它只使用了 Vue 2——特别是vue "^2.6.12——基于我在锁定文件中所能知道的。

有谁知道 Nuxt 在 2.14.0 版本中使用的是哪个版本的 Vue?我尝试通读此问题以更好地了解 Vue 3 何时/是否已在 Nuxt.js 中引入和公开发布,但听起来 Vue 3 并未包含在任何 Nuxt.js 版本中。

vue.js vuejs2 nuxt.js vuejs3 vue-composition-api

10
推荐指数
1
解决办法
5201
查看次数

Vue Composition API:定义发射

定义自定义事件时, Vue 鼓励我们通过以下emits选项在组件上定义发出的事件:

app.component('custom-form', {
  emits: ['inFocus', 'submit']
})
Run Code Online (Sandbox Code Playgroud)

使用 Vue 3 的组合 API,当一个独立的组合函数发出自定义事件时,是否可以在组合函数中定义这些?

vue.js vuejs3 vue-composition-api

10
推荐指数
4
解决办法
9094
查看次数

如何在 Vue.js 3 设置中获取查询参数?

我想创建搜索页面,单击其按钮后将重定向到另一个页面。而这个页面将会是这样的

http://localhost:8080/search?q=foo
Run Code Online (Sandbox Code Playgroud)

我的路由器index.js看起来像这样

const routers = [
  {
    path: '/search',
    name: 'Search',
    component: SearchPage,
    props: route => ( { query: route.query.q } )
  }
]
Run Code Online (Sandbox Code Playgroud)

问题是如何SearchPage在 Vue.js 3 中获取目标页面中的查询值?这个答案仍然让我感到困惑,因为没有使用组合 API 并且不在 vuejs 3 中

javascript vue.js vue-router vuejs3 vue-composition-api

10
推荐指数
1
解决办法
3万
查看次数

'string' 仅指一种类型,但在这里被用作值

TypeScript 新手。我正在尝试设置状态但收到此错误。

错误:'string' only refers to a type, but is being used as a value here.

const state = reactive({
    user: {
        uid: "",
        provider: string[],
    }
});

const user = auth.currentUser;
if (user != null) {
    state.user.uid = user.uid || "";
    user.providerData.forEach(function(profile) {
        state.user.provider.push({
            providerId: profile.providerId,
            uid: profile.uid,
        })
    });
}
Run Code Online (Sandbox Code Playgroud)

firebase typescript vue.js vuejs3 vue-composition-api

10
推荐指数
1
解决办法
4万
查看次数

vue-i18n,替代方案。$i18n 使用组合 API?

尝试在具有组合 API 的组件中实现 vue-i18n。我希望能够在 onMounted 挂钩内设置一些翻译消息。在选项 api 中,我会使用this.$i18n.setLocaleMessage(locale, messages).

但是,this在组合 API 的 Setup() 方法中不可用。因此,当我尝试上述操作时,它给了我未定义的信息。我可以通过将 i18n 导入到组件中来做到这一点: import { useI18n } from 'vue-i18n'然后创建它的一个实例var i18n = useI18n({}), i18n.setLocaleMessage(),但我更喜欢像第一个这样的单行解决方案。

vue.js vue-i18n vuejs3 vue-composition-api

10
推荐指数
2
解决办法
2万
查看次数

Vue &lt;脚本设置&gt;,在不导入的情况下无法使用defineProps和defineEmits

根据官方文档

defineProps编译器宏只能defineEmits在. 它们不需要导入,并且在处理时被编译掉。<script setup><script setup>


问题定义

如果不导入它,我就无法使用definePropsand defineEmitsin <script setup>。请参阅下面所附的错误屏幕截图。

如果不将其导入,则无法使用defineProps


我正在执行的 vue 代码
<!-- HelloWorld.vue -->
<template>
  <h1>{{ props.message }}</h1>
</template>

<script setup>
// import { defineProps } from 'vue';
const props = defineProps({
  message: {
    type: String,
    required: true,
  }
});
</script>
Run Code Online (Sandbox Code Playgroud)
环境详情参考:
视图 ^3.2.6 (3.2.19)
vue-cli @vue/cli 5.0.0-beta.4
节点: v14.16.1
新项目管理 2012年6月14日

vue-props vuejs3 vue-composition-api vue-sfc vue-script-setup

10
推荐指数
1
解决办法
2万
查看次数

Vue 3.2 &lt;script setup&gt; 标签和 TypeScript 类型的问题

我正在尝试将 Vue 3.2<script setup>标签与 TypeScript 一起使用。

我有一个简单的用例,我想在模板中显示用户 ID。

我的代码在技术上是有效的。它可以很好地显示用户 ID。

但有两点很奇怪...

  1. 我已经定义了一个userprop,其类型是User从 Firebase SDK 导入的。User这可行,但我在类型上收到错误: 'User' only refers to a type, but is being used as a value here. ts(2693)。为什么我会收到此错误以及如何修复它?

  2. 帮助文档说我不需要import { defineProps } from "vue";。但如果我不进行导入,就会出现错误'defineProps' is not defined。这很令人困惑。当文档另有说明时,为什么我被迫导入它?

这是我的完整代码:

<template>
  <div>Logged in as {{ user.uid }}</div>
</template>

<script setup lang="ts">
import { defineProps } from "vue"; //Docs say this is not needed, but it …
Run Code Online (Sandbox Code Playgroud)

firebase typescript vue.js vuejs3 vue-composition-api

10
推荐指数
1
解决办法
1万
查看次数