supermallagain-学习记录
引入assets/css/normalize.css文件
在实际开发中,经常会将浏览器默认的样式进行重置
*{margin:0;padding:0;border:0;}
但是*是通配符,需要把所有的标签都遍历一遍,当网站较大时,样式比较多,会加大网站运行的负载。
normalize.css:保留有用的默认值,更正了常见浏览器不一致性等错误
直接在github中下载normalize.css文件放入对应的文件夹中。再在App.vue中使用:
重复点击导航时,控制台会报错:
**因此需要判断当前的路径是否等于当前的path,如果不等于的时候,再进行跳转:**同时isActive可以定义一个计算属性
computed: {isActive() {return this.path==this.$route.path}},props: {path: {type: String,default:'/home'}},methods: {boxclick() {if(this.$route.path!==this.path) //当不等于的时候才进行跳转this.$router.replace(this.path)//路由跳转}
}
此时在进行遍历的时候可以获取被遍历数组的index和item
可以在data中定义一个currentindex来存储当前的index,只有项目被标记的index和当前currentindex相同时,才有效
通过点击改变当前currentindex的值,点击的时候将改index传入,并赋值给currentindex
添加一个属性,props到子组件,然后通过路由path来判断
需要多次使用,因此放到common中
购物街
npm install vue-awesome-swiper@3 --save -dev
公用的组件
购物街 import HomeSwipper from 'views/home/childcomponent/HomeSwipper'
export default {name: 'View-Home',components: { NavBar,HomeSwipper },
可以在flex元素外面再套一个相对定位的盒子
重新修改navbar的组件
.content{width:100%;height:48px;background-color: rgb(247, 29, 66);font-size:25px;font-weight: 600;color:#fff;text-align: center;line-height: 48px;position:fixed;top:0px;
}
#navbar{position:relative;height:48px;top:0px;z-index:999
}
或者只需要使用一个div去占位,用一个空的div,把他放在fixed固定的元素的位置,让他拥有和fixed元素一样的宽高
Try `npm i --save-dev @types/swiper` if it exists or add a new declaration (.d.ts) file containing `declare module 'swiper';
// shengmi.d.ts
declare module 'swiper'
pakage.json:
"includes": ["shengmi.d.ts"],
vue.runtime.esm.js?2b0e:619 [Vue warn]: Unknown custom element: - did you register the component correctly? For recursive components, make sure to provide the “name” option.
需要重新初始化
添加观察参数,进行自动更新
export default {mounted() {new Swiper('.swiper-container', {autoplay: 1000,//可选选项,自动滑动direction: 'horizontal',autoplayDisableOnInteraction: false,grabCursor: true,roundLengths: true, pagination: '.swiper-pagination',loop: true,//循环模式选项observer: true,//修改swiper自己或子元素,自动初始化swiperobserverParents: true,//修改swiper的父元素,自动初始化swiper})}
因为仅有home页面需要,因此不需要再单独抽取组件
//home.vue import HomeRecommend from 'views/home/childcomponent/HomeRecommend'
export default {name: 'View-Home',components: { NavBar,HomeSwipper,HomeRecommend },data() {return {HomeImageBanner: [],HomeRecomenddata: []}},getmultidata().then(res => {let data = res.data.dataconsole.log(data);this.HomeImageBanner = data.banner.listthis.HomeRecomenddata=data.recommend.list})
此时出现与之前一样的问题
这是由于tabbar是使用flex布局的,因此脱离了文档流
#tabbar{width:100%;height:58px;/* background-color: red; */position:fixed;bottom:0px;left:0px;right:0px;display: flex;justify-content: space-around;border-top:1px solid rgba(100,100,100,0.2);background-color: #fff
}
#box-tabbar{width:100%;height:58px;position:relative;top:0px;z-index:999
}
控制栏部分

需求
点击字体变色,以及添加相同颜色的下划线;同时面展示相对应的图片
监听点击
类似于导航栏效果,这里生成的三个元素,最好使用for循环生成

{{item}}
显示响应的数据
封装请求–需要携带参数
//network/home.js
export function getdata(type, page) {///home/data?type=sell&page=1return request({url: '/home/data',params: {type,page}})
}
使用
//home.vue
import {getmultidata,getdata} from 'network/home.js'getdata('sell',1).then(res=>{console.log(res);})//created阶段
展示
监听点击事件


在tab-control中点击元素的时候,向父组件发射点击事件,并将点击的index传递过去
itemclick(index) {this.currentindex = indexthis.$emit('itemclick',index)}
样式
{{item.title}}{{item.price}}{{item.cfav}}
//home
import GoodsItem from 'components/content/homegoods/GoodsItem'data() {return {HomeImageBanner: [],HomeRecomenddata: [],tabitem: ['流行', '新款', '精选'],currentindex: 0,goodsmessage:[]}},
created(){// request({url:'/home/multidata'}).then(res=>{console.log(res);}) 进一步封装到一个单独的文件中getmultidata().then(res => {let data = res.data.datathis.HomeImageBanner = data.banner.listthis.HomeRecomenddata=data.recommend.list})getdata('pop', 1).then(res => {console.log(res.data.data);let data=res.data.datathis.goodsmessage=data.list})}, methods: {clickchose(index) {if (this.currentindex === index) { console.log('数据已经请求过了'); }if (this.currentindex != index) {console.log('将会重新请求数据');this.currentindex = indexswitch (index) {case '0':getdata('pop', 1).then(res => {console.log(res.data.data)let data=res.data.datathis.goodsmessage = data.list})break;case '1':getdata('new', 1).then(res => {console.log(res.data.data)let data=res.data.datathis.goodsmessage = data.list})break;case '2':getdata('sell', 1).then(res => {console.log(res.data.data)let data=res.data.datathis.goodsmessage = data.list})break;}}}
}
请求相应数据
默认情况下,显示的是流行的数据,因此在created阶段先将流行的数据请求过来并进行保存
点击之后,如果需要重新请求的话,就重新请求数据,并展示。需要重新修改home组件中的数据请求部分的代码

不能这样子写,只要点击不同的元素,就发一次请求,这个是没有必要的。如果之前已经获取数据了,那就不用重新获取
数据处理
先一次性获取所有的数据
totalmessage: {'pop': {page: 1,list:[]},'new': {page: 1,list:[]},'sell': {page: 1,list:[]}}//created阶段getdata('pop', 1).then(res => {console.log(res.data.data);let data = res.data.datathis.totalmessage.pop.list=data.listthis.goodsmessage=data.list})getdata('new', 1).then(res => {let data = res.data.datathis.totalmessage.new.list=data.list})getdata('sell', 1).then(res => {let data = res.data.datathis.totalmessage.sell.list=data.list})
在根据点击的元素,动态修改goodsmessage的数据
clickchose(index) {if (this.currentindex === index) { console.log('数据已经请求过了'); }if (this.currentindex != index) {this.currentindex = indexswitch (index) {case 0:this.goodsmessage = this.totalmessage.pop.listbreak;case 1:this.goodsmessage = this.totalmessage.new.listbreak;case 2:this.goodsmessage = this.totalmessage.sell.listbreak;}}}

axios请求
需要再次梳理
better-scroll 解决移动端的滚动效果
安装betterscroll
cnpm install better-scroll --save
创建scroll的公共子组件

使用scroll
//home组件中
购物街
import BScroll from 'better-scroll'
import scroll from 'components/common/scroll/scroll'
better-scroll问题
真的是服了,昨晚还好好的可以滚动,今天一看就不能滚动,去调式
1、wrapper高度已经给定,content的高度也有,而且也满足比wrapper的高度大
2、想是不是因为图片加载问题,需要去refresh一下,然后就去调用better-scroll的插件–使用oberver-DOM和observer-Image,结果还是不行
3、去增加imageload时间,当图片加载完成后,自动refresh,但此时使用this.refs.scroll.scroll.refresh()或者this.refs.scroll.scroll.refresh()或者this.refs.scroll.scroll.refresh()或者this.refs.scroll.refresh()也会报错
4、发现content元素并没有添加相关的样式


但又不知道怎么解决
没办法,直接关机重启,再打开
发现又解决了
怎么查看scrollHeight值

实现上拉加载更多
//home中
data() {return {HomeImageBanner: [],HomeRecomenddata: [],tabitem: ['流行', '新款', '精选'],currentindex: 0,goodsmessage: [],totalmessage: {'pop': {page: 1,list:[]},'new': {page: 1,list:[]},'sell': {page: 1,list:[]}}}},created(){// request({url:'/home/multidata'}).then(res=>{console.log(res);}) 进一步封装到一个单独的文件中getmultidata().then(res => {let data = res.data.datathis.HomeImageBanner = data.banner.listthis.HomeRecomenddata=data.recommend.list})getdata('pop', 1).then(res => {let data = res.data.datathis.totalmessage.pop.list=data.listthis.goodsmessage=data.list})getdata('new', 1).then(res => {let data = res.data.datathis.totalmessage.new.list=data.list})getdata('sell', 1).then(res => {let data = res.data.datathis.totalmessage.sell.list=data.list})}, methods: {clickchose(index) {if (this.currentindex != index) {this.currentindex = indexswitch (index) {case 0:this.goodsmessage = this.totalmessage.pop.listbreak;case 1:this.goodsmessage = this.totalmessage.new.listbreak;case 2:this.goodsmessage = this.totalmessage.sell.listbreak;}}},scrollToEnd() {console.log('到底啦');//到底之后需要加载更多的数据,将page+1,并且重新调用getdata,以及将加载到的数据添加到原来的数组中console.log(this.currentindex);if (this.currentindex == '0') {this.totalmessage.pop.page += 1let page=this.totalmessage.pop.pagegetdata('pop', page).then(res => {let data = res.data.datathis.totalmessage.pop.list.push(...data.list)//为什么这里用 this.totalmessage.pop.list.concat(data.list)就不能实现页面的增加数据this.goodsmessage=this.totalmessage.pop.list})}if (this.currentindex == '1') {this.totalmessage.new.page += 1let page=this.totalmessage.new.pagegetdata('new', page).then(res => {console.log(2);let data = res.data.datathis.totalmessage.new.list.push(...data.list)//为什么这里用 this.totalmessage.pop.list.concat(data.list)就不能实现页面的增加数据this.goodsmessage=this.totalmessage.new.list})}}},mounted(){}
这样写获取数据会特别慢
这是因为,鼠标一到底部的时候,就会触发上拉加载时间,就会触发这个函数,导致多次触发,从而多次请求,因此就会出现一直请求的原因–解决:加节流
多次用到getdata发网络请求,因此可以对其进行封装

修改后:
data() {return {HomeImageBanner: [],HomeRecomenddata: [],tabitem: ['流行', '新款', '精选'],chose:'pop',totalmessage: {'pop': {page: 0,list:[]},'new': {page:0,list:[]},'sell': {page: 0,list:[]}}}},computed: {goodsmessage() {return this.totalmessage[this.chose].list
}},created(){// request({url:'/home/multidata'}).then(res=>{console.log(res);}) 进一步封装到一个单独的文件中getmultidata().then(res => {let data = res.data.datathis.HomeImageBanner = data.banner.listthis.HomeRecomenddata=data.recommend.list})
//页面开始先把第一页的数据获取过来this.getdata('pop')this.getdata('new')this.getdata('sell')}, methods: {getdata(type) {const page=this.totalmessage[type].page+1getdata(type, page).then((res) => {this.totalmessage[type].list.push(...res.data.data.list)this.totalmessage[type].page+=1})},clickchose(index) {switch (index) {case 0:this.chose = 'pop'break;case 1:this.chose = 'new'break;case 2:this.chose = 'sell'break;
}},scrollToEnd() {//到底之后需要加载更多的数据,将page+1,并且重新调用getdata,type就是当前的chosethis.getdata(this.chose)}},
数组的拼接
concat
//concat()把两个或者多个数组拼接在一起,但是不改变已经存在的数组,并将拼接后的结果返回给一个新数组
a=[1,2,3,4]
a2=[1,2]
a.concat(a2)
console.log(a)//[1,2,3,4]
let b=a.concat(a2)
console.log(b)//[1,2,3,4,1,2]
扩展运算符…
a=[1,2,3,4]
a2=[1,2]
a.push(...a2)
console.log(a)//[1,2,3,4,1,2]
控制栏的吸顶效果
监听滚动事件
//methods中scroll(pos) {console.log(pos.y);}
实现吸顶
在应用了属性transform的父元素上,如果其拥有fixed属性的子元素,则该子元素的fixed属性将会失效,并将以其父元素为定位基准
因此这里不能直接对tab-control采用fixed的定位来实现吸顶效果

使用sticky粘滞定位:

但是其父元素(不单单指元素直系的父元素,任意引用了次组件的父组件也包括)设置了overflow属性,因此也会失效

新增一个组件放到scroll的上面,通过isshow的显示和隐藏来实现吸顶效果
//home组件
//data中isshow:false
//methods中scroll(pos) {console.log(pos.y);if (-pos.y > 598) {console.log(55);this.isshow=true}else {this.isshow=false}}.ishowtab{position:fixed;top:48px;z-index:99;
height:40px
}

问题
新增的tabcontrol里面无法实现点击

说明这两个组件里面的currentindex并不是相同的
相同的组件,但是使用两次,里面的数据不共享,(这不就是因为组件里面的data是一个函数,所以重复使用组件,里面的数据本身就不是共享的)
那么现在需要共享,可以通过vuex状态管理器,添加一个公共的currentindex
安装vuex
cnpm install vuex@3.0.1 --save
配置
//src/store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
const store = new Vuex.Store({state: {currentindex: ''},mutations: {Currentindex(state, payload) {state.currentindex = payload}}
})
export default store//src/main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
Vue.config.productionTip = false
Vue.prototype.$bus = new Vue()
new Vue({router,store,render: h => h(App),
}).$mount('#app')
TabControl使用vuex里面的currentindex
{{item}}

但是此时又有一个问题,一个tabcontrol里面的元素可以监听点击事件,而另外一个就无法监听点击事件,也不知道为什么
原因:
//之前在做tabbar组件的时候,外面是套了一层box-tabbar的;当时设置的z-index是999
//而当前tabcontrol设置的z-index是99 因此就会覆盖,显示fixed后的tabcontrol,那么久无法实现点击效果
//修改 box-tabbar属性
#box-tabbar{width:100%;height:58px;position:relative;bottom:0px;z-index:9
}
//其实,此时使用了better-scroll后,没有必要再在外面套一层box-tabbar来占位了
//修改后的TabBar
![]()
首页
![]()
分类
![]()
购物车
![]()
我的
总结:在使用z-index的时候,不要设置的太大
WebSocketClient报错
WebSocketClient.js?5586:16 WebSocket connection to 'ws://192.168.43.86:8080/ws' failed:
直接cnpm install 安装依赖,然后重新npm run serve 启动项目
项目保存后浏览器不自动刷新
//vue.config.js增加module.exports = {lintOnSave: false,chainWebpack: config => {config.resolve.alias.set('@', resolve('src')).set('assets', resolve('src/assets')).set('components', resolve('src/components')).set('network', resolve('src/network')).set('views', resolve('src/views'))},devServer: {port: 3000,open: true,hot: true}
}
keep-alive的使用

回到顶部按钮
- 回到顶部按钮的显示与隐藏
- 监听点击事件回到顶部之后,修改页面滚动的高度
//home中
import BackToTop from 'components/common/backtotop/BackToTop'components: { NavBar,HomeSwipper,HomeRecommend,Feature,TabControl,GoodsItem,BScroll,scroll,BackToTop },//data中
详情页
点击商品,跳转到详情页
配置详情页的路由
{path: '/detail',name: 'detail',component: () =>import ('views/detail/Detail')}
监听点击并跳转
methods: {goodsclick() {this.$router.push'/detail')//考虑到详情页需要返回,因此使用push
}
顶部导航栏
基本样式

如果需要对每个元素监听点击事件,那么最好使用v-for来遍历生成
{{item}}
点击回退按钮,回到首页
methods: {gotoback() {this.$router.go(-1)}
固定导航栏
#navbar{width:100%;height:48px;
border-bottom:1px solid rgba(183,183,183,0.5);display: flex;position:fixed;top:0px;z-index:10;background-color: #fff;
}
底部菜单栏
修改公共组件的显示
meta:路由元信息

不希望出现在详情页(在使用路由跳转的时候,并不是每一个跳转页面都是有导航栏的,比如跳转登录页面的时候,底部的导航栏就会小时。可以使用v-show来解决,$route.meta来改变显示还是隐藏的布尔值)
但是这部分又是加载App.vue下的
//src/router/index.js{path: '/profile',name: 'profile',component: () =>import ('views/profile/Profile'),meta: {isshow: true //需要显示底部导航栏的组件设置为true}},{path: '/detail',name: 'detail',component: () =>import ('views/detail/Detail'),meta: {isshow: false//不需要显示底部导航栏的组件组件设置为false}}
底部菜单栏显示

如果给的是精灵图,那么就当背景图片使用
客服
店铺
收藏
加入购物车
确定
import DetailTab from 'views/detail/childcomponents/DetailTab'
export default {name: 'Detail',components: { NavBar,DetailTab },
获取每个商品的iid

动态路由的使用
给组件配置动态路由
//src/router/index.js{path: '/detail/:iid',name: 'detail',component: () =>import ('views/detail/Detail'),meta: {isshow: false}}
点击图片跳转到详情页
methods: {goodsclick(item) {this.$router.push(`/detail/${item.iid}`)
}

根据iid发送axios请求
400状态码

- 请求参数个数不对
- 请求参数类型不对
this.iid = this.$route.params
//打印出来是
//{__ob__: Observer}
是一个Object类型,此案次报错
发请求
封装
//src/network/detail.js
import { request } from 'network/request.js'
export function getdetaildata(iid) {///detail?iid=1jw0sr2return request({url: '/detail',params: {iid}})
}
使用
import {getdetaildata} from 'network/detail.js'created() {this.iid = this.$route.params.iidconsole.log(this.iid);console.log(this.$route.params);getdetaildata(this.iid).then(res=>{console.log(res);})
}
问题-页面不刷新 keep-alive
原因

当在项目中引入keep-alive的时候,页面第一次进入,钩子函数的触发顺序为created–》mounted–》activated,当再次进入(前进后者后退)时,就只会触发activated
解决办法
- 把请求数据放到activated
- 把请求数据放到created阶段,但是在kepp-alive中exclude这个组件
//keep-alive写上exclude="路由名称1,路由名称2,....."

轮播图
展示
//views/detail/childcomponents/DetailSwiper
import DetailSwiper from 'views/detail/childcomponents/DetailSwiper'data() {return {navcont: ['商品', '参数', '评论', '推荐'],iid: null,swiperdata:[]}},created() {this.iid = this.$route.params.iidgetdetaildata(this.iid).then(res => {console.log(res.data)let result1 = res.data.resultthis.swiperdata = result1.itemInfo.topImagesconsole.log( this.swiperdata);})
}
问题

原因
在父组件异步请求数据时,子组件已经加载完毕,走完了子组件的生命周期,因为子组件props默认定义了一个空数组,所以子组件的整个生命周期中都是空数组,因而渲染不出来
解决方法
在对应的组件中判断数据长度,当大于0的时候,才渲染子组件
商品信息展示

获取数据
对象部分属性解构到新对象
GoodsInfo: {} //data中getdetaildata(this.iid).then(res => {console.log(res.data)let result1 = res.data.resultthis.swiperdata = result1.itemInfo.topImageslet result2=result1.itemInfothis.GoodsInfo = {title: result2.title,price: result2.price,oldprice: result2.oldPrice,discountDesc: result2.discountDesc,columns: result1.columns,services:result1.shopInfo.services}console.log(this.GoodsInfo);})
- 判断对象释放为空对象
Object.keys(GoodsInfo).length==0
展示
- 子组件
{{GoodsInfo.title}}{{GoodsInfo.price}}{{GoodsInfo.oldprice}}
//要判断有这个数据的时候,才显示{{GoodsInfo.discountDesc}}
{{item}}
{{GoodsInfo.services[2].name}}
{{GoodsInfo.services[3].name}}
- 父组件
import DetailInfo from 'views/detail/childcomponents/DetailInfo'components: { NavBar,DetailTab,DetailSwiper,DetailInfo },data() {return {navcont: ['商品', '参数', '评论', '推荐'],iid: null,swiperdata: [],GoodsInfo: {}}},

商家信息展示

商家信息的数据
shopInfo:{} //data中//created() getdetaildata中let result3=result1.shopInfothis.shopInfo = {score: result3.score,shopLogo: result3.shopLogo,name: result3.name,cFans: result3.cFans,cGoods:result3.cGoods}
位置宽度高度的盒子实现水平垂直居中
//1、
margin-left: 50%;
transform: translate(-50%,-50%)
//2、display: flex;justify-content: center;align-items: center;
展示
子组件
{{shopInfo.name}}
{{shopInfo.cFans|totalsell}}总销量
{{shopInfo.cGoods}}
全部宝贝
{{item.name}} {{item.score}} {{item.isBetter|isbert}}
进店逛逛
父组件
import DetailShopInfo from 'views/detail/childcomponents/DetailShopInfo'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo},shopInfo:{}

商品详细展示
数据获取
shopsInfo: {}let result4=result1.detailInfothis.shopsInfo = {skus: result4.detailImage[0].list,desc: result4.desc,key:result4.detailImage[0].key}
展示
子组件
{{shopsInfo.desc}}{{shopsInfo.key}}
父组件
import DetailShopsImage from 'views/detail/childcomponents/DetailShopsImage'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo,DetailShopsImage},
商品参数展示
数据获取
shopparams: {}this.shopparams = {info: result1.itemParams.info.set,rule: result1.itemParams.rule
}
样式问题
表格tr加下划线
直接在tr上面加上border-bottom是没有用的
需要给table加上border-collapse属性后,再对tr加border-bottom
table里面的td自动换行
首先必须设置td的宽度,再设置word-wrap属性
展示
子组件
{{item1}}
{{item.key}} {{item.value}}
父组件
import DetailParams from 'views/detail/childcomponents/DetailParams'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo,DetailShopsImage,DetailParams},
betterscroll 实现移动端的滚动
import BScroll from 'better-scroll'
import scroll from 'components/common/scroll/scroll'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo,DetailShopsImage,DetailParams,BScroll,scroll},
//一定要给wrapper一个高度,并且这个高度不要放在scroll这个公用组件中给定.wrapper{position: absolute;
height: calc(100% - 48px - 59px);left: 0;right: 0;top:44px;bottom: 59px;overflow: hidden;
}
商品评论
数据获取
shopcomments: {}let result5=result1.rate.list[0]this.shopcomments = {content:result5.content,created:result5.created,user: result5.user,imgs:result5.images,style:result5.style
}
对时间戳的处理 mixin
可能是一个公共的过滤方法,因此使用mixin
注意:当时间戳的长度是10位的时候,表明此时的精度为秒
当时间戳的长度是13位的时候,此时的精度为毫秒
new Date()里面的参数需要是以毫秒作为单位
// @/mixin/index.js
export const mixins = {filters: {createddate(str) {let date = new Date(str*1000)let year = date.getFullYear()let month = date.getMonth()if (month == 0) {month = 12}if (month < 10) {month = '0' + month}let datenow = date.getDate()if (datenow < 10) {datenow = '0' + datenow}return `${year} - ${month} - ${datenow}`}}
}
子组件
用户评价更多
{{shopcomments.user.uname}}{{shopcomments.content}}0">
{{shopcomments.created|createddate}}{{shopcomments.style}}
父组件
import DetailComment from 'views/detail/childcomponents/DetailComment'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo,DetailShopsImage,DetailParams,BScroll,scroll,DetailComment},

更多商品推荐
获取推荐商品的数据
recommentgood:[]getrecommend().then(res => {console.log(res.data.data);this.recommentgood=res.data.data.list})
子组件
和之前的GoodsItem组件是可以复用的,但是此时要注意数据,因为两个数据的一些内容并没有对象,需要做出一点修改(图片部分)
filters: {showimage(item) {return item.showLarge? item.showLarge.img:item.image}}
父组件
import GoodsItem from 'components/content/homegoods/GoodsItem'components: { NavBar,DetailTab,DetailSwiper,DetailInfo ,DetailShopInfo,DetailShopsImage,DetailParams,BScroll,scroll,DetailComment,GoodsItem},
创建一个表格
一个简单的表格是这么创建的:
项目 Value 电脑 $1600 手机 $12 导管 $1
设定内容居中、居左、居右
使用:---------:
居中
使用:----------
居左
使用----------:
居右
第一列 第二列 第三列 第一列文本居中 第二列文本居右 第三列文本居左
SmartyPants
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
TYPE ASCII HTML Single backticks 'Isn't this fun?'
‘Isn’t this fun?’ Quotes "Isn't this fun?"
“Isn’t this fun?” Dashes -- is en-dash, --- is em-dash
– is en-dash, — is em-dash
创建一个自定义列表
Markdown- Text-to-HTML conversion tool
Authors- John
- Luke
如何创建一个注脚
一个具有注脚的文本。1
注释也是必不可少的
Markdown将文本转换为 HTML。
KaTeX数学公式
您可以使用渲染LaTeX数学表达式 KaTeX:
Gamma公式展示 Γ(n)=(n−1)!∀n∈N\Gamma(n) = (n-1)!\quad\forall n\in\mathbb NΓ(n)=(n−1)!∀n∈N 是通过欧拉积分
Γ(z)=∫0∞tz−1e−tdt.\Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=∫0∞tz−1e−tdt.
你可以找到更多关于的信息 LaTeX 数学表达式here.
新的甘特图功能,丰富你的文章
- 关于 甘特图 语法,参考 这儿,
UML 图表
可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图:
这将产生一个流程图。:
- 关于 Mermaid 语法,参考 这儿,
FLowchart流程图
我们依旧会支持flowchart的流程图:
- 关于 Flowchart流程图 语法,参考 这儿.
导出与导入
导出
如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。
导入
如果你想加载一篇你写过的.md文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。
注脚的解释 ↩︎
相关内容
热门资讯
银河麒麟V10SP1高级服务器...
银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
【NI Multisim 14...
目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
AWSECS:访问外部网络时出...
如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
不能访问光猫的的管理页面
光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
AWSElasticBeans...
在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
Android|无法访问或保存...
这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
月入8000+的steam搬砖...
大家好,我是阿阳 今天要给大家介绍的是 steam 游戏搬砖项目,目前...
ToDesk 远程工具安装及...
目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
北信源内网安全管理卸载
北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWS管理控制台菜单和权限
要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...