Maison interface Web js tutoriel Utilisation immédiate du projet watch in vue

Utilisation immédiate du projet watch in vue

Jun 09, 2018 am 11:38 AM
vue 技术分享

Cette fois je vais vous présenter l'utilisation immédiate de watch dans le projet Vue Quelles sont les précautions pour l'utilisation immédiate de watch dans le projet Vue Voici un cas pratique, jetons un oeil.

J'ai aussi écrit ceci dans le projet. Par exemple, s'il y a une requête qui doit être exécutée une fois avant d'être initialisée, puis surveiller ses modifications, de nombreuses personnes l'écrivent comme ceci :

created(){
  this.fetchPostList()
},
watch: {
  searchInputValue(){
    this.fetchPostList()
  }
}
Copier après la connexion

Nous pouvons écrire ce qui précède comme suit :

watch: {
  searchInputValue:{
    handler: 'fetchPostList',
    immediate: true
  }
}
Copier après la connexion

2. L'enregistrement des composants mérite d'être appris auprès du département, La première étape est l'introduction,

La deuxième étape est l'enregistrement,

import BaseButton from './baseButton'
import BaseIcon from './baseIcon'
import BaseInput from './baseInput'
export default {
 components: {
  BaseButton,
  BaseIcon,
  BaseInput
 }
}
<BaseInput v-model="searchText" @keydown.enter="search" />
<BaseButton @click="search"> <BaseIcon name="search"/></BaseButton>
Copier après la connexion
🎜>

La troisième étape est l'utilisation officielle,

C'est aussi la méthode d'écriture la plus courante et la plus courante. Cependant, ce type de méthode d'écriture est classique. Il existe de nombreux composants qui doivent être introduits et enregistrés plusieurs fois, ce qui est très ennuyeux.

Nous pouvons utiliser webpack pour créer notre propre contexte (de module) en utilisant la méthode

pour implémenter des composants dynamiques automatiques.

L'idée est la suivante : dans le main.js sous le dossier src, utilisez webpack pour empaqueter dynamiquement tous les composants de base requis.

Le code est le suivant :

require.context()

De cette façon, nous n'avons besoin que de la troisième étape pour introduire le composant :

import Vue from 'vue'
import upperFirst from 'lodash/upperFirst'
import camelCase from 'lodash/camelCase'
// Require in a base component context
const requireComponent = require.context(
 ‘./components', false, /base-[\w-]+\.vue$/
)
requireComponent.keys().forEach(fileName => {
 // Get component config
 const componentConfig = requireComponent(fileName)
 // Get PascalCase name of component
 const componentName = upperFirst(
  camelCase(fileName.replace(/^\.\//, '').replace(/\.\w+$/, ''))
 )
 // Register component globally
 Vue.component(componentName, componentConfig.default || componentConfig)
})
Copier après la connexion
3. Rationaliser vuex Les modules sont introduits

<BaseInput
 v-model="searchText"
 @keydown.enter="search"
/>
<BaseButton @click="search">
 <BaseIcon name="search"/>
</BaseButton>
Copier après la connexion

Pour vuex, nous sortons le magasin comme suit : Il est nécessaire d'introduire beaucoup de modules, puis enregistrez-les dans Vuex.Store~~

La méthode simplifiée est similaire à celle ci-dessus et utilise également require.context() pour lire le fichier. Le code est le suivant :

import auth from './modules/auth'
import posts from './modules/posts'
import comments from './modules/comments'
// ...
export default new Vuex.Store({
 modules: {
  auth,
  posts,
  comments,
  // ...
 }
})
Copier après la connexion
De cette façon, nous n'avons besoin que du code suivant :

import camelCase from 'lodash/camelCase'
const requireModule = require.context('.', false, /\.js$/)
const modules = {}
requireModule.keys().forEach(fileName => {
 // Don't register this file as a Vuex module
 if (fileName === './index.js') return
 const moduleName = camelCase(
  fileName.replace(/(\.\/|\.js)/g, '')
 )
 modules[moduleName] = {
        namespaced: true,
        ...requireModule(fileName),
       }
})
export default modules
Copier après la connexion
4. Chargement différé des itinéraires

import modules from './modules'
export default new Vuex.Store({
 modules
})
Copier après la connexion

Ce point, concernant l'introduction de vue, je l'ai également mentionné auparavant dans les points techniques et le résumé de la reconstruction du projet vue. Cependant, les composants peuvent être chargés dynamiquement via require ou import(). ou

charge les itinéraires.

{
 path: '/admin',
 name: 'admin-dashboard',
 component:require('@views/admin').default
}
Copier après la connexion

5. Actualisez le composant clé du routeur
{
 path: '/admin',
 name: 'admin-dashboard',
 component:() => import('@views/admin')
}
Copier après la connexion

La scène suivante brise vraiment le cœur de nombreux programmeurs... Permettez-moi d'abord d'acquiescer à Vue. -router est utilisé pour implémenter le contrôle de routage. Supposons que nous écrivions un site Web de blog et que l'exigence soit de passer de /post-haorooms/a à /post-haorooms/b. Ensuite, nous avons découvert avec surprise que les données n'étaient pas mises à jour après le saut de page ? ! La raison en est que vue-router a découvert "intelligemment" qu'il s'agissait du même composant, puis il a décidé de réutiliser ce composant, donc la méthode que vous avez écrite dans la fonction créée n'a pas été exécutée du tout. La solution habituelle est de surveiller les changements dans $route pour initialiser les données, comme suit : Le bug est résolu, mais est-ce trop inélégant d'écrire ainsi à chaque fois ? Adhérant au principe d'être paresseux si vous le pouvez, nous espérons que le code sera écrit comme ceci :

Solution : Ajouter une clé unique à router-view, de sorte que même s'il s'agit d'un composant public , tant que l'URL change, ce sera Ce composant sera recréé.

data() {
 return {
  loading: false,
  error: null,
  post: null
 }
}, 
watch: {
 '$route': {
  handler: 'resetData',
  immediate: true
 }
},
methods: {
 resetData() {
  this.loading = false
  this.error = null
  this.post = null
  this.getPost(this.$route.params.id)
 },
 getPost(id){
 }
}
Copier après la connexion

Remarque : D'après mon expérience personnelle, ceci est généralement utilisé dans les sous-routes, afin de ne pas éviter un grand nombre de redessins. En supposant que cet attribut soit ajouté au répertoire racine de app.vue. , puis à chaque fois que vous cliquez pour changer l'adresse, Redessiner vaut toujours la peine !

data() {
 return {
  loading: false,
  error: null,
  post: null
 }
},
created () {
 this.getPost(this.$route.params.id)
},
methods () {
 getPost(postId) {
  // ...
 }
}
Copier après la connexion

6. Le seul élément racine du composant
<router-view :key="$route.fullpath"></router-view>
Copier après la connexion

Le scénario est le suivant : (Valeur émise à la place d'une instance d'Erreur) Erreur de compilation du modèle :

- Le modèle de composant doit contient exactement un élément racine
Si vous utilisez v-if sur plusieurs éléments, utilisez v-else-if

pour les chaîner à la place.


Il ne peut y avoir qu'un seul p dans le gabarit, pas comme ci-dessus Alors 2 p sont parallèles.


Par exemple, le code suivant :

signalera une erreur !

Nous pouvons utiliser la fonction de rendu pour rendre

<template>
 <li
  v-for="route in routes"
  :key="route.name"
 >
  <router-link :to="route">
   {{ route.title }}
  </router-link>
 </li>
</template>
Copier après la connexion

7. Problèmes d'emballage des composants et de pénétration des attributs d'événement

functional: true,
render(h, { props }) {
 return props.routes.map(route =>
  <li key={route.name}>
   <router-link to={route}>
    {route.title}
   </router-link>
  </li>
 )
}
Copier après la connexion
.

当我们写组件的时候,通常我们都需要从父组件传递一系列的props到子组件,同时父组件监听子组件emit过来的一系列事件。举例子:

//父组件
<BaseInput 
  :value="value"
  label="密码" 
  placeholder="请填写密码"
  @input="handleInput"
  @focus="handleFocus>
</BaseInput>
//子组件
<template>
 <label>
  {{ label }}
  <input
   :value="value"
   :placeholder="placeholder"
   @focus=$emit(&#39;focus&#39;, $event)"
   @input="$emit(&#39;input&#39;, $event.target.value)"
  >
 </label>
</template>
Copier après la connexion

这样写很不精简,很多属性和事件都是手动定义的,我们可以如下写:

<input
  :value="value"
  v-bind="$attrs"
  v-on="listeners"
>
computed: {
 listeners() {
  return {
   ...this.$listeners,
   input: event => 
    this.$emit('input', event.target.value)
  }
 }
}
Copier après la connexion

$attrs包含了父作用域中不作为 prop 被识别 (且获取) 的特性绑定 (class 和 style 除外)。当一个组件没有声明任何 prop 时,这里会包含所有父作用域的绑定,并且可以通过 v-bind="$attrs" 传入内部组件。

$listeners包含了父作用域中的 (不含 .native 修饰器的) v-on 事件监听器。它可以通过 v-on="$listeners" 传入内部组件。

相信看了本文案例你已经掌握了方法,更多精彩请关注php中文网其它相关文章!

推荐阅读:

脚手架与热刷新、热加载

Vue怎样进行局部作用域 & 模块化

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Vue réalise l'effet de défilement de chapiteau / texte Vue réalise l'effet de défilement de chapiteau / texte Apr 07, 2025 pm 10:51 PM

Implémentez les effets de défilement marquee / texte dans VUE, en utilisant des animations CSS ou des bibliothèques tierces. Cet article présente comment utiliser l'animation CSS: créer du texte de défilement et envelopper du texte avec & lt; div & gt;. Définissez les animations CSS et défini: caché, largeur et animation. Définissez les images clés, Set Transforment: Translatex () au début et à la fin de l'animation. Ajustez les propriétés d'animation telles que la durée, la vitesse de défilement et la direction.

Comment référencer le fichier JS avec Vue.js Comment référencer le fichier JS avec Vue.js Apr 07, 2025 pm 11:27 PM

Il existe trois façons de se référer aux fichiers JS dans Vue.js: spécifiez directement le chemin à l'aide du & lt; script & gt; étiqueter;; importation dynamique à l'aide du crochet de cycle de vie monté (); et l'importation via la bibliothèque de gestion de l'État Vuex.

Comment utiliser Bootstrap en Vue Comment utiliser Bootstrap en Vue Apr 07, 2025 pm 11:33 PM

L'utilisation de bootstrap dans vue.js est divisée en cinq étapes: installer bootstrap. Importer un bootstrap dans main.js. Utilisez le composant bootstrap directement dans le modèle. Facultatif: style personnalisé. Facultatif: utilisez des plug-ins.

Que signifie la charge paresseuse? Que signifie la charge paresseuse? Apr 07, 2025 pm 11:54 PM

Dans vue.js, le chargement paresseux permet de charger dynamiquement les composants ou les ressources, en réduisant le temps de chargement des pages initiales et en améliorant les performances. La méthode de mise en œuvre spécifique comprend l'utilisation de & lt; keep-alive & gt; et & lt; composant est & gt; composants. Il convient de noter que le chargement paresseux peut provoquer des problèmes de FOUC (écran d'éclat) et ne doit être utilisé que pour les composants qui nécessitent un chargement paresseux pour éviter les frais généraux de performances inutiles.

Comment interroger la version de Vue Comment interroger la version de Vue Apr 07, 2025 pm 11:24 PM

Vous pouvez interroger la version Vue en utilisant Vue Devtools pour afficher l'onglet Vue dans la console du navigateur. Utilisez NPM pour exécuter la commande "NPM List -g Vue". Recherchez l'élément VUE dans l'objet "dépendances" du fichier package.json. Pour les projets Vue CLI, exécutez la commande "Vue --version". Vérifiez les informations de la version dans le & lt; script & gt; Tag dans le fichier html qui fait référence au fichier VUE.

Comment utiliser Watch in Vue Comment utiliser Watch in Vue Apr 07, 2025 pm 11:36 PM

L'option Watch dans Vue.js permet aux développeurs d'écouter des modifications de données spécifiques. Lorsque les données changent, regardez déclenche une fonction de rappel pour effectuer des vues de mise à jour ou d'autres tâches. Ses options de configuration incluent immédiatement, qui spécifie s'il faut exécuter un rappel immédiatement, et profond, ce qui spécifie s'il faut écouter récursivement les modifications des objets ou des tableaux.

Que signifie la valeur de passage du composant Vue? Que signifie la valeur de passage du composant Vue? Apr 07, 2025 pm 11:51 PM

Les valeurs de passage des composants Vue sont un mécanisme pour passer des données et des informations entre les composants. Il peut être mis en œuvre via des propriétés (accessoires) ou des événements: accessoires: déclarer les données à recevoir dans le composant et passer les données dans le composant parent. Événements: Utilisez la méthode $ EMIT pour déclencher un événement et écoutez-le dans le composant parent à l'aide de la directive V-on.

Comment utiliser la pagination Vue Comment utiliser la pagination Vue Apr 08, 2025 am 06:45 AM

La pagination est une technologie qui divise de grands ensembles de données en petites pages pour améliorer les performances et l'expérience utilisateur. Dans Vue, vous pouvez utiliser la méthode intégrée suivante pour la pagination: Calculez le nombre total de pages: TotalPages () Numéro de page de traversée: Directive V-FOR pour définir la page actuelle: CurrentPage Obtenez les données de la page actuelle: CurrentPagedata ()

See all articles