Mouse Hover в реализации компонента VueJS в Laravel - PullRequest
9 голосов
/ 20 сентября 2019

Моя мышь не работает, когда я использую ее в Laravel.

Мой файл Vue хранится в resources/js/Dashboard.vue

Пока я пытался изменить v-on:mouseover на@mouseover но он все еще не работает.

В результате при наведении на кнопку кнопки текст не изменяется.

Что я делаю не так и как это исправить?

Ниже приведено содержимое моего Dashboard.vue файла;

<template>
<div id="mouse">
  <a
    v-on:mouseover="mouseover"
    v-on:mouseleave="mouseleave">
    {{message}}
  </a>
</div>
</template>
<!--Force Override of the css style for datepicker class-->

<style>

  #mouse {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: block;
    width: 280px;
    height: 50px;
    margin: 0 auto;
    line-height: 50px;
    text-align: center;
    color: #fff;
    background: #007db9;
  }
</style>

<script>

export default {
    components: {
    },
    data() {
        return {
          showAudience: false,
          message: 'Hover Me',
        }
    },
    computed: {
    },
    methods : {
    mouseover: function(){
      this.message = 'Good!'
    },    
    mouseleave: function(){
      this.message = 'Hover Me!'
    }
    },
    mounted() {
    },
}
</script>

Здесь находится содержимое моего Blade.php файла;

@extends('layouts.app', ['pageSlug' => 'dashboard'])

@section('content')
  <dashboard-component></dashboard-component>
  @endsection

@push('js')
    <script src="{{ asset('black') }}/js/plugins/chartjs.min.js"></script>
    <script src="{{ asset('js/app.js') }}"></script>
    <script>
        $(document).ready(function() {
          //demo.initDashboardPageCharts();
        });
    </script>
@endpush

.и воспроизводить локально, ниже находится файл package.json;

{
    "private": true,
    "scripts": {
        "dev": "npm run development",
        "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
        "watch": "npm run development -- --watch",
        "watch-poll": "npm run watch -- --watch-poll",
        "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
        "prod": "npm run production",
        "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
    },
    "devDependencies": {
        "axios": "^0.19",
        "bootstrap": "^4.1.0",
        "cross-env": "^5.1",
        "jquery": "^3.2",
        "laravel-mix": "^4.0.7",
        "lodash": "^4.17.13",
        "popper.js": "^1.12",
        "resolve-url-loader": "^2.3.1",
        "sass": "^1.15.2",
        "sass-loader": "^7.1.0",
        "vue": "^2.6.10",
        "vue-template-compiler": "^2.6.10"
    },
    "dependencies": {
        "chart.js": "^2.8.0",
        "friendly-errors-webpack-plugin": "npm:@soda/friendly-errors-webpack-plugin@^1.7.1",
        "vue-chartjs": "^3.4.2",
        "vue2-datepicker": "^2.12.0"
    }
}

Редактировать добавлен мой app.js

require('./bootstrap');
window.Vue = require('vue');
import Vue from 'vue'
import App from './components/App.vue'

/**
 * The following block of code may be used to automatically register your
 * Vue components. It will recursively scan this directory for the Vue
 * components and automatically register them with their "basename".
 *
 * Eg. ./components/ExampleComponent.vue -> <example-component></example-component>
 */

// const files = require.context('./', true, /\.vue$/i);
// files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default));
Vue.component('dashboard-component', require('./components/Dashboard.vue').default);
Vue.component('base-table', require('./components/base/BaseTable.vue'));

Vue.component('example-component', require('./components/ExampleComponent.vue').default);


new Vue({
    el: '#app',
});

Ответы [ 4 ]

0 голосов
/ 29 сентября 2019

В вашем Dashboard.vue файле попробуйте изменить следующее:

data() {
    return {
        showAudience: false,
        message: 'Hover Me',
    }
},

Into:

data: {
    showAudience: false,
    message: 'Hover Me',
},

(возможно, объект работает лучше для вас)

0 голосов
/ 24 сентября 2019

Код работает, когда я запускаю в своей системе, он работает.

Я пробовал это на JSFiddle.

//html
<div id="mouse" class="mouse1">
 <a
    v-on:mouseover="mouseover"
    v-on:mouseleave="mouseleave">
    {{name}}
  </a>
</div>
//CSS
#mouse {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: block;
    width: 280px;
    height: 50px;
    margin: 0 auto;
    line-height: 50px;
    text-align: center;
    color: #fff;
    background: #007db9;
  }

//js 
new Vue({
  el: "#mouse",
  data: {
   name: 'Hover Me!',
     showAudience: false,
  },
  methods : {
    mouseover: function(){
      this.name = 'Good!'
    },    
    mouseleave: function(){
      this.name = 'Hover Me!'
    }
    },
    mounted(){
        }    
})
0 голосов
/ 24 сентября 2019

Ухоженная.Похоже, что кнопка меняет размер во время анимации, мышь входит и выходит из состояния наведения, потому что край движется.

Я добавил div вокруг каждой кнопки и прикрепил триггеры наведения к div вместокнопки

<body>
    <div id="app">
        <h1>Hover the mouse near the border</h1>
        <hr>
        <div @mouseover="hoverOver" @mouseout="hoverOut">
            <button :class="classes">IMMEDIATE</button>
        </div>
        <br><br><br>
        <div @mouseover="hoverOver" @mouseout="hoverOutTimeout">
            <button :class="classes">WAIT JUST A BIT
        </button>
        </div>
    </div>

https://jsfiddle.net/jmbldwn/kbswLpto/5/

0 голосов
/ 24 сентября 2019

Попробуйте добавить их, чтобы предотвратить событие и распространение по умолчанию

v-on:mouseover.prevent.stop="mouseover"
v-on:mouseleave.prevent.stop="mouseleave"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...