使用 Nuxt.js 从页面组件的 asyncData() 方法调用 mixin 函数

Posted

技术标签:

【中文标题】使用 Nuxt.js 从页面组件的 asyncData() 方法调用 mixin 函数【英文标题】:Call mixin function from asyncData() method of the page component with Nuxt.js 【发布时间】:2019-08-08 16:17:38 【问题描述】:

我可以用 Nuxt.js 从页面组件的asyncData() 方法调用 mixin 函数吗?

我的代码:

<template>
  ...
</template>
<script>
   import api from "@/plugins/api/api.js"

   ...

   export default 

      ...

      async asyncData(context) 
          ...
          context.apiMethodName()
          ...
      

      ...
   

   ...
</script>

api.js

import Vue from 'vue'
import API from '@/assets/js/api'

Vue.mixin(
  methods: 
    apiMethodName()  ... 
  
)

【问题讨论】:

【参考方案1】:

你不能从 asyncData 中调用 vue 方法,因为在 vue 之前执行的 asyncData 有一个实例。

您可以将方法提取到简单的 js 函数中,并在 asyncData 和您的 vue 方法中调用它,但请记住,在 asyncData 中您将无法访问 vue 实例属性和其他方法

【讨论】:

【参考方案2】:

您可以将mixin注入应用程序,请参阅https://nuxtjs.org/guide/plugins#inject-in-root-amp-context

【讨论】:

【参考方案3】:

您需要放弃使用 mixins 并改为注入您的方法。

首先;将您的 mixin 方法替换为

export default ( app , inject) => 
  inject('apiMethodName', () => 
    return 'some data!';
  )

然后,在asyncData()方法内部,像这样调用apiMethodName()函数

async asyncData(context) 
  context.app.$apiMethodName();
)

【讨论】:

以上是关于使用 Nuxt.js 从页面组件的 asyncData() 方法调用 mixin 函数的主要内容,如果未能解决你的问题,请参考以下文章

从直接链接导航时,Nuxt.js `this.$route.params.id` 未定义

如何使用 Nuxt.js 从缓存中排除组件?

Leafage 诞生记(二nuxt.js如何在组件和页面请求数据)

如何在 nuxt.js 上从子组件获取父组件的值?

Nuxt.js - 如何在布局内使用布局

组件内导航防护回调不起作用:Nuxt JS 和`beforeRouteEnter`