Quasar2.0与vue3.0项目中问题

一、boot文件

启动文件 (app initialization code),相当于vue2.0中的main.js文件的作用,quasar利用boot来实现对Vue app的实例创建后需要自定义的一些初始化的自定义代码。

使用方式:

1.创建文件,在终端使用quasar new boot 文件名

2.在quasar.config.js中声明  boot:['文件名']

3.代码


import fetchData from "../axios/FetchData";
import { boot } from 'quasar/wrappers';
import Prism from 'prismjs';
//路由、vuex的引用
// import router from "../router";
import store from "../store/index";
//echarts的引用
import  echarts from 'vue-echarts';
import { use } from "echarts/core";
// 手动引入 ECharts 各模块来减小打包体积
import {
  CanvasRenderer
} from 'echarts/renderers'
import {
  BarChart,PieChart,LineChart
} from 'echarts/charts'
import {
  GridComponent,
  TooltipComponent,
  TitleComponent,
  LegendComponent
} from 'echarts/components'
use([LineChart,PieChart,
  CanvasRenderer,
  BarChart,
  GridComponent,
  TooltipComponent,
  TitleComponent,
  LegendComponent
]);
export default boot(({ app }) => {
//vue-echarts的挂载
  app.component('v-chart', echarts)
//在全局中使用jsonviewr
  app.use(JsonViewer)
//全局变量的使用
  app.config.globalProperties.$title = ' | Vue Quasar';
  app.use(VueMarkdownEditor);
})

 4.组件中使用全局变量

  //getCurrentInstance获取当前组件的实例、上下文来操作router和vuex等
import { defineComponent,  reactive, onMounted,getCurrentInstance} from "vue";

export default {
  name: 'myMenu',
  components: { SkeletonDemo, BaseContent },
  setup(){
    //const { ctx }  = getCurrentInstance();  方式一,这种方式只能在开发环境下使用,生产环境 
   下的ctx将访问不到  const { proxy }  = getCurrentInstance();   方式二,此方法在开发环境以及生产环境下都能放到组件 上下文对象(推荐)
      const { proxy } = getCurrentInstance();
      const data=reactive({
      content: '',
      isLoadingVisible: false
    });
    onMounted(() => {
      getMsg();
    });
     const getMsg = () => {
         data.isLoadingVisible = !data.isLoadingVisible
      const query = {
        url: proxy.$PUBLIC_PATH + 'data/menuData.md',
        method: 'get',
        responseType: 'text'
      }
      proxy.$fetchData(query).then(res => {
       
        data.content = res.data
      }).catch(error => {
        console.log(error)
      })
     };
     return{
       data,getMsg
     }
  }
  
}
</script>

二、router文件的配置

1.index.ts文件配置

import {
  createRouter,
  createWebHashHistory,
} from 'vue-router';

//要使用的路由文件
import routes from './routes';
const router = createRouter({
  history: createWebHashHistory(),
  routes: routes
})
// Reset route when user logs out
export function resetRouter() {
  const newRouter = router;
  (router as any).matcher = (newRouter as any).matcher // reset router
}
export default router

2.其他组件的使用

import { useRouter } from "vue-router";
export default defineComponent({
  name: "tagView",
  setup(props, context) {
    const $router = useRouter();
    onMounted(() => {
      data.tagView = store.getters["userModule/getTagView"];
      console.log("查看的tagview", $router);
    });
  },
});

三、vuex的配置

1.index.ts文件

//要使用的store
import userModule from './modules'
import { App } from 'vue'
import { createStore } from 'vuex'
export const store = createStore({
  modules: {
    userModule
  }
})
export function setupStore (app: App<Element>) {
  app.use(store)}
export default store

四、Quasar的引用


import { useQuasar } from 'quasar'
import { useRouter } from 'vue-router'
import { useStore } from 'vuex'
import { defineComponent, reactive,onMounted,getCurrentInstance } from 'vue'
export default defineComponent({
  name: 'ToolbarItemRight',
   setup () {
     const { proxy } = getCurrentInstance();
      const $q = useQuasar()
       const $router = useRouter()
         const store = useStore()
    let state= reactive({
      search: '',
     PUBLIC_PATH:proxy.$PUBLIC_PATH
    });
    const fullScreen = ()=> {
      if ($q.fullscreen.isActive) {
        // 退出全屏模式:
        $q.fullscreen.exit()
          .then(() => { // v1.5.0+
            // success!
          })
          // eslint-disable-next-line handle-callback-err
          .catch(err => { // v1.5.0+
            // oh, no!!!
          })
      } else {
        // 请求全屏模式:
        $q.fullscreen.request()
          .then(() => { // v1.5.0+
            // success!
          })
          // eslint-disable-next-line handle-callback-err
          .catch(err => { // v1.5.0+
            // oh, no!!!
          })
      }
    };
       onMounted(()=>{ 
         console.log("PUBLIC_PATH", state.PUBLIC_PATH)
       });
  const  minimize =()=> {
      if (process.env.MODE === 'electron') {
        $q.electron.remote.BrowserWindow.getFocusedWindow().minimize()
      }
    };
    const   maximize =()=> {
      if (process.env.MODE === 'electron') {
        const win = $q.electron.remote.BrowserWindow.getFocusedWindow()
        if (win.isMaximized()) {
          win.unmaximize()
          state.isMaximize = !state.isMaximize
        } else {
          win.maximize()
          state.isMaximize = !state.isMaximize
        }
      }
    };
   const  closeApp=()=> {
      if (process.env.MODE === 'electron') {
        $q.electron.remote.BrowserWindow.getFocusedWindow().close()
      }
    }
    return {
      state,
      fullScreen,
   minimize , maximize,
     closeApp
    }
  }
})
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值