【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台学习笔记(3.11-3.12)

news/2024/11/28 8:34:43/

【全栈之巅】Node.js + Vue.js 全栈开发王者荣耀手机端官网和管理后台学习笔记(3.11-3.12)

本项目是 学习Bilibili 全栈之巅 视频教程相关源码和体会
https://gitee.com/blaunicorn/node-vue-wangzherongyao
持续更新中…

3.11 web页继续优化card,抽象首页card的各个部分,形成listcard、nav、swiper组件

// web\src\components\ListCard.vue 理想是传入数据,直接展示新闻、英雄列表和图文攻略
<template><a-card :icon="icon" :title="title"><!-- 应用插槽展示数据 --><div class="nav jc-between"><divclass="nav-item":class="{ active: active === index }"v-for="(category, index) in categories":key="index"@click="() => {active = index;$refs.list.$swiper.slideTo(index);}"><div class="nav-link" v-text="category.name">热门</div></div></div><div class="card-body pt-3"><swiperref="list"@slide-change="() => (active = $refs.list.$swiper.realIndex)"><swiper-slide v-for="(category, index) in categories" :key="index"><!-- 具名插槽,把子组件的数据再传递给父组件,便于后面区分新闻资讯、英雄列表、视频列表的不同样式展示 --><slot name="items" :category="category"></slot></swiper-slide></swiper></div></a-card>
</template><script>export default {props: {icon: { type: String, required: true },title: {type: String,required: true,},// 分类categories: { type: Array, required: true },},data() {return {active: 0,};},};
</script><style>
</style>
// web\src\main.js
// 全局引用CardList组件
import ListCard from './components/ListCard.vue'
Vue.component('m-list-card', ListCard)
// Web界面中的swiper的点击和滑动控制样式功能
// 点击转跳区域
@click = "$refs.list.$swiper.slideTo(i)"
//区域改变,active的样式也跟随变化
@slide-change="() => active = $refs.list.$swiper.realIndex"
// web\src\views\Home.vue 引入ListCard组件<!-- 封装好的高级组件 --><m-list-cardicon="caidananniudianji"title="新闻资讯-ListCard组件":categories="newsCats"><!-- 在父组件里,不通过循环,直接拿到子组件里的具名slot的数据,这样的好处是 子组件的内容可以由父组件决定怎么展示 --><template #items="{ category }"><divclass="py-2"v-for="(item, index) in category.newsList":key="index"><span v-text="item.categoryName">[新闻]</span><span>|</span><span v-text="item.title + item._id">春和景明柳垂莺娇,峡谷好礼随春报到</span><span v-text="item.date">06/12</span></div></template><!-- <template v-slot:heros="{ category }"></template> --></m-list-card>

3.12 web页新闻资讯的数据录入

// web\src\components\ListCard.vue 理想是传入数据,直接展示新闻、英雄列表和图文攻略
web\src\views\Main.vue
<style lang="scss">//   增加吸顶效果.topbar {position: sticky;top: 0;z-index: 999;}
</style>
// console终端中输出html中的文字
$$('.news_list_cont a').map(el=>el.innerHTML)
$$('.news_list .title').map(el=>el.innerHTML).slice(5)
// 写一个接口去自动录入新闻资讯的标题
// 1.server端引入插件,可以直接读取文件夹下所有文件
npm install require-all --save// server\plugins\db.js使用该插件// 2.()当成一个函数使用,再传入一个路径,回退到上级路径require('require-all')(__dirname + '/../models')//初始化数据// server\routes\web\index.js
module.exports = app => {const router = require('express').Router()//通过访问一个路径来写入数据,这样是数据能通过js的方式来写入数据库,不用自己在后台一个个添加// 初始化新闻数据// const Article = require('../../models/Article') // 这种要一个个引入相对麻烦些const mongoose = require('mongoose')// 另外一种方式是直接通过mongoose读取数据库// 使用模型const Artice = mongoose.model('Article')const Category = mongoose.model('Category')router.get('/news/init', async (req, res) => {const parent = await Category.findOne({name: '新闻分类'})console.log(parent)//获取分类,lean表示获取纯粹的json数组,用where限制分类新闻分类const cats = await Category.find().lean().where({parent: parent});// console.log(cats);const newsTitles = ["嫦娥皮肤设计大赛最终投票开启公告", "狄某有话说|姜子牙化身“象棋高手”?", "3月17日外挂专项打击公告", "3月17日“演员”惩罚名单", "3月17日净化游戏环境声明及处罚公告", "3月16日体验服停机更新公告", "老亚瑟的答疑时间:貂蝉-仲夏夜之梦海报优化计划,王昭君-凤凰于飞优化海报过程稿", "嫦娥皮肤设计大赛人气创意奖、优秀创意奖公布", "3月16日账号注销流程变更说明", "春和景明柳垂莺娇,峡谷好礼随春报到", "3月16日全服不停机更新公告", "3月13日体验服不停机更新公告", "3月12日体验服停机更新公告", "3月12日体验服停机更新公告", "狄某有话说|江湖规矩,对线不打“WiFi”牛", "第三届王者荣耀全国大赛赛事日历公布", "嫦娥皮肤设计大赛最终投票开启公告", "狄某有话说|姜子牙化身“象棋高手”?", "老亚瑟的答疑时间:貂蝉-仲夏夜之梦海报优化计划,王昭君-凤凰于飞优化海报过程稿", "嫦娥皮肤设计大赛人气创意奖、优秀创意奖公布", "超丰厚奖励等你赢!第三届王者荣耀全国大赛北京海选首站(北京丰科万达站)即将开赛!", "第三届王者荣耀全国大赛——安徽省再次启航!", "第三届王者荣耀全国大赛城市赛道——第一期海选赛赛点信息", "斗鱼新势力战队选拔赛", "狄某有话说|江湖规矩,对线不打“WiFi”牛", "老亚瑟的答疑时间:貂蝉-仲夏夜之梦及金色仲夏夜优化后海报展示", "王者荣耀·女神节 峡谷女神才艺showtime还不来围观!", "狄某有话说|春节回顾,2月对局环境数据盘点!", "嫦娥皮肤设计大赛首轮投票开启公告", "老亚瑟的答疑时间:皮肤优化沟通月历上线,公孙离-祈雪灵祝优化进度展示"]// 打算制造随机分类,slice是为了防止影响数据本身,复制一份数据去排序。Math.random()-0.5是让数据在正负0.5之间随机,slice(0,2)是取两个数const randomCats = cats.slice(0).sort((a, b) => Math.random() - 0.5).slice(0, 2)const newList = newsTitles.map(title => {return {categories: randomCats, // 打乱随机取2个分类title: title}})// 清空原有数据库,再插入数据await Artice.deleteMany({})await Artice.insertMany(newList)res.send(newList)})app.use('/web/api', router)
}// server\index.js
// 导入web 路由
require('./routes/web')(app)//3. http://localhost:3000/web/api/news/init  后端api可以访问到数据

http://www.ppmy.cn/news/749412.html

相关文章

使用java -jar jenkins.war启动jenkins

使用java -jar jenkins.war启动jenkins 1. Windows启动脚本&#xff0c;保存到jenkins.bat 后双击运行 echo off echo. echo [信息] 使用Jar命令运行Web工程。 echo.cd %~dp0 rem :: 设置jenkins数据主目录 set JENKINS_HOME./jenkinsdataset JAVA_HOMED:\Program Files\Jav…

Kubernetes管理工具Helm

Helm 是一个用于管理 Kubernetes 应用程序的工具,它提供了一种简化和自动化部署的方式。在本文中,我将总结一下我使用 Helm 的经验和教训。 首先,我要说的是 Helm 的安装非常简单。你只需要下载并安装 Helm 的二进制文件,然后运行几个命令即可完成安装。而且,Helm 还提供…

3D建模软件、Creo 3D 、Creo8安装、下载教程

PTC Creo 8.0 是一款三维 CAD 软件&#xff0c;适用于多个行业和应用场景&#xff0c;包括机械设计、工业设计、电子设计等等。以下是 PTC Creo 8.0 的功能介绍和安装条件&#xff1a; 功能介绍&#xff1a; 三维建模&#xff1a;可以使用多种工具进行三维建模&#xff0c;包…

写一个函数求某个数对应的二进制中1的个数(牛客)

[该题的牛客链接](https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8? 一、方法一&#xff1a;%/达到二进制位右移的效果1.1用>>操作符实现1.2方法一代码的改进&#xff08;针对负数情况&#xff09; 二、方法二&#xff1a;按位与1&#x…

前端开发者需注意的关键SEO要点

作为前端开发者&#xff0c;除了关注网站的外观和功能&#xff0c;还需要重视搜索引擎优化&#xff08;SEO&#xff09;。在设计和构建网站时&#xff0c;考虑SEO因素将有助于提高网站在搜索引擎结果页的排名&#xff0c;增加网站流量和可见性。本文将介绍前端开发者需要注意的…

抗渗等级p6是什么意思_砼抗渗等级S6和P6有何区别

p6与s6的抗渗混凝土的区别如下&#xff1a;混凝土的抗渗性用抗渗等级(P)或渗透系数来表示。我国标准采用抗渗等级。抗渗等级是以28d龄期的标准试件&#xff0c;按标准试验方法进行试验时所能承受的最大水压力来确定。GB50164《混凝土质量控制标准》根据混凝土试件在抗渗试验时所…

S6怎么恢复出厂设置?

设备开机启动完成&#xff0c;长按电源键30秒&#xff0c;在听到第二次“滴”后松手&#xff0c;恢复管理员密码

AirDisk-S6和S6X什么区别?

S6X优点 1、硬件增强&#xff0c;内存加大 2、web登录 3、双盘raid1模式更稳定 4、千兆网口速度比S6快 5、HDMI 4K高清输出&#xff0c;带红外遥控 6、USB可以扩展&#xff0c;选择性导出导入 7、人脸识别分类 8、共享组权限 9、链接分享文件增强