Software
Howler.js start playing song while it's loading
I'm using Howler.js
https://github.com/goldfire/howler.js
https://github.com/Blocklevel/vue-howler
I have it all working with preload and autoplay properties. But the problem is that some of the songs are a bit bigger in size. Is there any way to start playing the audio while it's loading. As soon as possible?
vue init webpack alphalayui strange thing
My environment:
OS:win10
Vue:2.82
Yarn:0.27.5
Nodejs:8.2.1
Other:Git-bash
When I first use vue init webpack alphalayui to build a vue project,I find a strange thing.
It can get my Email-ID,I fell so amazed,This Email-ID just use in a software which named Foxmail.But I have many Email-ID in this computer.
I want to know how can vue init get my Email-ID?
Can someone help me? Thanks in advance.
$ vue init webpack alphalayui
? Project name (alphalayui) y
? Project name y
? Project description (A Vue.js project) y
? Project description y
? Author (alphayan <yanyq@sdkej.com>) y
? Author y
? Vue build standalone
? Install vue-router? (Y/n) y
? Install vue-router? Yes
? Use ESLint to lint your code? (Y/n) y
? Use ESLint to lint your code? Yes
? Pick an ESLint preset (Use arrow keys)
? Pick an ESLint preset Standard
? Setup unit tests with Karma + Mocha? (Y/n) y
? Setup unit tests with Karma + Mocha? Yes
? Setup e2e tests with Nightwatch? (Y/n) y
? Setup e2e tests with Nightwatch? Yes
In Vuejs, how to add watcher to all props and use the same function as a callback?
As the title, I want to add watcher and the same callback for all of the props, but I neet to code like this in sub-component:
<script> export default { props: { a: String, b: String, c: String }, watch: { a (v) { this.handler(v) }, b (v) { this.handler(v) }, c (v) { this.handler(v) }, }, methods: { handler (v) { // code... } } } </script>
And do you know how to simplify this?
How to use PostCSS in Vue.js?
What's the recommended way to handle PostCSS in Vue.js (webpack template)?
I searched it in many places but still can't find a good solution.
Please, give an example using the most used plugins, like cssnext, precss and sugarss.
How to warn unsaved changes when leaving a page in Vue?
I have several forms and input fields that I use in my Customize.vue file. I have to detect any unsaved changes and trigger a notification.
methods: { alertChange() { this.$notify.make('You have unsaved changes!', 'warning'); } }Vue Webpack Build Breaks Bulma CSS
I scaffold a webpack template for my vue project using the vue-cli. Subsequently, I added Bulma's CSS. When I run the program normally (npm run dev), the CSS renders properly. However, upon building the project for production (npm run build) with the default webpack configuration, the styling of the web app is now misaligned. Does anyone know how to resolve this issue?
For comparison:
Production Build of Vue with broken CSS
Dev version of Vue rendering CSS properly
The following is my webpack config (webpack.prod.conf.js)
var path = require('path') var utils = require('./utils') var webpack = require('webpack') var config = require('../config') var merge = require('webpack-merge') var baseWebpackConfig = require('./webpack.base.conf') var CopyWebpackPlugin = require('copy-webpack-plugin') var HtmlWebpackPlugin = require('html-webpack-plugin') var ExtractTextPlugin = require('extract-text-webpack-plugin') var OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin') var env = config.build.env var webpackConfig = merge(baseWebpackConfig, { module: { rules: utils.styleLoaders({ sourceMap: config.build.productionSourceMap, extract: true }) }, devtool: config.build.productionSourceMap ? '#source-map' : false, output: { path: config.build.assetsRoot, filename: utils.assetsPath('js/[name].[chunkhash].js'), chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') }, plugins: [ // http://vuejs.github.io/vue-loader/en/workflow/production.html new webpack.DefinePlugin({ 'process.env': env }), new webpack.optimize.UglifyJsPlugin({ compress: { warnings: false }, sourceMap: true }), // extract css into its own file new ExtractTextPlugin({ filename: utils.assetsPath('css/[name].[contenthash].css') }), // Compress extracted CSS. We are using this plugin so that possible // duplicated CSS from different components can be deduped. new OptimizeCSSPlugin({ cssProcessorOptions: { safe: true } }), // generate dist index.html with correct asset hash for caching. // you can customize output by editing /index.html // see https://github.com/ampedandwired/html-webpack-plugin new HtmlWebpackPlugin({ filename: config.build.index, template: 'index.html', inject: true, minify: { removeComments: true, collapseWhitespace: true, removeAttributeQuotes: true // more options: // https://github.com/kangax/html-minifier#options-quick-reference }, // necessary to consistently work with multiple chunks via CommonsChunkPlugin chunksSortMode: 'dependency' }), // split vendor js into its own file new webpack.optimize.CommonsChunkPlugin({ name: 'vendor', minChunks: function (module, count) { // any required modules inside node_modules are extracted to vendor return ( module.resource && /\.js$/.test(module.resource) && module.resource.indexOf( path.join(__dirname, '../node_modules') ) === 0 ) } }), // extract webpack runtime and module manifest to its own file in order to // prevent vendor hash from being updated whenever app bundle is updated new webpack.optimize.CommonsChunkPlugin({ name: 'manifest', chunks: ['vendor'] }), // copy custom static assets new CopyWebpackPlugin([ { from: path.resolve(__dirname, '../static'), to: config.build.assetsSubDirectory, ignore: ['.*'] } ]) ] }) if (config.build.productionGzip) { var CompressionWebpackPlugin = require('compression-webpack-plugin') webpackConfig.plugins.push( new CompressionWebpackPlugin({ asset: '[path].gz[query]', algorithm: 'gzip', test: new RegExp( '\\.(' + config.build.productionGzipExtensions.join('|') + ')$' ), threshold: 10240, minRatio: 0.8 }) ) } if (config.build.bundleAnalyzerReport) { var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin webpackConfig.plugins.push(new BundleAnalyzerPlugin()) } module.exports = webpackConfig
VueJS/Webpack - Images not loadng from list when image path is to local machine
I have a Vuejs project that I am using with Webpack.
Here is an example of how to render a list of images via VueJS:
https://jsfiddle.net/8mq9o7md/
<div id="app"> <ul id="example-1"> <li v-for="item in items"> <img :src="item.link" width="30px" height="30px"> </li> </ul> </div> var example1 = new Vue({ el: '#example-1', data: { items: [ { link: 'https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon@2.png?v=73d79a89bded' }, { link: 'http://cdn.mysitemyway.com/etc-mysitemyway/icons/legacy-previews/icons/3d-transparent-glass-icons-symbols-shapes/016945-3d-transparent-glass-icon-symbols-shapes-shapes-circle.png' } ] } })Here the images are pulled from an external source via CDN. It works fine.
The problem occurs when the link to the images is from a local source (if I link to images located on my machine). For example:
items: [ { link: '../../images/localimage.png' }, { link: '../../images/localimage2.png' } ]If I do this, it will fail to load. In Chrome in the console, it will output:
GET http://localhost:3000/item.link 500 (Internal Server Error)This is what url-loader in my webpack.config.js file looks like:
module: { rules: [ { test: /\.(png|jpg|ttf|eot)$/, exclude: /node_modules/, use: [ { loader: 'url-loader?', options: { limit: 10000 } } ] } ] }Note: The images I am trying to load are ~3kb each.
How to concatenate data properties in VueJS
Basically I have a couple data strings in my data object, what I want, is to concatenate one the the strings, into the other. I want the user to be able to see the date of the last server update.
lastUpdate: "10/30/3033", message: 'Servers last updated: ',So ideally it would display "message + lastUpdate" Also I cant just string it together in HTMl because I need to be able to swap out the message for other strings. I could seperate out my messages in html, but i want to learn if there is a more dynamic way to do this.
Putting it into the context of my code we have the following parent componenet:
<template> <div id="main-container" class="col-sm-12"> <h1>Server Display</h1> <p>{{message}}</p> <div id="mini-container" class="col-sm-3" v-for="(server, index) in servers"> <h3>({{index+1}}): {{server}}</h3> <mi-single-server :servers="servers" @serversReset="message = $event"></mi-single-server> </div> </div> </template> <script type="text/javascript"> import SingleServer from './SingleServer.vue'; export default{ data: function(){ return{ lastUpdate: "10/30/3033", servers: ['Blue', 'Aphex', 'Maxamillion', 'T180', 'T190', 'NW0'], message: 'Servers last updated: ' }; }, components: { 'mi-single-server': SingleServer } } </script>What I would love to be able to do is to add something like the following to my data table
message: 'Servers last updated: ' + this.lastUpdateVue JS dev server doesn't work in Atom
I started my website project in Visual Studio Code and it worked fine for days. I found out about Atom and decided to move over to it. Somehow whenever I start the dev server in Atom, each Vue component spits out:
"Error: "extract-text-webpack-plugin" loader is used without the corresponding plugin"and the webpage only renders
Cannot GET /The dev server starts fine in Visual Studio Code but not in Atom
Vue JS - How to use MySQL database
So I'm creating a web/ios/android app for my girlfriend and I so we can create To-do's which will insert them into a database and output them on a calendar in the app (many more features than that, but that's the gist)
Vue seemed easier than React to accomplish this (especially because I can't find any ease database-integration with React), but I've seen Crud for Vue.
My questions are: Can I use crud with MySQL? Will one code-base run on windows browser, ios, and android?
OR: If I use SlimPHP to create a Rest API and then use Vue for the responses, is this something that would run one code-base on windows browser, ios, and android?
I'm hoping I can use SlimPHP to be honest, but if I can't do either, could anybody let me know what the EASIEST way to accomplish this is?
Thank you!
How to define property with a component?
I currently have three steps in a form that I want to show sequentially, so I created three components - one for each step of the process.
import LocationList from './components/LocationList.vue'; import ChooseTime from './components/ChooseTime.vue'; import ChooseMethod from './components/ChooseMethod.vue'; Vue.component('location-list', LocationList); Vue.component('choose-time', ChooseTime); Vue.component('choose-method', ChooseMethod); let store = { isVisible: { steps: { one: true, two: false, three: false, } } }; new Vue({ el: '#app-order', data: store, router });Now, when my one and only route is called, all these components are being loaded properly. The issue is that when I try to v-show them one at a time:
<location-list v-show="isVisible.steps.one"></location-list> <choose-time v-show="isVisible.steps.two"></choose-time> <choose-method v-show="isVisible.steps.three"></choose-method>The error message I receive though is:
[Vue warn]: Property or method "isVisible" is not defined on the instance but referenced during render. Make sure to declare reactive data properties in the data option.But when I check within Vue's browser extension, isVisible is defined within the root element?
Thanks for any help!
Vue.js / webpack creates no build file?
This might be a stupid question but what the hell.
I am using the vue-cli webpack-simple template, in the webpack config of this project I find the following:
output: { path: path.resolve(__dirname, './dist'), publicPath: '/dist/', filename: 'build.js' },No file is being built though. When running the webpack server I can access the file through the browser though. Is the build.js file only available when the webpack development server is running?
Is this what defines runtime vs standalone? Even after reviewing the documentation I am still confused what the exact difference is.
I need a compiled file since I am trying to publish a transpiled file to publish my package to NPM.
Cheers.
Vue.js - how to render nested component in this simple example?
Im lost. I dont know and I dont understand how can I correctly register and render component nested in other component. Run this example please, click on About link a look to console. There is warning about component registering.
var appLayout = { template: ` <div id="app" class="container"> <header> <slot name="header"></slot> </header> <slot></slot> <footer> <slot name="footer"></slot> </footer> </div> ` } var home = { template: ` <main> <h3>Home</h3> </main> ` } var about = { template: ` <main> <nested-component></nested-component> </main> ` } var nestedComponent = { template: ` <main> <h3>About</h3> </main ` } var routes = [ { path: '/', component: home }, { path: '/about', component: about } ] var router = new VueRouter({ routes }) new Vue({ template: '#app', router, components: { appLayout } }).$mount('#app') .fade-enter-active, .fade-leave-active { transition-property: opacity; transition-duration: 0.4s; } .fade-enter-active { transition-delay: 0.2s; } .fade-enter, .fade-leave-active { opacity: 0; } <template id="app"> <app-layout> <nav slot="header"> <router-link to="/">Home</router-link> <router-link to="/about">About</router-link> </nav> <transition name="fade"> <router-view></router-view> </transition> <p slot="footer"> Copyright notice </p> </app-layout> </template> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.1/vue.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/vue-router/2.7.0/vue-router.min.js"></script>
Router beforeEach guard executed before state loaded in Vue created()
If I navigate directly to an admin guarded route, http://127.0.0.1:8000/dashboard/, the navigation is always rejected because the state hasn't yet loaded at the time the router guard is checked.
beforeEach is being executed before Vue created and thus the currently logged in user isn't recognized.
How do I get around this chicken and egg issue?
files below truncated for relevancy
main.js router.beforeEach((to, from, next) => { // // This is executed before the Vue created() method, and thus store getter always fails initially for admin guarded routes // // The following getter checks if the state's current role is allowed const allowed = store.getters[`acl/${to.meta.guard}`] if (!allowed) { return next(to.meta.fail) } next() }) const app = new Vue({ router, store, el: "#app", created() { // state loaded from localStorage if available this.$store.dispatch("auth/load") }, render: h => h(App) }) router.js export default new VueRouter({ mode: 'history', routes: [ { path: '/', name: 'home', component: () => import('../components/Home.vue'), meta: { guard: "isAny", }, }, { path: '/dashboard/', name: 'dashboard', component: () => import('../components/Dashboard.vue'), meta: { guard: "isAdmin", }, }, ], })VuetifyJS, router-link not showing up as a cursor
But style is not applied and cursor remains text cursor when the mouse is over this element.
Full code:
<v-toolbar-title class="white--text"> <router-link to="/" tag="span" exact style="{ cursor: pointer; }">Name</router-link> </v-toolbar-title>Unable to make Multiselect display data properly in VueJS 2
I have a problem by which I'm unable to make Vue-Multiselect display what I want properly.
Here is my code:
<multiselect v-model="displayCategories" :selected="displayCategories" :options="optionsForSubCat" :searchable="false" :allow-empty="true" deselect-label="Can't remove this value" label="subCategories" track-by="subCategories" > </multiselect>This is my json object to display the Type of Sub-Category:
"displayCategories": { "categoryId": "3080854a-13d9-4e38-ab96-358aa6405a2c", "categoryName": "Furniture", "subCategories": [ { "subCategoryName": "Sofa", "subCategoryId": "21eb061d-9c67-4c55-ac48-e33e684a307c", "createdAt": "2017-07-24T13:07:18.000Z", "updatedAt": "2017-07-24T13:08:28.000Z", "fk_categoryId": "3080854a-13d9-4e38-ab96-358aa6405a2c" }, { "subCategoryName": "Bed", "subCategoryId": "2af11eee-5fce-4d97-b483-00a02de123ca", "createdAt": "2017-07-24T13:06:04.000Z", "updatedAt": "2017-07-24T13:08:28.000Z", "fk_categoryId": "3080854a-13d9-4e38-ab96-358aa6405a2c" } ] }Even if i changed the label and track-by to "subCategoryName", it does not even show the dropdown at all.
The expected behaviour would be Multiselect would show "Sofa", "Bed" in the dropdown.
How do i go about achieving the expected behaviour?
Thank you for your help!
Vue.js add class when computed value updates
I am new to vue.js but I have a simple question. I followed a tutorial but I want to extand it just a tiny bit :-P
Everytime when my rank changes I want to add a css class to animate the label. How can I do this little thing?
<div id="app"> <h1>Current Rank: <strong>{{ rank }}</strong></h1> <p>Your XP: <strong>{{ xp }}</strong></p> <button @click="increase">+ 10 XP</button> <button @click="decrease">- 10 XP</button> </div> var app = new Vue({ el: "#app", data: { xp: 10 }, methods: { increase: function() { return this.xp += 10; }, decrease: function() { return this.xp -= 10; } }, computed: { rank: function() { if (this.xp >= 100) { return "Advanced"; } else if (this.xp >= 50) { return "Intermediate"; } else if (this.xp >= 0) { return "Beginner"; } else { return "Banned"; } }} });
Django + Vue.js + SSR
I'm facing interesting problem...
I do have a form separated into steps - like wizard. Each step (even the 1st one) is loaded from server, where sits Django. The wizard itself is Vue component. Everything works fine together but now I would like to add a component into HTML, that is returned from server. The thing is Wizard (Vue) can only display HTML loaded from server, it cannot parse incomming HTML for new components and instantiate them. This is the point where I remembered Server Side Rendering.
My question is where to start if I wanna render the template that is rendered by Django render again via Vue.
Maybe there is nother approach. All I want is to have another rich component in my incomming form not just dumb HTML.
Thank you.
Vuetify DataTable custom-sort?
I have a DataTable from Vuetify in my current project, but it seems as though there is no alphabetical sorting for Strings. I want to make it so that fields of type String can be sorted as well. Vuetify documentation specifies that there is a custom-sort built-in function (https://vuetifyjs.com/components/selects), but I can't find any examples of exactly how to use it. Could someone who's used it please provide some information on how to implement it or point me to a link with some documentation?
Note: I am fairly new to front-end development, so I'm not sure if I'm missing something obvious?
resolve npm module dependencies
For a project, I'm using a library that I have built in order to share Vue components across the different applications.
So I import my component library as a npm module and I added it to the application package.json and that works fine.
The problem is that when I try to import something in the single component in the components library the application can't solve the dependencies of that component.
e.g component in the component library:
<template> <!-- my html --> </template> </script> // my script </script> <style scoped> // here I import the basic style for the component: @import "../../assets/base";in the application package.json I have:
"components": "git+ssh://git@git.xxxxx.com:xxxxx/xxxxx/my-library.git#development",and then I use the component normally in my project like this:
import MyComponent from "./components/MyComponent.vue";The component library works fine, but when I import the component in the application I get the following error from webpack:
This dependency was not found: * -!../../../../css-loader/index.js?sourceMap!../../assets/base in ./~/css-loader?sourceMap!./~/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-28803148","scoped":true,"hasInlineConfig":false}!./~/vue-loader/lib/selector.js?type=styles&index=0!./~/components/src/core/MyComponent.vue To install it, you can run: npm install --save -!../../../../css-loader/index.js?sourceMap!../../assets/baseOf course if I substitute the @import with the actual css needed everything works fine. How can I make this configuration works?