Vuejs

Subscribe to Vuejs feed
most recent 30 from stackoverflow.com 2017-09-14T21:10:11Z
Updated: 7 years 1 week ago

VueJS/Webpack - Images not loadng from list when image path is to local machine

Tue, 2017-07-25 02:42

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.

Categories: Software

How to concatenate data properties in VueJS

Tue, 2017-07-25 02:27

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.lastUpdate
Categories: Software

Vue JS dev server doesn't work in Atom

Tue, 2017-07-25 02:14

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:

Console output (pastebin)

"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

Categories: Software

Vue JS - How to use MySQL database

Tue, 2017-07-25 02:06

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!

Categories: Software

How to define property with a component?

Tue, 2017-07-25 01:52

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!

Categories: Software

Vue.js / webpack creates no build file?

Tue, 2017-07-25 00:19

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.

Categories: Software

Vue.js - how to render nested component in this simple example?

Mon, 2017-07-24 23:10

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>

Categories: Software

Router beforeEach guard executed before state loaded in Vue created()

Mon, 2017-07-24 23:03

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", }, }, ], })
Categories: Software

VuetifyJS, router-link not showing up as a cursor

Mon, 2017-07-24 23:03
<router-link to="/" tag="span" style="{ cursor: pointer; }">Name</router-link>

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>
Categories: Software

Unable to make Multiselect display data properly in VueJS 2

Mon, 2017-07-24 20:47

I have a problem by which I'm unable to make Vue-Multiselect display what I want properly.

Current Behaviour: enter image description here

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!

Categories: Software

Vue.js add class when computed value updates

Mon, 2017-07-24 20:39

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"; } }

} });

https://jsfiddle.net/0caprx4L/

Categories: Software

Django + Vue.js + SSR

Mon, 2017-07-24 20:35

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.

Categories: Software

Vuetify DataTable custom-sort?

Mon, 2017-07-24 17:19

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?

Categories: Software

resolve npm module dependencies

Mon, 2017-07-24 17:04

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/base

Of course if I substitute the @import with the actual css needed everything works fine. How can I make this configuration works?

Categories: Software

Pug (Jade) base HTML Page: Cannot find element: #app

Mon, 2017-07-24 16:23

I use vibed server. It use Pug preprocessor (before known as Jade). Here is my page code:

doctype html html head script(src="https://unpkg.com/vue") script(src="app.js") title Hello, World body h1 Hello World #app |{{message}}

It generate next HTML output:

<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/vue"></script><script src="app.js"></script><title>Hello, World</title> </head> <body> <h1>Hello World</h1> <div id="app"> {{message}} </div> </body> </html>

My app.js code:

window.onload = function() { var app = new Vue({ el: '#app', data: { message: 'Hello Vue!' } }); app.$mount('#app'); }

But it's do not work. In browser console I am getting next error: Cannot find element: #app

upd: moving script(src="app.js") to down helped. But is there any better variant? Or it's ok?

Categories: Software

Vue.js: Prevent form submit only if condition true

Mon, 2017-07-24 15:07

I am using VeeValidate for validating a form. However, I want to submit the form without using JS. However, I still want users not to be able to submit, if there are any errors. If I use

<form @submit.prevent="validateBeforeSubmit">

it is disabling the default action completely.

Can you think of any solution to this? Thank you!

Categories: Software

Showing computed properties in components

Mon, 2017-07-24 14:50

I just came upon Components section (One-way data flow) and I can't figure out how to show computed properties from them.

<div id="demo"> <input v-model="parentMsg"/> <child v-bind:my-message="parentMsg"></child> </div>

JS:

var Child = { props: ['myMessage'], template: '<span>{{ lowerCaseMsg }}</span>', computed: { lowerCaseMsg: function() { return this.myMessage.trim().toLowerCase(); } } }); var data = { parentMsg: 'Message' } var demo = new Vue({ el: '#demo', data: data, components: { child: Child } })
Categories: Software

Inject css to a Vue component?

Mon, 2017-07-24 14:38

see below my-component.vue.This Component needs to be themable.

It needs to get extrenal css sheet as i need to allow other developers to customize its inner look.

Is there any other approach than accept a javascript object?

<template> <div class="container"> <div class="A"></div> <div class="B"></div> <div class="C"></div> </div> </template> <style scoped> .A { background-color:green; } .B { background-color: red; } .C { background-color: yellow } </style>
Categories: Software

Tinymce Vuejs - I got one error

Mon, 2017-07-24 13:56
<template> <div id="tinymce"> <h3>This is the tinyMCE editor</h3> <textarea id="editor" v-editor :body="body"></textarea> <hr> <p>This input field is properly binded</p> <input v-model="body"> <hr> <pre>data binding: {{ body }} </pre> </div> </div> </template> <script> tinymce.init({ selector:'#editor', }); Vue.directive('./../../assets/tinymce/tinymce.min.js', { twoWay: true, params: ['body'], bind: function () { tinyMCE.get('editor').setContent(this.params.body); tinyMCE.get('editor').on('change', function(e) { alert("changed"); }); }, update: function (value) { $(this.el).val(value).trigger('change') }, }); export default{ data(){ return{ post:{}, body:'test' } } } </script>

This is my code so I want to integrate tinymce with vuejs

When I load the component I got an error "Uncaught ReferenceError: tinymce is not defined"

What I am doing wrong

Can someone help me please

Categories: Software

php artisan vs apache/nginx for production

Mon, 2017-07-24 13:11

I just created my portfolio website http://ashishpatel.info using laravel and vue-router, now i wanted to host it on aws ec2-instance, and we can do it in two ways, 1- using php artisan,

php artisan serve --host=0.0.0.0 --port=80

2- using apache/nginx and doing some change in apache2.conf etc.

I wonder which is best way for doing it for production for handling more traffic?

Categories: Software

Pages