Table des matières
1. Le contenu minimum inclus dans mvvm
2. Ma mise en œuvre
1. Définition des variables et mise en place de la veille
2. Définition des instructions
3.
Maison interface Web js tutoriel Apprendre et comprendre le code source de vue ensemble

Apprendre et comprendre le code source de vue ensemble

Jun 26, 2017 am 09:50 AM
源码 理解

D'après le site officiel de vue, on peut savoir que vue est un framework mvvm et qu'il est responsive. Afin de mieux comprendre sa connotation, j'ai implémenté une simple démo d'apprentissage mvvm. Partagez-le avec tout le monde ci-dessous et invitez tout le monde à en discuter.

1. Le contenu minimum inclus dans mvvm

  1. Ensemble d'instructions, tel que : texte, modèle, etc.

  2. modèle de données et affichage des données d'interaction

  3. prise en charge du composant : c'est-à-dire mise à jour dynamique d'une partie du code html

2. Ma mise en œuvre

1. Définition des variables et mise en place de la veille

var directives = {}; //指令集合var vNodes = new Array(); //解析的Dom集合var dataModel = {
    name:"name",
    title: "title"}; //数据Modelvar Watch = {
    isInit: false,
    watchs: new Array(),
    run: function(newValue, expOrfn){ var self = this;if(!self.isInit){
            expOrfn.call(vModel);
        }this.watchs.map(function(data,index){
            data.nodes.map(function(d,i){if(self.isInit){
                    d.directive.init(newValue, d, data); //绑定初始化值, 以及初始化一些事件}else{
                    d.directive.update(newValue, d, data); //只更新值,此时run的调用来值value-set                }
            });
        });
        
        self.watchs = [];
    },
    push:function(watch){this.watchs.push(watch);
    }
} //任务管理
Copier après la connexion

Explication :

  1. Regarder La méthode push est utilisée pour ajouter des dépendances, puis exécutée pour exécuter toutes les dépendances. Une fois l'exécution terminée, la collection de dépendances actuelle doit être nettoyée. La collecte des dépendances dans vue se fait en dep, et la gestion des tâches assurée par watch (Je ne sais pas si je comprends bien)

2. Définition des instructions

directives.text = { 
    init: function(value, vNode){
        vNode.elm.textContent = value;
    },
    update: function(value, vNode){
        vNode.elm.textContent = value;
    }
}//需要响应事件的怎么办directives.model ={ 
    init: function(value, vNode, _watch){
        vNode.elm.value = value; //判断自己发生的改变,不应该再改变自己 vNode.elm.addEventListener('keyup',function(evt){
            vNode.model[_watch.key] = vNode.elm.value;
        }); 
    },
    update:function(){

    }   
}
Copier après la connexion

Description :

  1. Puisqu'il s'agit d'un exemple d'apprentissage de démonstration, seul un texte simple et Le modèle est défini. Deux spécifications, le texte : utilisé pour l'affichage des données et le modèle utilisé pour la réponse de saisie (zone de saisie)

3.

Remarque :
//转换vModel,暂支持一级var properties = Object.getOwnPropertyNames(dataModel);var vModel = {}, formSetting = false;for( var index in properties){ 
    (function refreshData(_index){var key = properties[_index];var property = Object.getOwnPropertyDescriptor(dataModel, key);var setter = property.set;var getter = property.get;var _val = property.value;var _getter = function(){var val = getter ? getter.call(vModel) : _val;//收集依赖,与watch要分开            Watch.push({
                key: key,
                nodes: vNodes.filter(function(data,index){return data.modelKey == key ? true : false;
                }),
                getter: _getter
            });return val;
        };
        Object.defineProperty(vModel, key, {
            configurable: true,
            enumerable: true,
            set: function(value){if(setter){
                    setter.call(vModel, value);
                } //处理依赖                Watch.run(value, _getter);//this.value = value;            },
            get: _getter

        })
    })(index);
}
Copier après la connexion

vModel est généré sur la base de dataModel, c'est-à-dire que les méthodes get et set de chaque attribut sont personnalisées, ce qui peut également être implémenté à l'aide d'un proxy dans es6 (
  1. Tu as raison ?

    ).

    Lors de la définition d'un attribut, la méthode get sera appelée en premier pour collecter les dépendances. Une fois la valeur de commodité modifiée, tout le contenu concerné peut être modifié.
  2. 4. Analyser dom en tant que vNode

Instructions :
//解析vNodesvar app = document.getElementById('app');
app.childNodes.forEach(function(data,index){if(data.nodeType != 1) return;var hv = data.getAttribute('data-hv');var hvs = hv.split(',');
    hvs.forEach(function(item,row){var keyValue = item.split(':'); //vNode对象上一定要有model,这是方便vNode相应时候的找vModel        vNodes.push({
            directive: directives[keyValue[0]],
            modelKey: keyValue[1],
            model: vModel,
            elm: data
        });
    });
});
Copier après la connexion

Ici, nous parlons à propos de l'analyse C'est très tiré par les cheveux pour vNode, car il collecte uniquement les instructions spécifiées par data-hv sur le dom et stocke les instructions, éléments, vModel, etc. correspondants dans un objet dans vNodes pour la méthode get de chaque attribut de vModel pour collecter les dépendances.
  1. 5. Première initialisation

Instructions :
//调用所有的get一次Watch.isInit = true;var _keys = Object.getOwnPropertyNames(vModel);
_keys.map(function(key,data){var data = vModel[key];
    Watch.run(data); 
});
Watch.isInit = false;
Copier après la connexion

sera initialisée La valeur de vModel est rendu au Dom. Ici, chaque get est activement exécuté, puis la méthode watch.run est exécutée.
  1. Je pense que la conception et la mise en œuvre ici ne sont pas cohérentes avec les idées de vue. Si quelqu'un voit cela, veuillez me donner quelques conseils.
  2. 6. Dom analysé

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

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

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)

La pratique d'application de Python dans la protection du code source des logiciels La pratique d'application de Python dans la protection du code source des logiciels Jun 29, 2023 am 11:20 AM

En tant que langage de programmation de haut niveau, le langage Python est facile à apprendre, à lire et à écrire et a été largement utilisé dans le domaine du développement de logiciels. Cependant, en raison de la nature open source de Python, le code source est facilement accessible aux autres, ce qui pose certains défis en matière de protection du code source des logiciels. Par conséquent, dans les applications pratiques, nous devons souvent adopter certaines méthodes pour protéger le code source Python et assurer sa sécurité. Dans le domaine de la protection du code source des logiciels, il existe une variété de pratiques d'application parmi lesquelles Python peut choisir. Voici quelques exemples courants

Comment afficher le code source du code PHP dans le navigateur sans être interprété et exécuté ? Comment afficher le code source du code PHP dans le navigateur sans être interprété et exécuté ? Mar 11, 2024 am 10:54 AM

Comment afficher le code source du code PHP dans le navigateur sans être interprété et exécuté ? PHP est un langage de script côté serveur couramment utilisé pour développer des pages Web dynamiques. Lorsqu'un fichier PHP est demandé sur le serveur, le serveur interprète et exécute le code PHP qu'il contient et envoie le contenu HTML final au navigateur pour affichage. Cependant, nous souhaitons parfois afficher le code source du fichier PHP directement dans le navigateur au lieu de l'exécuter. Cet article expliquera comment afficher le code source du code PHP dans le navigateur sans être interprété et exécuté. En PHP, vous pouvez utiliser

Site Web pour consulter le code source en ligne Site Web pour consulter le code source en ligne Jan 10, 2024 pm 03:31 PM

Vous pouvez utiliser les outils de développement du navigateur pour afficher le code source du site Web. Dans le navigateur Google Chrome : 1. Ouvrez le navigateur Chrome et visitez le site Web sur lequel vous souhaitez afficher le code source. 2. Cliquez avec le bouton droit n'importe où sur le Web ; page et sélectionnez « Inspecter » ou appuyez sur la touche de raccourci Ctrl + Maj + I pour ouvrir les outils de développement ; 3. Dans la barre de menu supérieure des outils de développement, sélectionnez l'onglet « Éléments » 4. Regardez simplement le code HTML et CSS ; du site Internet.

Un guide complet pour apprendre et appliquer le code source du framework Golang Un guide complet pour apprendre et appliquer le code source du framework Golang Jun 01, 2024 pm 10:31 PM

En comprenant le code source du framework Golang, les développeurs peuvent maîtriser l'essence du langage et étendre les fonctions du framework. Tout d’abord, récupérez le code source et familiarisez-vous avec sa structure de répertoires. Deuxièmement, lisez le code, suivez le flux d'exécution et comprenez les dépendances. Des exemples pratiques montrent comment appliquer ces connaissances : créer un middleware personnalisé et étendre le système de routage. Les meilleures pratiques incluent l’apprentissage étape par étape, l’évitement du copier-coller inconsidéré, l’utilisation d’outils et la référence aux ressources en ligne.

Vue peut-elle afficher le code source ? Vue peut-elle afficher le code source ? Jan 05, 2023 pm 03:17 PM

Vue peut afficher le code source. La méthode de visualisation du code source dans Vue est la suivante : 1. Obtenez vue via "git clone https://github.com/vuejs/vue.git" 2. Installez les dépendances via "npm i" ; ; 3. Via " npm i -g rollup" pour installer le rollup ; 4. Modifiez le script de développement 5. Débogez le code source.

Comment afficher le code source de Tomcat dans Idea Comment afficher le code source de Tomcat dans Idea Jan 25, 2024 pm 02:01 PM

Étapes pour afficher le code source de Tomcat dans IDEA : 1. Téléchargez le code source de Tomcat ; 2. Importez le code source de Tomcat dans IDEA ; 3. Visualisez le code source de Tomcat ; 4. Comprendre le principe de fonctionnement de Tomcat ; mise à jour ; 7. Utiliser des outils et des plug-ins ; 8. Participer à la communauté et contribuer. Introduction détaillée : 1. Téléchargez le code source de Tomcat Vous pouvez télécharger le package de code source depuis le site officiel d'Apache Tomcat. Généralement, ces packages de code source sont au format ZIP ou TAR, etc.

Analyse et optimisation du code source du framework Golang Analyse et optimisation du code source du framework Golang Jun 02, 2024 pm 04:54 PM

Cet article explore l'analyse du code source et l'optimisation du framework Go. La structure du code source comprend quatre packages principaux, impliquant la logique du cadre de base, le contexte de la demande, la liaison de données et le rendu des réponses. Les techniques d'optimisation comprennent : 1. Utiliser des arbres de routage pour optimiser le traitement des itinéraires afin d'augmenter considérablement la vitesse de recherche d'itinéraire. 2. Utilisez un middleware pour la mise en cache et la compression afin de réduire la charge du serveur et le temps de réponse. 3. Évitez d'effectuer des opérations fastidieuses lors des rappels pour maintenir une réactivité élevée. 4. Activez la journalisation et analysez les requêtes lentes pour identifier les goulots d'étranglement des performances. 5. Mettez régulièrement à jour les versions du framework pour profiter des dernières améliorations de performances.

Erreur de code source PHP : résolution du problème d'erreur d'index Erreur de code source PHP : résolution du problème d'erreur d'index Mar 10, 2024 am 11:12 AM

Erreur de code source PHP : pour résoudre le problème d'erreur d'index, des exemples de code spécifiques sont nécessaires. Avec le développement rapide d'Internet, les développeurs rencontrent souvent divers problèmes lors de l'écriture de sites Web et d'applications. Parmi eux, PHP est un langage de script côté serveur populaire, et ses erreurs de code source sont l'un des problèmes que les développeurs rencontrent souvent. Parfois, lorsque nous essayons d'ouvrir la page d'index d'un site Web, divers messages d'erreur apparaissent, tels que "InternalServerError", "Unde

See all articles