javascript - 如何在我的 NuxtJS 服务文件夹中访问它
问题描述
您好,我在 VueMastery 中学习了 NuxtJS,我认为他们教的内容非常好。获取数据的模式包括异步获取、存储和服务。
页面/index.vue
<template>
<div></div>
</template>
<script>
export default {
mounted() {
this.$myInjectedFunction("works in mounted");
},
async fetch({ store, app, req, env }) {
await store.dispatch("scooby/getBanners", { page: 1 });
}
};
</script>
商店/scooby.js
import ScoobyService from "@/services/ScoobyService.js";
export const state = () => ({
banners: []
});
export const mutations = {
SET_BANNERS(state, banners) {
state.banners = banners;
}
};
export const actions = {
getBanners({ commit }, payload) {
this.$myInjectedFunction("accessible in actions");
const type = payload.type || 1;
const params = `?ad_type=${type}&page=${payload.page}`;
return ScoobyService.adBanner(params).then(response => {
commit("SET_BANNERS", response.data);
});
}
};
服务/scoobyService.js
/* eslint-disable no-console */
import { scoobyApiClient, scoobyRequestSetup } from "@/assets/js/axios.js";
const apiModule = "scooby";
const resources = {
adBanner: `/v1/member/banners`
};
export default {
adBanner(getParams) {
// this.$myInjectedFunction("accessible in actions");
const body = {};
const resource = `${resources.adBanner}/${getParams}`;
const [api, req] = scoobyRequestSetup(resource, body, apiModule);
return process.server
? scoobyApiClient.get(api, req)
: scoobyApiClient.post(api, req);
}
};
插件/组合注入.js
/* eslint-disable no-console */
export default ({ app }, inject) => {
inject("myInjectedFunction", string => console.log("That was easy!", string));
};
nuxt.config.js
module.exports = {
...
plugins: [
"~/plugins/axios.js"
],
...
}
services/scoobyService.js无法访问该对象this
,但store/scooby.js可以。如何访问services/scoobyService.js中的这个对象
解决方案
您应该如下创建文件,然后您可以访问您的服务方法this.$customService
服务/CustomService.js
export default {
hello() {
return 'Hello'
},
bye() {
return 'Bye'
}
}
插件/组合注入.js
import Vue from 'vue'
import ServiceOnefrom '../services/ServiceOne'
Vue.prototype.$ServiceOne= ServiceOne
// or
// import ServiceOne from '../services/ServiceOne'
// export default ({ app }, inject) => {
// inject("serviceOne", ServiceOne);
// };
推荐阅读
- php - ElasticSearch:如何同步关系的属性(使用数据透视表)?
- javascript - 从postgres(node js)获取的数据如何在表格中漂亮的展示出来?
- bash - Bash - 如何合并重复的行并对 csv 文件的值求和?
- string - 高阶函数haskell
- android - 当上一个频道的视频在 android 应用程序的 youtube 视图中播放完时,如何自动播放来自其他频道的视频
- c - MISRA 2012 违规 - 类型不匹配(规则 10.1、10.4)
- r - R:纯固定效应模型中 sigma 的置信区间
- php - PHPMyAdmin 导出的数据库小于 PHPMyAdmin 控制面板中的数据库大小
- c# - 如何获取在 Roslyn 的 using 语句中声明的变量的类型
- node.js - 使用文件的内容而不用 express.js 保存文件?