最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Vue实现个人博客

    正文概述 掘金(Chenyjoe)   2021-07-28   608

    一、首页

    效果展示

    Vue实现个人博客 在连数据库前可用JSONplaceholder的数据接口用假数据来测试,先将整体样式确定。确定好页面后再连接数据库的真数据。这里使用是数据库是firebase(使用时要注意打开数据库可写和可读)

    标题的彩虹色展示

    在main.js中全局自定义指令

    Vue.directive('tit',{
    	bind(el){
    		el.style.color='#'+Math.random().toString(16).slice(2,8);
    	}
    })
    

    定义完后在需要使用的标签加上 v-tit 即可

     博客标题字母大写以及博客预览内容限制并在结尾加上“...”

    在main.js中全局定义过滤器

    //标题大写
    Vue.filter('toUppercase',function(value){
    	return value.toUpperCase()
    })
    //内容限制
    Vue.filter('snippet',function(value){
    	return value.slice(0,100)+"..."
    })
    
    分页的实现

    页面创建时,在生命周期函数created()中获取数据库数据并且分页。这里的分页样式是引用的elementUI中的分页组件。分页在主要思路如下: (参考自blog.csdn.net/illusion_me…)

    //变量
     data() {
        return {
          // 假设这是后台传来的数据来源
          data: [],
          // 所有页面的数据
          totalPage: [],
          // 每页显示数量
          pageSize: 5,
          // 共几页
          pageNum: 1,
          // 当前显示的数据
          dataShow: "",
          // 默认当前显示第一页
          currentPage: 0
        };
      },
    
    //计算页数
        // 这里简单模拟一下后台传过来的数据
        for (let i = 0; i < 601; i++) {
          this.data.push({ name: "liu" ,look:"very handsome"});
        }
        // 根据后台数据的条数和每页显示数量算出一共几页,得0时设为1 ;
        this.pageNum = Math.ceil(this.data.length / this.pageSize) || 1;
    
    //根据页数存每一页内容
       for (let i = 0; i < this.pageNum; i++) {
          // 每一页都是一个数组 形如 [['第一页的数据'],['第二页的数据'],['第三页数据']]
          // 根据每页显示数量 将后台的数据分割到 每一页,假设pageSize为5, 则第一页是1-5条,即slice(0,5),第二页是6-10条,即slice(5,10)...
          this.totalPage[i] = this.data.slice(this.pageSize * i, this.pageSize * (i + 1))
        }
       // 获取到数据后显示第一页内容
        this.dataShow = this.totalPage[this.currentPage];
    
    //翻页
        // 上一页和下一页
        // 下一页
        nextPage() {
          if (this.currentPage === this.pageNum - 1) return ;
          this.dataShow = this.totalPage[++this.currentPage];
        },
        // 上一页
        prePage() {
          if (this.currentPage === 0) return ;
          this.dataShow = this.totalPage[--this.currentPage];
        }
    

    二、写博客页面

    效果展示

    Vue实现个人博客

    markdown编辑器

    1、安装

    2、全局引入

    import Vue from 'vue'
    import mavonEditor from 'mavon-editor'
    import 'mavon-editor/dist/css/index.css'
    // use
    Vue.use(mavonEditor)
    

    3、使用

    <!-- :ishljs="true" 代码高亮  -->
    <mavon-editor v-model='blog.preview' :ishljs="true" @change='updateDoc'></mavon-editor>
    
    updateDoc(value, render) {
    				// render 为 markdown 解析后的结果
    				this.blog.content = render;
    			}
    

    4、添加博客时加上当时的日期,并且格式化 在main.js中全局定义函数获取当时的时期并且格式化

    Vue.prototype.getNowFormatDate=function(){
    	var date = new Date();
    	var seperator1 = "-";
    	var year = date.getFullYear();
    	var month = date.getMonth() + 1;
    	var strDate = date.getDate();
    	if (month >= 1 && month <= 9) {
    		month = "0" + month;
    	}
    	if (strDate >= 0 && strDate <= 9) {
    		strDate = "0" + strDate;
    	}
    	var currentdate = year + seperator1 + month + seperator1 + strDate;
    	return currentdate;
    }
    

    三、搜索功能

    可根据博文的标题和发布日期搜索 首页点击搜索按钮触发

    sousuo(){
    				var fb=[];
    				if(this.selectTime!=''){
    					for(let i=0;i<this.blogs.length;i++){
    						if(this.blogs[i].time==this.selectTime){
    							fb.push(this.blogs[i])
    						}else{
    							continue
    						}
    					}
    				}else{
    					fb=this.blogs
    				}
    				
    				this.filteredBlogs=fb.filter((blog)=>{					
    					return blog.title.match(this.search)
    				})
    				this.$router.push({
    					path:'/search',
    					query:{
    						filteredBlogs:this.filteredBlogs,
    						search:this.search,
    						blogs:this.blogs,
    						selectTime:this.selectTime,
    						
    					}
    					})
    			},
    

    搜索页面绑定计算属性:要展示的博客在filteredBlogs()返回的数组中遍历

    computed:{
    			filteredBlogs(){
    				var fb=[];
    				if(this.selectTime!=''){
    					for(let i=0;i<this.blogs.length;i++){
    						if(this.blogs[i].time==this.selectTime){
    							fb.push(this.blogs[i])
    						}else{
    							continue
    						}
    					}
    				}else{
    					fb=this.blogs
    				}
    				return fb.filter((blog)=>{
    					return blog.title.match(this.search)
    				})
    				
    			}
    		}
    

    编辑页面和详细博客的页面大致和以上相同

    具体代码: 【 gitee 】:gitee.com/chenyjoe/vu… 【github】:github.com/chenyjoe/vu…


    起源地下载网 » Vue实现个人博客

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元