No More Posting New Topics!

If you have a question or an issue, please start a thread in our Github Discussions Forum.
This forum is closed for new threads/ topics.

Navigation

    Quasar Framework

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search

    this.$axios in action

    Framework
    3
    10
    5012
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • J
      jacklin10 last edited by

      I’m using version 1 so I have a the file: boot/axios.js that looks like this:

      import axios from 'axios'
      export default async ({ Vue }) => {
        Vue.prototype.$axios = axios
      }
      

      Everything I’ve read says that this is all you need to be able to access it in a component, or in an actions (without importing), but it just won’t work.

      In a page for Login.vue If I have:

          methods: {
            this.$axios.get('some_url')
         }
      

      I’ll get an error:
      “TypeError: this.$axios is undefined”

      I’m using vuex also, and tried this in my store/auth/actions.js and I can’t get it there either.

      I originally had a class I made that was services/Auth.js
      and I could import axios from ‘axios’ in there and make get/posts, but the problem is that it doesn’t use the global axios that way, so any axios defaults or intercepters I configure on the boot version wouldn’t be seen by that class.

      1 Reply Last reply Reply Quote 0
      • metalsadman
        metalsadman last edited by metalsadman

        I can’t see why it’s not working for you, with too less info we wouldn’t know what’s wrong with your setup coz even starting a mock project with the setting you provide should work. https://quasar.dev/quasar-cli/ajax-requests#Introduction

        To your other issue https://quasar.dev/quasar-cli/cli-documentation/boot-files#Accessing-data-from-boot-files. You import the instance to your vuex action or whereever js file you need it.

        1 Reply Last reply Reply Quote 0
        • J
          jacklin10 last edited by

          Yeah, I can’t see either 😞 There really isn’t much more in this app, it’s mostly a toy to learn Quasar so just a few pages with some components just to check everything out, nothing crazy.

          Maybe i’ll just create a new project and try it there, just to see what could be different.

          I can get it to work using your second suggestion, Importing an axiosInstance, so thanks for that, and thanks for your fast response in general!

          1 Reply Last reply Reply Quote 0
          • metalsadman
            metalsadman last edited by metalsadman

            Hmm try posting what quasar info logs. Maybe youre missing some deps or etc… you can also pass vue instance to your vuex actions as params btw. Ie.

            // some vue file
            this.$store.dispatch('somemodule/someaction', { payload: somepayload, vm: this })
            // somemodule/actions.js
            export const someaction = ({payload, vm}) => {
              vm.$examplePrototypeMethod(...)
            ...
            

            Still prefer importing tho.

            1 Reply Last reply Reply Quote 0
            • J
              jacklin10 last edited by

              Here’s quasar info:

              Operating System - Darwin(18.6.0) - darwin/x64
              NodeJs - 11.8.0

              Global packages
              NPM - 6.9.2
              yarn - 1.13.0
              @quasar/cli - 1.0.0
              cordova - 9.0.0 (cordova-lib@9.0.1)

              Important local packages
              quasar - 1.0.5 – Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
              @quasar/app - 1.0.4 – Quasar Framework local CLI
              @quasar/extras - 1.2.0 – Quasar Framework fonts, icons and animations
              vue - 2.6.10 – Reactive, component-oriented view layer for modern web interfaces.
              vue-router - 3.0.7 – Official router for Vue.js 2
              vuex - 3.1.1 – state management for Vue.js
              electron - Not installed
              electron-packager - Not installed
              electron-builder - Not installed
              @babel/core - 7.5.5 – Babel compiler core.
              webpack - 4.35.3 – Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, … and your custom stuff.
              webpack-dev-server - 3.7.2 – Serves a webpack app. Updates the browser on changes.
              workbox-webpack-plugin - 4.3.1 – A plugin for your Webpack build process, helping you generate a manifest of local files that workbox-sw should precache.
              register-service-worker - 1.6.2 – Script for registering service worker, with hooks

              Quasar App Extensions
              @quasar/quasar-app-extension-icon-genie - 1.0.1 – A Quasar CLI Extension for Making All Your Icons
              @quasar/quasar-app-extension-dotenv - 1.0.0-beta.10 – Load .env variables into your quasar project

              Networking
              Host - pacman2.local
              en0 - 192.168.1.210

              1 Reply Last reply Reply Quote 0
              • J
                jacklin10 last edited by

                Also thanks for the tip on passing the vue instance.

                1 Reply Last reply Reply Quote 0
                • metalsadman
                  metalsadman last edited by metalsadman

                  It might not be related but in any case update your yarn, and downgrade your node js version to lts (10.+). Delete node_modules and yarn.lock / package_json.lock, and issue yarn in your project folder again once done. Also, you didnt specify what mode are you trying (ssr/spa/pwa etc…), so please see the docs for section relevant to the mode youre using.

                  1 Reply Last reply Reply Quote 0
                  • J
                    jacklin10 last edited by

                    that actually worked my man!

                    Node 10.16 and Yarn 1.17.3

                    I suppose we can’t be sure if it was the version change, or just the total reset of all the packages, but yeah, this.$axios.get(’…’) can be used from the component now.

                    I think to get in the actions I’ll need to pass the vue instance and dig it out of there like you mentioned but progress! Thanks!

                    1 Reply Last reply Reply Quote 0
                    • metalsadman
                      metalsadman last edited by

                      Ok, glad it worked.

                      1 Reply Last reply Reply Quote 0
                      • C
                        chankl78 last edited by

                        I am also facing the issue. But I have try the following steps, I still not able to resolve it.

                        /var/www/html/src-spa # quasar info
                        
                        Operating System - Linux(4.9.184-linuxkit) - linux/x64
                        NodeJs - 10.16.0
                        
                        Global packages
                          NPM - 6.9.0
                          yarn - 1.16.0
                          @quasar/cli - 1.0.0
                          cordova - Not installed
                        
                        Important local packages
                          quasar - 1.0.5 -- Build high-performance VueJS user interfaces (SPA, PWA, SSR, Mobile and Desktop) in record time
                          @quasar/app - 1.0.4 -- Quasar Framework local CLI
                          @quasar/extras - 1.2.0 -- Quasar Framework fonts, icons and animations
                          vue - 2.6.10 -- Reactive, component-oriented view layer for modern web interfaces.
                          vue-router - 3.0.7 -- Official router for Vue.js 2
                          vuex - 3.1.1 -- state management for Vue.js
                          electron - Not installed
                          electron-packager - Not installed
                          electron-builder - Not installed
                          @babel/core - 7.5.5 -- Babel compiler core.
                          webpack - 4.35.3 -- Packs CommonJs/AMD modules for the browser. Allows to split your codebase into multiple bundles, which can be loaded on demand. Support loaders to preprocess files, i.e. json, jsx, es7, css, less, ... and your custom stuff.
                          webpack-dev-server - 3.7.2 -- Serves a webpack app. Updates the browser on changes.
                          workbox-webpack-plugin - 4.3.1 -- A plugin for your Webpack build process, helping you generate a manifest of local files that workbox-sw should precache.
                          register-service-worker - 1.6.2 -- Script for registering service worker, with hooks
                        
                        Quasar App Extensions
                          *None installed*
                        
                        Networking
                          Host - bb995cc2b4a5
                          eth0 - 172.17.0.4
                        
                        /var/www/html/src-spa # 
                        

                        Below is my quasar.conf.js

                        module.exports = function (ctx) {
                          return {
                            // app boot file (/src/boot)
                            // --> boot files are part of "main.js"
                            boot: [
                              'i18n',
                              'axios'
                            ],
                        
                            css: [
                              'app.styl'
                            ],
                        
                            extras: [
                              // 'ionicons-v4',
                              'mdi-v3'
                            ],
                        
                            framework: {
                              // iconSet: 'ionicons-v4',
                              // lang: 'de', // Quasar language
                        
                              // all: true, // --- includes everything; for dev only!
                        
                              cssAddon: true,
                        
                              components: [
                                'QLayout',
                                'QHeader',
                                'QDrawer',
                                'QPageContainer',
                                'QPage',
                                'QToolbar',
                                'QToolbarTitle',
                                'QBtn',
                                'QIcon',
                                'QList',
                                'QItem',
                                'QItemSection',
                                'QItemLabel',
                                'QForm',
                                'QInput',
                                'QBanner',
                                'QDialog',
                                'QAvatar'
                              ],
                        
                              directives: [
                                'Ripple',
                                'ClosePopup'
                              ],
                        
                              // Quasar plugins
                              plugins: [
                                'Notify'
                              ]
                            },
                        
                            supportIE: false,
                        
                            build: {
                              distDir: '../public/',
                              scopeHoisting: true,
                              vueRouterMode: 'history',
                              // vueCompiler: true,
                              // gzip: true,
                              // analyze: true,
                              // extractCSS: false,
                              extendWebpack (cfg) {
                                cfg.module.rules.push({
                                  enforce: 'pre',
                                  test: /\.(js|vue)$/,
                                  loader: 'eslint-loader',
                                  exclude: /node_modules/,
                                  options: {
                                    formatter: require('eslint').CLIEngine.getFormatter('stylish')
                                  }
                                })
                              },
                              env: {
                                api: JSON.stringify(
                                  ctx.dev
                                    ? 'http://localhost/api' // local dev env
                                    : 'http://prod.tld/api' // production end-point
                                )
                              }
                            },
                        
                            devServer: {
                              https: false,
                              port: 8880,
                              open: false, // opens browser window automatically
                              proxy: { '/api': { target: 'http://localhost' } }
                            },
                        
                            // animations: 'all', // --- includes all animations
                            animations: [],
                        
                            ssr: {
                              pwa: false
                            },
                        
                            pwa: {
                              // workboxPluginMode: 'InjectManifest',
                              // workboxOptions: {}, // only for NON InjectManifest
                              manifest: {
                                name: 'SSASoft Backoffice',
                                short_name: 'SSASoft App',
                                description: 'SSASoft Backoffice for Singapore Soka Association',
                                display: 'standalone',
                                orientation: 'portrait',
                                background_color: '#ffffff',
                                theme_color: '#027be3',
                                icons: [
                                  {
                                    'src': 'statics/icons/icon-128x128.png',
                                    'sizes': '128x128',
                                    'type': 'image/png'
                                  },
                                  {
                                    'src': 'statics/icons/icon-192x192.png',
                                    'sizes': '192x192',
                                    'type': 'image/png'
                                  },
                                  {
                                    'src': 'statics/icons/icon-256x256.png',
                                    'sizes': '256x256',
                                    'type': 'image/png'
                                  },
                                  {
                                    'src': 'statics/icons/icon-384x384.png',
                                    'sizes': '384x384',
                                    'type': 'image/png'
                                  },
                                  {
                                    'src': 'statics/icons/icon-512x512.png',
                                    'sizes': '512x512',
                                    'type': 'image/png'
                                  }
                                ]
                              }
                            },
                        
                            cordova: {
                              // id: 'org.cordova.quasar.app',
                              // noIosLegacyBuildFlag: true, // uncomment only if you know what you are doing
                            },
                        
                            electron: {
                              // bundler: 'builder', // or 'packager'
                        
                              extendWebpack (cfg) {
                                // do something with Electron main process Webpack cfg
                                // chainWebpack also available besides this extendWebpack
                              },
                        
                              packager: {
                                // https://github.com/electron-userland/electron-packager/blob/master/docs/api.md#options
                        
                                // OS X / Mac App Store
                                // appBundleId: '',
                                // appCategoryType: '',
                                // osxSign: '',
                                // protocol: 'myapp://path',
                        
                                // Windows only
                                // win32metadata: { ... }
                              },
                        
                              builder: {
                                // https://www.electron.build/configuration/configuration
                        
                                // appId: 'src-spa'
                              }
                            }
                          }
                        }
                        

                        Below is my axios.js

                        import axios from 'axios'
                        
                        export default async ({ Vue }) => {
                          Vue.prototype.$axios = axios
                        }
                        
                        
                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post