Vue第五篇:电商网站登录时vuex的使用

news2024/11/26 7:41:30

页面:

代码资源见:https://download.csdn.net/download/benben044/88071987

其中css使用开源库的UI,Main里面的元素是一张截图。

通过vue@cli脚手架生成的代码架构如下:

一、入口组件App.vue解析

主页面主要由两部分组成:Top组件的内容以及路由的出口显示信息。

<template>
  <div id="app">
    <Top/>
    <router-view/>
  </div>
</template>

<script>
  import Top from '@/components/Top'
  export default {
    name: 'app',
    components:{
      Top
    }
  }
</script>

<style>
  @import "./assets/css/basic.css";
  @import "./assets/css/demo.css";
</style>

二、Top组件

1、组件输出

name为top-home,其他组件中可以通过vue.$router.push({name: 'top-home'})到当前组件。

2、computed计算属性中定义了两个变量,这两个变量等于vuex状态的同名变量。

3、methods中比较特殊的是logoutAction函数,它的外面由mapActions包裹着。这个等价于:

logoutAction:function(){

      this.$store.dispatch('logoutAction')

}

<script>
import {mapState, mapActions} from 'vuex'
export default {
  name: 'top-home',
  computed: {
    ...mapState([
        'user',
        'isLogin'
    ])
  },
  methods: {
    show: function(value){
      if(value == 'shopcard'){
        if(this.user == null){
          alert('亲,请登录!');
          this.$router.push({name: 'login-home'});
          return false;
        }
      }
      this.$router.push({name:value})
    },
    ...mapActions([
        'logoutAction'
    ]),
    logout: function(){
      if(confirm('确定退出登录吗?')){
        this.logoutAction(); // 触发action
        this.$router.push({name: 'home-page'});
      }else{
        return false;
      }
    }
  }
}
</script>

<template>
  <div class="hmtop">
    <!-- 顶部导航条 -->
    <div class="mr-container header">
      <ul class="message-l">
        <div class="topMessage">
          <div class="menu-hd">
            <a @click="show('login-home')" target="_top" class="h" style="color:red" v-show="!isLogin">亲,请登录</a>
            <span v-show="isLogin" style="color:green">{{user}},欢迎您<a @click="logout" style="color:red">退出登录</a></span>
          </div>
        </div>
      </ul>
      <ul class="message-r">
        <div class="topMessage home">
          <div class="menu-hd"><a href="javascript:void(0)" style="color:red">手机端</a></div>
        </div>
        <div class="topMessage home">
          <div class="menu-hd"><a @click="show('home')" target="_top" class="h" style="color:red">商城首页</a></div>
        </div>
        <div class="topMessage my-shangcheng">
          <div class="menu-hd MyShangcheng"><a href="#" target="_top"><i class="mr-icon-user mr-icon-fw"></i>个人中心</a></div>
        </div>
        <div class="topMessage mini-cart">
          <div class="menu-hd"><a id="mc-menu-hd" @click="show('shopcart')" target="_top">
            <i class="mr-icon-shopping-cart mr-icon-fw"></i>
            <span style="color:red">购物车</span>
            <strong id="J_MiniCartNum" class="h" v-if="isLogin">{{length}}</strong>
          </a>
          </div>
        </div>
        <div class="topMessage favorite">
          <div class="menu-hd"><a href="#" target="_top"><i class="mr-icon-heart mr-icon-fw"></i><span>收藏夹</span></a></div>
        </div>
      </ul>
    </div>

    <!-- 悬浮搜索框 -->
    <div class="nav white">
      <div class="logo">
        <a @click="show('home-page')"><img src="@/assets/images/logo.png"/></a>
      </div>
      <div class="logoBig">
        <li @click="show('home-page')"><img src="@/assets/images/logobig.png"/></li>
      </div>
      <div class="search-bar pr">
        <a href="#"></a>
        <form>
          <input id="searchInput" type="text" placeholder="搜索" autocomplete="off">
          <input id="ai-topsearch" class="submit mr-btn" value="搜索" index="1" type="submit">
        </form>
      </div>
    </div>
    <div class="clear"></div>
  </div>

</template>

<style scoped>

</style>

三、router/index.js

刚才我们提到,主界面包含路由的输出,而这个代码显示路由包含index的Home组件,以及login的Home组件。

import { createRouter, createWebHistory } from 'vue-router'
import Home from '../views/index/Home.vue'
import Login from '../views/login/Home.vue'

const routes = [
  {
    path: '/',
    name: 'home-page',
    component: Home
  },
  {
    path: '/login',
    name: 'login-home',
    component: Login

  }
]

const router = createRouter({
  history: createWebHistory(process.env.BASE_URL),
  routes
})

export default router

四、index/Home.vue

该组件由两部分组成,Main.vue就是一张图片,Footer就是最下面的注脚部分内容。

<script>
  import Main from '@/views/index/Main'
  import Footer from '@/components/Footer'
  export default {
    name: 'home-page',
    components: {
      Main,
      Footer
    }
  }
</script>

<template>
  <div>
    <Main/>
    <Footer/>
  </div>
</template>

五、store/index.js,vuex的核心代码

登录或者退出两个行为,除了改变内存中vuex的状态信息,还需要更改session持久化中的变量信息。

import { createStore } from 'vuex'

export default createStore({
  state: {
    user: sessionStorage.getItem('user'),
    isLogin: sessionStorage.getItem('isLogin'),
  },
  getters: {
  },
  mutations: {
    login: function(state, user){
      state.user = user;
      state.isLogin = true;
      sessionStorage.setItem('user', user);
      sessionStorage.setItem('isLogin', true);
    },
    logout: function (state){
      state.user = null;
      state.isLogin = false;
      sessionStorage.removeItem('user');
      sessionStorage.removeItem('isLogin');
    }
  },
  actions: {
    loginAction: function(context, user){
      context.commit('login', user);
    },
    logoutAction: function (context){
      context.commit('logout');
    }
  },
  modules: {
  }
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/780676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-每日一题【114.二叉树展开为链表】

题目 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。 展开后的单链表应该与二叉树 先序遍历 顺序相同。 示例…

OSI七层模型和TCP/IP四层模型以及五层模型

OSI七层模型&#xff08;Open System Interconnect&#xff09;即开放系统互连参考模型&#xff0c;是由ISO&#xff08;International Organization for Standardization&#xff09;国际标准化组织提出的&#xff0c;用于计算机或通信系统间互联的标准体系。 从上到下可分为…

Flask 导航栏,模版渲染多页面

项目结构 app.py from flask import Flask, render_templateapp Flask(__name__)app.route(/) def index():return render_template(index.html)app.route(/secondpage) def secondpage():return render_template(secondpage.html)app.route(/threepage) def threepage():ret…

Linux驱动开发实战(一)——设备驱动模型

文章目录 前言设备驱动模型概述设备驱动模型的功能sysfs文件系统sysfs文件系统的目录结构 设备驱动模型的核心数据结构kobject结构体设备属性kobj_type 注册kobject到sysfs中的实例设备驱动模型结构kset集合kset与kobject的关系kset相关的操作函数注册kobject到sysfs中的实例实…

绘出「星辰大海」:华为云Astro轻应用新手指南-第一章

第1章 旅程的开端 发现Astro轻应用地图 第1站&#xff1a;创建账户 首先&#xff0c;你需要在华为云Astro官网注册专属账号。若已有华为账户&#xff0c;可直接登录。 在官网点击「立即使用」&#xff0c;即可跳转至「登录界面」 在「登录界面」点击「注册」&#xff0c;注册…

后端(四):博客系统项目

咱们在这里实现的是后端项目&#xff0c;前端代码就提一提&#xff0c;不全做重点介绍&#xff0c;在开始讲解这个博客系统项目之前&#xff0c;我们先看看这个项目的前端界面&#xff1a; 登录界面&#xff1a; 个人主页&#xff1a; 博客详情页&#xff1a; 写博客页&#x…

Python实战

官方文档 请点击下面工程名称&#xff0c;跳转到代码的仓库页面&#xff0c;将工程 下载下来 Demo Code 里有详细的注释 LearnPythonPython 实现功能点demo

Mac苹果系统安装双系统Windows10 Windows11 BOOTCAMP

Mac系统安装双系统Windows10 BOOTCAMP详细 1.下载Windows系统2.开始安装3.安装驱动4.默认启动5.备注 1.下载Windows系统 注意一下所有安装全程接充电器操作&#xff0c;以免安装过程中电脑断电带来不必要影响。 从下列方式选择合适的系统进行下载。 MSDN https://msdn.itelly…

【NLP】无服务器问答系统

一、说明 在NLP的眼见的应用&#xff0c;就是在“ 当你在谷歌上提出一个问题并立即得到答案时会发生什么&#xff1f;例如&#xff0c;如果我们在谷歌搜索中询问谁是美国总统&#xff0c;我们会得到以下回答&#xff1a;Joe Biden&#xff1b;这是一个搜索问题&#xff0c;同时…

概率论的学习和整理--番外14:如何理解 dutu输光定理

解决问题 1 dutu 拿100是赌一次好&#xff0c;还是100次1元的好&#xff1f; 一般的地方&#xff0c;如果不是公平赌局&#xff0c;而期望是负数的话 其实du次数越多越亏 2 1%就基本能决定胜负 了 3 千万不要陷入常人思维&#xff0c;用筹码数量思考&#xff0c;输光为止&am…

选读SQL经典实例笔记10_高级查询

1. 结果集分页 1.1. 只有做过了排序&#xff0c;才有可能准确地从结果集中返回指定区间的记录 1.2. DB2 1.3. Oracle 1.4. SQL Server 1.5. sql select salfrom ( select row_number() over (order by sal) as rn,salfrom emp) xwhere rn between 1 and 5 SAL ----800 95…

周末作业 c++

将顺序栈&#xff0c;循环队列定义成模板类型&#xff1a; #include <iostream>using namespace std;template <typename T,int Maxsize> class seqstack { private:T data[Maxsize];int top; public:seqstack() //无参构造{top-1;cout<<"无参构造…

jenkins使用企业微信进行审批

该篇文章实现了基于企业微信进行审批的功能&#xff08;也支持其他的webhook&#xff09; 前提是进行sharelibrary的配置 一、首先我们使用jenkins的sharelibrary进行审批人全局参数的设置&#xff08;该步骤是为了当审批人变动时不需要该每个pipeline只改动全局变量即可&…

❤️创意网页:抖音汉字鬼抓人小游戏复刻——附带外挂(“鬼鬼定身术”和“鬼鬼消失术”)坚持60秒轻轻松松(●‘◡‘●)

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

《零基础入门学习Python》第053讲:论一只爬虫的自我修养

0. 请写下这一节课你学习到的内容&#xff1a;格式不限&#xff0c;回忆并复述是加强记忆的好方式&#xff01; 马上我们的教学就要进入最后一个章节&#xff0c;Pygame 嗨爆引爆全场&#xff0c;但由于发生了一个小插曲&#xff0c;所以这里决定追加一个章节&#xff0c;因为…

下载|GitLab 2023 年 DevSecOps 全球调研报告:安全左移深入人心、AI/ML 蔚然成风

目录 谁应该对应用程序安全负主要责任&#xff1f; 安全实践的最大挑战 AI 驱动研发&#xff0c;提升研发效率 各个角色使用的工具数量是多少&#xff1f; 一体化 DevSecOps 平台有哪些优势&#xff1f; 56%、74%、71%、65%、57% 这些数字和 DevSecOps 结合在一起&#xf…

Java -- 元注解

元注解 就是 Java标准库中 原生的注解&#xff0c;有点类似于 Java类 中的 Object&#xff0c;由于添加在其他注解上 Java总共有四个元注解&#xff0c;他们的功能如下&#xff1a; Target(ElementType.ANNOTATION_TYPE)&#xff1a;指定该注解可以用于注解类、接口或枚举类型…

element 表格里,每一行都循环使用el-popover组件,关闭按钮失效问题如何解决?

具体代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><title></title><link rel"stylesheet" href"https://unpkg.com/element-ui/lib/theme-chalk/index.css"><styl…

Linux Misc 驱动-编写驱动例程基于iTOP-STM32P157开发板

首先我们回想一下注册杂项设备的三大流程&#xff0c;我们在 Windows 上面新建 misc.c 文件&#xff0c;并用 sourceinsight 打开。我们可以将上次编写的 helloworld.c 里面的代码拷贝到 misc.c 文件&#xff0c;并修改为如下图所示 添加头文件 /*注册杂项设备头文件*/ #inc…

辅助驾驶功能开发-功能规范篇(23)-2-Mobileye NOP功能规范

5.2 状态机要求 5.2.1 NOP/HWP 状态机 NOP/HWP状态机如下所示&#xff1a; 下表总结了这些状态&#xff1a; 状态描述Passive不满足功能条件&#xff0c;功能无法控制车辆执行器。Standby满足功能条件。该功能不是由驾驶员激活的。功能不控制车辆执行器。Active - Main功能由…