Maison > Questions et réponses > le corps du texte
P粉7647859242023-08-04 00:36:22
Avec l'aide de @Jared, j'ai résolu ce problème.
J'ai utilisé localStorage pour enregistrer l'état actuel du modèle et le recharger lors de la redirection vers une autre page.
const Model = (function () { let instance; let data = { isLogged: false, }; function init_localStorage() { save_localStorage(); } function load_localStorage() { let model = JSON.parse(localStorage.getItem('Model')); if (Object.keys(model).length === 0) { init_localStorage(); } data = model; } function save_localStorage() { localStorage.setItem('Model', JSON.stringify(data)); } function init() { load_localStorage(); return { getIsLogged: function () { return data.isLogged; }, setIsLogged: function (l) { data.isLogged = l; }, saveData: function () { save_localStorage(); } } } return { getInstance: function () { if (! instance) { instance = init(); } return instance; } } })();
En fin de compte, j'ai deux fonctions principales : save... et load..., qui lisent et sauvegardent les données de l'objet localStorage. Comme Jared l'a dit dans les commentaires, JSON ne peut pas chaîner les fonctions, j'ai donc créé un objet appelé data dans lequel je stocke toutes les données du modèle (telles que la variable isLogged).
Maintenant, chaque fois que je souhaite accéder aux données du modèle, j'en reçois d'abord une instance : let model = Model.getInstance(); Ensuite, je peux accéder à la méthode à partir de la fonction init renvoyée. Lorsque je demande une instance de modèle, il vérifie d'abord si l'instance actuelle a été initialisée. S'il n'est pas initialisé, il appelle la fonction load_localStorage pour lire les données de localStorage et les enregistrer dans la variable data.
Avant de rediriger vers une autre page, j'appelle la fonction saveData de l'instance Model pour enregistrer l'objet de données dans localStorage afin que la page redirigée puisse lire l'état précédemment enregistré.
Dans le fichier HTML, j'ai inclus le fichier js comme ceci : <script src="./../model/model.js"></script>.
Je suis sûr qu'il existe de meilleures solutions, peut-être avec un code plus lisible, mais cette méthode fonctionne assez bien pour moi :)