2 votes

La fonctionnalité Vue JS simple v-model sur le champ de saisie ne fonctionne pas dans l'application Laravel

J'utilise vuejs pour quelques fonctionnalités mineures dans une application Laravel (c'est à dire pas de composants) et pour une raison que je n'ai pas encore découverte, j'utilise vuejs pour des fonctionnalités mineures dans une application Laravel (c'est à dire pas de composants) et pour une raison que je n'ai pas encore découverte. v-model ne fonctionne pas.

Voici le fichier blade de mon modèle de base qui a été généré par l'intermédiaire de l'application php artisan make:auth Le contenu a été en grande partie supprimé parce qu'il n'était pas pertinent :

resources/views/layouts/app.blade.php

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <!-- css imports etc. -->
</head>
<body>
    <div id="app">
        <nav class="navbar navbar-expand-md navbar-light navbar-laravel">
            <!-- nav menu -->
        </nav>

        <main class="py-4">
            @yield('content')
        </main>
    </div>
    @stack('scripts') <---- Javascript goes here!
</body>
</html>

Voici le fichier dans lequel v-model est utilisé et ne fonctionne pas. Là encore, les parties non pertinentes ont été supprimées :

resources/views/instructors/create.blade.php

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-body">
                        <div class="card-title">
                            <h2>vue: @{{ message }}</h2> <-- This works
                            <div>
                                <input type="text" v-model="message">  <-- Blank!!?
                            </div>
                        </div>
                        <!-- more html -->
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

@push('scripts')
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue!'
            }
        });
    </script>
@endpush

Le champ de saisie qui v-model="message" est lié à est complètement vide, cependant, lors de la sortie de message Grâce aux accolades, je peux voir sa valeur. Voici à quoi cela ressemble :

enter image description here

Une idée de ce qui ne va pas ? J'ai vérifié la console et les outils de développement de Vue et aucune erreur n'apparaît, en fait rien n'apparaît du tout dans les outils de développement de Vue - un problème peut-être ? J'ai copié-collé ces extraits de code à partir de l'introduction de la documentation Vue pour m'assurer que je ne faisais pas quelque chose de stupide. J'ai essayé de définir l'attribut data à l'intérieur de l'instance Vue en tant que fonction renvoyant un objet, mais cela ne fait aucune différence. Le code fonctionne également ici : https://jsfiddle.net/eywraw8t/249625/ où le champ de saisie affiche la valeur de message comme je l'attends.

Je ne me considère pas comme un pro de Vue, mais je ne suis pas un débutant et je n'arrive pas à comprendre ce qui se passe. Toute aide serait appréciée, merci !

Mise à jour

Merci à tous ceux qui ont répondu. J'ai fait une erreur stupide... J'ai oublié qu'il y a de la JS qui est tirée, dans la section <head> en cours d'exécution make:auth - cela inclut Vue par défaut. J'ai oublié de regarder correctement ici car j'ai supposé que c'était antérieur à </body> . Je pense que les deux scripts JS étaient en conflit, ce qui a causé le problème. Voir head ci-dessous :

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!-- CSRF Token -->
    <meta name="csrf-token" content="{{ csrf_token() }}">

    <title>{{ config('app.name', 'Laravel') }}</title>

    <!-- Scripts -->
    <script src="{{ asset('js/app.js') }}" defer></script> <-- Vue included here

    <!-- Fonts -->
    <link rel="dns-prefetch" href="https://fonts.gstatic.com">
    <link href="https://fonts.googleapis.com/css?family=Nunito" rel="stylesheet" type="text/css">

    <!-- Styles -->
    <link href="{{ asset('css/app.css') }}" rel="stylesheet">
</head>

J'ai commenté le script et cela fonctionne bien maintenant.

1voto

Udhav Sarvaiya Points 676

Pour vue.js 2, utilisez ce qui suit :

<html>
  <body>
    <div id="app">
      <h1>Vue: @{{message}}</h1>
      <input v-model="message">
    </div>
      <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
      <script type="text/javascript">
          var app = new Vue({
              el: '#app',
              data: {
                  message: 'Hello Vue!'
              }
          });
      </script>
  </body>
</html>

Pour plus de détails sur la façon de travailler avec le modèle V : Laracasts_épisodes_2

0voto

Mayuri Pansuriya Points 595

Essayez le code suivant

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row justify-content-center">
            <div class="col-md-8">
                <div class="card">
                    <div class="card-body">
                        <div class="card-title">
                            <div id="app">
                                <template>
                                    <div>
                                        <div class="card-title">
                                            <h2>
                                                Add Instructor
                                            </h2>
                                            <h2>vue: @{{ message }}</h2>
                                            <div>
                                                <input type="text" v-model="message">
                                            </div>
                                        </div>
                                    </div>
                                </template>
                            </div>

                        </div>
                        <!-- more html -->
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

@push('script')
    <script>
        var app = new Vue({
            el: '#app',
            data: {
                message: 'Hello Vue!'
            },
        });
    </script>
@endpush

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X