Vuejs

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

How to set afterEach method in vue-router

Fri, 2017-08-18 21:35

I have the following script:

import Vue from 'vue' import Router from 'vue-router' Vue.use(Router) export default new Router({ scrollBehavior (to, from, savedPosition) { // purposely left blank }, routes: [ { path: "/", component: SampleComponent } ] }

I would like to add a handler (afterEach) to the router so that I can close any open menus when a router link is taken.

I tried to add it to the constructor but it is not a constructor argument. So I tried:

Router.afterEach((to, from) => { // ... })

But I get the error: "afterEach is not a function"

How do I appropriately add an afterEach callback with this setup?

Thank you in advance for your help.

Categories: Software

js promise queue and loops

Fri, 2017-08-18 21:14

I am using the node package p-queue (GitHub repo) in order to ensure that the axios.get requests from my app are sequential and at a max rate of 1 per second.

I need to add some requests to the queue depending on data from a previous request so I thought I would just loop over an array and add new axois promises to the p-queue according to the length of that array, but I keep getting odd errors

I cannot show the code directly, but here is a small example that has the same problem:

var ml = [1, 2, 3, 4] for (var i = 0; i < ml.length; i++) { promq.add(() => axios.get('http://example.org/' + ml[i])) .then(response => { console.log(response.data) }) }

This will correctly enqueue 4 promises and axios will correctly produce 4 http 404 responses, but that is because it is trying to visit not example.org/1, but instead it makes 4 requests for example.org/undefined

Why is this not working?

Categories: Software

How to convert template to render function in vue

Fri, 2017-08-18 21:06

I am use vue 2.0.

<Poptip placement="right" width="400"> <Button type="ghost">click 激活</Button> <div class="api" slot="content">my content</div> </Poptip>

I need render function

render: (h, params) => { return h('Poptip', { props: { placement: 'right' } }, [h('Button', { props: { type: 'ghost' } }, 'Edit'), h('div', { props: { slot: 'content' } }, 'My content')]) }

if i using template it's work perfect But i used render function then slots content not replace with my content

Categories: Software

Logic doesn't work after .then

Fri, 2017-08-18 20:56

I have a Login end point that respond me a json. I'm using vue-router to do a POST and then Store a token in localStorage, but after the POST, the json shows on the screen:

{"success":false,"message":"Login ou senha inválidos!"}

It should return on the page login, with the message

This is the code:

var vmLogin = new Vue({ el: '#login', data: { email: '', msg: '', password: '' }, beforeCreate: function () { if(localStorage.getItem("timeTaskToken") !== null) { window.location.href = '/' } }, methods: { getLogin: function (e) { this.$http.post('/login', {email: this.email, password: this.password}).then((response) => { alert('teste!'); if(response.body.success === true) { localStorage.setItem("timeTaskToken", response.body.token); window.location.href = '/' } else { this.msg = response.body.message } }, (response) => { // error callback }); e.preventDefault(); } } });

login page

<form id="login" class="form-horizontal" method="post"> <h3>{{ msg }}</h3> <div class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">Email</label> <div class="col-sm-10"> <input type="email" v-model="email" class="form-control" name="email" placeholder="Email"> </div> </div> <div class="form-group"> <label for="inputPassword3" class="col-sm-2 control-label">Password</label> <div class="col-sm-10"> <input type="password" v-model="password" class="form-control" name="password" placeholder="Password"> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <div class="checkbox"> <label> <input type="checkbox"> Remember me </label> </div> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default" @click="getLogin">Sign in</button> </div> </div> </form>

It's like nothing after .then works...

The returned JSON just appear in the screen.

Categories: Software

Minimal examples with external .vue component files not working

Fri, 2017-08-18 20:29

I am starting with the snippets in this question How to use multiple vue components on single page? The following example works with vue build app.vue, but it does not work if I set up a simplest server and visit index.html.

index.html:

<!DOCTYPE html> <html> <head> <title>Test</title> <meta charset="utf-8"> <script type="text/javascript" src="jspm_packages/system.js"></script> <script type="text/javascript" src="config.js"></script> </head> <body> <div id="app"></div> <script type="text/javascript"> System.import('app.js'); </script> </body> </html>

app.js:

import Vue from 'vue/dist/vue.js' window.onload = function() { new Vue({ el: '#app', render: h => h(app) }) }

app.vue:

<template> <qwop></qwop> </template> <script> import qwop from 'qwop.vue' export default { components: { 'qwop': qwop } } </script>

qwop.vue:

<template> <div>Hello</div> </template>

Through running vue build app.vue, a web server is launched and I can see "Hello" in the web page. But nothing shows if I create a web server by for example python -m http.server and visit index.html. Anything wrong with my index.html and app.js?

Categories: Software

How to get id from a loop's item in vue.js?

Fri, 2017-08-18 19:41

I have a loop like this:

<div class="jokes" v-for="joke in jokes"> <strong>{{joke.body}}</strong> <small>{{joke.upvotes}}</small> <button v-on:click="upvote"><i class="fa fa-arrow-down"></i></button> <div>

I need to get joke.id so that I can post it to backend and increment the votes.

The method should be something like this:

methods: { upvote: function(e) { axios.post( this.BASE_URL + "/api/joke/" + this.joke.id + "/upvote", { token: 'secret', }).then(function(data){ console.log(data); }); } },

How can I achieve this?

Categories: Software

VueJS + Firebase saving an Array with Keys

Fri, 2017-08-18 19:09

Some Context... I have a list of players in a hockey league. For each game played I want to save a gamesheet with the players of the home team and visiting team that would include their game stats. I want the player .key from the full list of players to match the player .key of the stored gamesheet.


The issue I'm having is storing the array of the home/visitor teams to Firebase. The array for 'homeTeam' is the following:

[ { "name": "Steve", "number": "10", "position": "F", ".key": "-KrbKovnJe2uxU2h1Aec" }, { "name": "Carl", "number": "32", "position": "F", ".key": "-KrbKovnJe2uxU2h1Aec" } ]

I can save individual records with the following:

gamesheetRef.child(gameinfo['.key']).child('home').child(this.homeTeam[0]['.key']).set({name: this.homeTeam[0].name})

This saves as the correct structure in Firebase:
- gamesheet - -KonukQ9Pf7ksy9jvgo3 - home - -KrbKovnJe2uxU2h1Aec - name: "Steve"

How can I save the entire array like this, using the .key(s) from the array?

Categories: Software

Loading in local fonts with webpack 2 and the vue-cli

Fri, 2017-08-18 18:00

I'm using the vue-cli webpack template and I'm trying to load in local fonts in my project. I'm having trouble getting the path to my fonts correct. How should my path look like?

I found some information about what I might be doing wrong but I couldn't figure it out: https://github.com/webpack-contrib/sass-loader#problems-with-url

File structure:

enter image description here

In my _fonts.scss:

// Webfont: LatoLatin-Regular @font-face { font-family: 'LatoLatinWeb'; src: url('../assets/fonts/LatoLatin-Regular.eot'); /* IE9 Compat Modes */ src: url('../assets/fonts/LatoLatin-Regular.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ url('../assets/fonts/LatoLatin-Regular.woff2') format('woff2'), /* Modern Browsers */ url('../assets/fonts/LatoLatin-Regular.woff') format('woff'), /* Modern Browsers */ url('../assets/fonts/LatoLatin-Regular.ttf') format('truetype'); font-style: normal; font-weight: normal; text-rendering: optimizeLegibility; }

Webpack.base.config.sj:

{ test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, loader: 'url-loader', options: { limit: 10000, name: utils.assetsPath('fonts/[name].[hash:7].[ext]') } }

Utils.js:

return { css: generateLoaders(), postcss: generateLoaders(), less: generateLoaders('less'), sass: generateLoaders('sass', { indentedSyntax: true }), scss: generateLoaders('sass').concat( { loader: 'sass-resources-loader', options: { resources: path.resolve(__dirname, '../src/styles/_variables.scss') } } ).concat( { loader: 'sass-resources-loader', options: { resources: path.resolve(__dirname, '../src/styles/mixins/_mixins.scss') } } ).concat( { loader: 'sass-resources-loader', options: { resources: path.resolve(__dirname, '../src/styles/_fonts.scss') } } ), stylus: generateLoaders('stylus'), styl: generateLoaders('stylus') }

How do I load my local fonts in with vue-cli webpack template?

Categories: Software

Vue JS prop in component always undefined

Fri, 2017-08-18 17:47

I have a component. Once I select a category I need to get the ID and also a boolean which checks if the category has a subcategory, if it does I do a API call to fetch the subcategories.

Html:

<material-selectcat v-model="catId" name="category" id="selcat"> <option v-for="cat in cats" :value="cat.cat_id" :subcat="cat.has_subCat" v-text="cat.category_name"></option> </material-selectcat>

Component:

<template> <select><slot></slot></select> </template> <script> export default { props: ['value', 'subcat'], watch: { watcher: function() {} }, computed: { watcher: function() { this.relaod(this.value); this.fetchSubCategories(this.value, this.subcat); } }, methods: { relaod: function(value) { var select = $(this.$el); select.val(value || this.value); select.material_select('destroy'); select.material_select(); }, fetchSubCategories: function(val, sub) { var mdl = this; var catID = val || this.value; console.log("sub: " + sub); mdl.$emit("reset-subcats"); if (catID) { if (sub == 1) { if ($('.subdropdown').is(":visible") == true) { $('.subdropdown').fadeOut(); } } else { axios.get(URL.API + '/subcategories/' + catID) .then(function(response) { response = response.data.subcatData; response.unshift({ subcat_id: '0', subcategory_name: 'All Subcategories' }); mdl.$emit("update-subcats", response); $('.subdropdown').fadeIn(); }) .catch(function(error) { if (error.response.data) { swal({ title: "Something went wrong", text: "Please try again", type: "error", html: false }); } }); } } else { if ($('.subdropdown').is(":visible") == true) { $('.subdropdown').fadeOut(); } } } }, mounted: function() { var vm = this; var select = $(this.$el); select .val(this.value) .on('change', function() { vm.$emit('input', this.value); }); select.material_select(); }, updated: function() { this.relaod(); }, destroyed: function() { $(this.$el).material_select('destroy'); } } </script>

But inside the fetchSubCategories() function this line always returns undefined console.log("sub: " + sub);

If I check the Vue tab in my chrome inspector I can see that all data exist:

cat_id:0 category_name:"All Subcategories" has_subCat:0

But why doesnt has_subCat get passed as a prop?

Categories: Software

vue 2 props undefined

Fri, 2017-08-18 17:30

Please help! I have 'undefined' props in child template.

Main js:

// some code before window.Vue = require('vue'); import EventBus from '../components/event-bus'; // some code after Vue.component('calendar-select', require('../components/admin/calendar_select.vue')); const app = new Vue({ el: '#app', data: function() { return { isActiveCalendar: true } }, methods: { toggleCalendar() { this.isActiveCalendar = !this.isActiveCalendar; } }, mounted() { EventBus.$on('toggleCalendar', this.toggleCalendar); } });

After i create template like this:

<template> <div class="custom-select" v-bind:class="{ active: isActiveCalendar}" > <div class="box flex" v-on:click="toggleCalendar" > <span>Calendar</span> <img src="/assets/img/admin/arrow-down.png" alt="#"> </div> </div> </div> </template> <script> import EventBus from '../event-bus'; export default { // ------- start props: ['isActiveCalendar'], data: function() { return { } }, methods: { toggleCalendar: function(event) { console.log(this.isActiveCalendar) EventBus.$emit('toggleCalendar'); } } // ------- end } </script>

When i do console.log on this.isActiveCalendar, the variable is undefined. And in Vue plugin for Chrome is same thing.

Please, tell me, what i do wrong!

Thanks!

Categories: Software

vuejs 2 observation doesn't work

Fri, 2017-08-18 17:20

I can't figure out why vuejs observation don't work on a very simple scenario. When the model "asker" is updated, computed props should automagically update value to 3. Why is this not working ? Fiddle is here https://jsfiddle.net/w1zz9cjs/3/

<div id="simulator"> <c-simulator-form v-bind:subject="asker"></c-simulator-form> </div> Vue.component('c-simulator-form', { props: ['subject'], template: '<div class="c-simulator-form">{{thesize}}</div>', computed: { thesize: function() { return _.size(this.subject); } } }); var vm = new Vue({ el: '#simulator', data: { asker: { a: 1, b: 2 } } }); vm.asker['c'] = 3;
Categories: Software

user php captcha in vuejs component

Fri, 2017-08-18 16:45

in laravel 5.4.20 and vuejs2. i want to use a simple code captcha in my vue modal component (i dont want to use recaptcha). how can i do it??

im using mewebstudio captcha like this :

Route::any('captcha-test', function() { if (Request::getMethod() == 'POST') { $rules = ['captcha' => 'required|captcha']; $validator = Validator::make(Input::all(), $rules); if ($validator->fails()) { echo '<p style="color: #ff0000;">Incorrect!</p>'; } else { echo '<p style="color: #00ff30;">Matched :)</p>'; } } $form = '<form method="post" action="captcha-test">'; $form .= '<input type="hidden" name="_token" value="' . csrf_token() . '">'; $form .= '<p>' . captcha_img() . '</p>'; $form .= '<p><input type="text" name="captcha"></p>'; $form .= '<p><button type="submit" name="check">Check</button></p>'; $form .= '</form>'; return $form; });

but it just work in php documents (i need in vue component)

Categories: Software

Vue watch multiple props in component

Fri, 2017-08-18 16:12

I have a <select> component that looks like this:

<script> export default { props: ['value'], watch: { value: function(value) { this.relaod(value); this.fetchSubCategories(value); } }, methods: { relaod: function(value) { var select = $(this.$el); select.val(value || this.value); select.material_select('destroy'); select.material_select(); }, fetchSubCategories: function(value) { var mdl = this; var catID = value || this.value; mdl.$emit("reset-subcats"); if (catID) { axios.get(API.URL + '/subcategories/' + catID) .then(function(response) { response = response.data.subcatData; response.unshift({ subcat_id: '0', subcategory_name: 'All Subcategories' }); mdl.$emit("update-subcats", response); $('.subdropdown').fadeIn(); }) .catch(function(error) { if (error.response.data) { swal({ title: "Something went wrong", text: "Please try again", type: "error", html: false }); } }); } } else { if ($('.subdropdown').is(":visible") == true) { $('.subdropdown').fadeOut(); } } } }, mounted: function() { var vm = this; var select = $(this.$el); select .val(this.value) .on('change', function() { vm.$emit('input', this.value); }); select.material_select(); }, updated: function() { this.relaod(); }, destroyed: function() { $(this.$el).material_select('destroy'); } } </script>

But now the API has added one more value which says if the current category has a subcategory, if it does then I must call the API for that subcategory once a selection has been made.

So I have added the value to my props like this: props: ['value', 'hasSubCat'],

What I was thinking now is that I only will run the function fetchSubCategories(value) if the prop hasSubCat of the selected item is = 1.

But how can I watch multiple props? Right now my code only watch the prop value and calls the API once a item in the <select> has been selected if I try to use this.hasSubCat inside my fetchSubCategories() function it will only return undefined. So how can I keep track of what value the hasSubCat prop has?

Categories: Software

How to add current year for copyright in vie.js?

Fri, 2017-08-18 15:20

I want to display ©year in my webpage.

How do I do the following in vue.js

document.write( new Date ().get

Categories: Software

.Net web api creates new session for each request

Fri, 2017-08-18 15:12

We're developing a web api, which is connected by a vue js app, for the client side, we are using vue-resource to post a request to api. We have to keep some data on session, but for each request, web api creates new session. We tried all the topics at stackoverflow that are related with the problem, but any of them couldn't solve the problem.

Global.asax

protected void Application_PostAuthorizeRequest() { if (IsWebApiRequest()) HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required); } private bool IsWebApiRequest() { var apiPrefix = "~/api"; return HttpContext.Current.Request.AppRelativeCurrentExecutionFilePath.StartsWith(apiPrefix, StringComparison.CurrentCultureIgnoreCase); } protected void Session_Start(object sender, EventArgs e) { } protected void Session_End(object sender, EventArgs e) { }
Categories: Software

Vuejs send array json

Fri, 2017-08-18 15:08

There is a database. Containing two tables - a recipe and a flavor , between which one-to-many relationship. One recipe - a lot of flavor. I send data from the vue. How do I prepare the data for transmission?

var vm = new Vue({ el: '#my_view', data: { recipeslist: [], recipe: [], newrecipe: {} }

fiddle

Categories: Software

Build QR code scanner using Vue.js

Fri, 2017-08-18 15:08

I wanted to build a QR code SCANNER using Vue.js but I am not able to find any resources.Can someone please help me to get some resources.I am new to Vue.js so I am not able to find any resources/packages to build the QR code scanner

Categories: Software

Laravel - Inserting users to database through vue.js component

Fri, 2017-08-18 14:51

I am creating small project in Laravel. I made a small CMS based on vue.js (it is component based SPA application) and now I (as Admin) want to insert manually users to database (username, email, password, and boolean isAdmin) from vue's component.

And questions is how can I do that in secure way?

Categories: Software

How to pass props to all routes in vue.js?

Fri, 2017-08-18 14:24

I want to pass BASE_URL to all components. My App.js is like:

<template> <router-view></router-view> </template> <script> import addJoke from './components/addJoke.vue' import showJokesAll from './components/showJokesAll.vue' export default { components: { 'add-joke': addJoke, 'show-jokes-all': showJokesAll }, data () { return { BASE_URL : 'http://127.0.0.1:8090' } } } </script> <style> </style>

And the routes.js:

import showJokesAll from './components/showJokesAll.vue'; import addJoke from './components/addJoke.vue'; export default [ {path:'/', component: showJokesAll, props: {BASE_URL: 'http://127.0.0.1:8090'} }, {path:'/add', component: addJoke, props: {BASE_URL: 'http://127.0.0.1:8090'} } ]

and in showJokesAll component I have:

<script> import axios from 'axios'; export default { name: 'showJokesAll', props: ['BASE_URL'], data () { return { jokes:[] } }, methods: { }, created() { axios.get( BASE_URL + '/api/jokes').then( response => this.jokes = response.data); } } </script>

But the components is not received BASE_URL.

[Vue warn]: Error in created hook: "ReferenceError: BASE_URL is not defined"

How can I fix this?

Categories: Software

Uncaught (in promise) 500 (Internal Server Error) BadMethodCallException

Fri, 2017-08-18 13:54

I use vue 2.0 and Laravel 5.4

I trying to build a matching system

that has a dynamic vue component in it (i.e when someone likes another person it immediately tells you that you have liked that person and/or when accepting it immediately tells you that you're a match)

but the component keeps loading, and in my dev-tools it tells me it has an internal server error(500) (+ Uncaught (in promise))

and in my network it shows a BadMethodCallException--> Call to undefined method Illuminate\Database\Query\Builder::matches_with()

i'v included the component in my app.js file (resources)-->> Vue.component('match', require('./components/Match.vue'));

my Vue file

<template> <div> <p class="text-center" v-if="loading"> Loading... </p> <p class="text-center" v-if="!loading"> <a v-if="status == 0" @click="like_user"> <span title="I like you" class="send-heart"></span> </a> <a href=""><span title="I like you to" class="pending" v-if="status == 'pending'" @click="mutual_like">accept</span></a> <a href=""> <span title="You like this person" class="pending" v- if="status == 'waiting'"></span> </a> <span v-if="status == 'match'" title="Chat" class="chat"></span> </a> </p> </div> </template> <script> export default { mounted() { this.$http.get('/check_match_status/' + this.profile_user_id) .then((resp) => { console.log(resp) this.status = resp.body.status this.loading = false }) }, props: ['profile_user_id'], data() { return { status: '', loading: true } }, methods: { like_user() { this.loading = true this.$http.get('/like_user/' + this.profile_user_id) .then((r) => { if (r.body == 1) this.status = 'waiting' this.loading = false }) }, mutual_like() { this.loading = true this.$http.get('/mutual_like/' + this.profile_user_id) .then((r) => { if (r.body == 1) this.status = 'match' this.loading = false }) } } } </script>

my Controller

<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Auth; use App\Profile; use Illuminate\Support\Facades\Event; use App\User; use App\Matches; use App\Traits\Matchable; use DB; class MatchesController extends Controller { use Matchable; public function check($id){ if (Auth::user()->matches_with($id) === 1) { return [ "status" => "match" ]; } if(Auth::user()->has_pending_like_request_from($id)) { return [ "status" => "pending" ]; } if(Auth::user()->has_pending_like_request_sent_to($id)) { return [ "status" => "waiting" ]; } return [ "status" => 0 ]; } public function like_user($id) { //notify users return Auth::user()->like_user($id); } public function mutual_like($id) { //sending nots return Auth::user()->mutual_like($id); } public function matches() { $uid = Auth::user()->id; $match1 = DB::table('matches') ->leftJoin('users', 'users.id', 'matches.recipient_id') // who is not loggedin but send request to ->where('status', 1) ->where('sender_id', $uid) // who is loggedin ->get(); //dd($friends1); $match2 = DB::table('matches') ->leftJoin('users', 'users.id', 'matches.sender_id') ->where('status', 1) ->where('recipient_id', $uid) ->get(); $matches = array_merge($match1->toArray(), $match2->toArray()); return view('matches', compact('matches')); } }

my Trait use App\Matches; trait Matchable { public function like_user($recipient_id) { if($this->id === $recipient_id) { return 0; } if($this->matches_with($recipient_id) === 1) { return "You are already a match!"; } if($this->has_pending_like_request_sent_to($recipient_id) === 1) { return "You already liked this person."; } if($this->has_pending_like_request_from($recipient_id) === 1) { return $this->like_user($recipient_id); } $match = Matches::create([ 'sender_id' => $this->id, 'recipient_id' => $recipient_id ]); if($match) { return 1; } return 0; } public function mutual_like($sender_id) { if($this->has_pending_like_request_from($sender_id) === 0) { return 0; } $match = Matches::where('sender_id', $sender_id) ->where('recipient_id', $this->id) ->first(); if($match) { $match->update([ 'status' => 1 ]); return 1; } return 0; } public function matches() { $matches = array(); $m1 = Matches::where('status', 1) ->where('sender_id', $this->id) ->get(); foreach($f1 as $match): array_push($matches, \App\User::find($match->recipient_id)); endforeach; $matches2 = array(); $m2 = Matches::where('status', 1) ->where('recipient_id', $this->id) ->get(); foreach($m2 as $match): array_push($match2, \App\User::find($match->sender_id)); endforeach; return array_merge($matches, $match2); } public function pending_like_requests() { $users = array(); $matches = Matches::where('status', 0) ->where('recipient_id', $this->id) ->get(); foreach($matches as $match): array_push($users, \App\User::find($match->sender_id)); endforeach; return $users; } public function matches_ids() { return collect($this->matches())->pluck('id')->toArray(); } public function matches_with($user_id) { if(in_array($user_id, $this->matches_ids())) { return 1; } else { return 0; } } public function pending_like_requests_ids() { return collect($this->pending_like_requests())->pluck('id')->toArray(); } public function pending_like_requests_sent() { $users = array(); $matches = Matches::where('status', 0) ->where('sender_id', $this->id) ->get(); foreach($matches as $match): array_push($users, \App\User::find($match->recipient_id)); endforeach; return $users; } public function pending_like_requests_sent_ids() { return collect($this->pending_like_requests_sent())->pluck('id')- >toArray(); } public function has_pending_like_request_from($user_id) { if(in_array($user_id, $this->pending_like_requests_ids())) { return 1; } else { return 0; } } public function has_pending_like_request_sent_to($user_id) { if(in_array($user_id, $this->pending_like_requests_sent_ids())) { return 1; } else { return 0; } } }

my Model

namespace App; use Illuminate\Database\Eloquent\Model; class Matches extends Model { protected $fillable = ['sender_id', 'recipient_id', 'status',]; }

Categories: Software

Pages