首页 > 其他分享 >vue(八)头条项目-cnblog

vue(八)头条项目-cnblog

时间:2023-02-04 11:36:07浏览次数:46  
标签:vue return savedPosition less 组件 import cnblog 头条

vue(八)头条项目

1. 项目结构

  • 根据vue create my-toutiao创建项目
  • 勾选上router

2. 生成的项目中的view文件夹和compoent文件夹

  • 都是用于存放组件
  • view中的组件是通过路由来切换的
  • compoent文件夹中的组件是可以复用的UI结构

3. 将axios封装成一个js文件,向外提供方法

  • src目录下建立utils文件夹(工具性质的文件放在这里)
  • 建立发请求的包request.js
import axios from 'axios'

const request = axios.create({
  baseURL: 'https://www.escook.cn'
})

export default request

4. 项目使用vant2的组件进行开发

  • 使用哪个组件,查阅文档进行开发

  • 导入所有组件(main.js)

import Vant from 'vant'
import 'vant/lib/index.less'

5.eslint 的检查规则

rules: {
    'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
    'space-before-function-paren': 0
  }

6.将ajax请求文章列表封装成一个api

  • 在src目录下新建api文件夹,新建articleApi.js
import request from '@/utils/request'

// ajax请求函数api

export const getArticleApi = function(_page, _limit) {
  // 发起ajax请求获取文章列表,返回的值为promise对象
  return request.get('/articles', {
    params: {
      _page,
      _limit
    }
  })
}

7.定制vant2主题

7.1 第一种方法(不推荐)

  • main.js中
  • 导入less,而不是
import 'vant/lib/index.less'
  • 在vue.config.js中配置
// 直接覆盖css的样式
module.exports.css = {
  loaderOptions: {
    less: {
      // 若 less-loader 版本小于 6.0,请移除 lessOptions 这一级,直接配置选项。
      lessOptions: {
        modifyVars: {
            // 要修改的样式
          'nav-bar-background-color': 'green'
        }
      }
    }
  }
}

7.2 第二种方式

  • 在src目录下新建一个theme.less文件,通过这里面的配置覆盖原有组件的默认配置
// 用于覆盖vant2组件的原有样式

// 定义导航栏背景颜色

@blue:#0077ff;

// 覆盖nav-bar的背景颜色

@nav-bar-background-color:@blue;
  • 在vue.config.js中配置
// theme.less文件路径
const path = require('path')

const themePath = path.join(__dirname, './src/theme.less')

// 直接覆盖css的样式
module.exports.css = {
  loaderOptions: {
    less: {
      // 若 less-loader 版本小于 6.0,请移除 lessOptions 这一级,直接配置选项。
      lessOptions: {
        modifyVars: {
          // 'nav-bar-background-color': 'green'

          // 模板字符串拼接
          hack: `true; @import "${themePath}";`
        }
      }
    }
  }
}

8.切换页面时,保持组件滚动原来的位置

  • 使用lodash来节流
  • 使用vue-router提供的组件滚动事件来保存滚动位置
  • 使用keep-alive时组件在切换时不被销毁(而是激活和失活)
  • 使用生命周期函数来监听滚动事件,从而记录位置

vue-router提供的滚动组件

 const scrollBehavior = function (to, from, savedPosition) {
        // savedPosition 会在你使用浏览器前进或后退按钮时候生效
       // 也就是如果触发了hash地址路由的变化,就会触发
       if (savedPosition) {
            return savedPosition
          } else {
            // 如果不是通过上述行为切换组件,就会让页面回到顶部
            return {x: 0, y: 0}
        }
    }
 
 
 // 完整的代码
 
 const router = new VueRouter({
  routes: [
    { path: '/', component: Home, meta: { isRecord: true, top: 0 } },
    { path: '/user', component: User }
  ],
  scrollBehavior(to, from, savedPosition) {
    // return 期望滚动到哪个的位置
    if (savedPosition) {
      return savedPosition
    } else {
      return { x: 0, y: to.meta.top || 0 }
    }
  }
})
  • 使文章列表保存活性(app.vue)
<keep-alive include="Home">
      <router-view></router-view>
    </keep-alive>
  • home.vue监听滚动事件,记录位置
activated() {
    fn = this.recordTopHandler()
    window.addEventListener('scroll', fn)
  },
  deactivated() {
    window.removeEventListener('scroll', fn)


// 导入lodash来节流
import _ from 'lodash'
let fn = null
recordTopHandler() {
      return _.debounce(
        () => {
          this.$route.meta.top = window.scrollY
          console.log(this.$route)
        },
        50,
        { trailing: true }
      )
    }
  • debounce参数说明

标签:vue,return,savedPosition,less,组件,import,cnblog,头条
From: https://www.cnblogs.com/lingxin1123/p/17091143.html

相关文章

  • Vue(六)-cnblog
    Vue(六)1.前端路由hash值与组件之间的对应关系hash值代表url地址中#号后面的内容,不同的hash地址对应不同的组件图解1.2简易路由<template><divclass="ap......
  • vue3
    Vue3的特性1.新的构建工具vite1.2基本使用vite基本使用:创建项目npminitvite-app项目名称或者yarncreatevite-app项目名称安装依赖npmi或者yarn启......
  • 1、配置vue项目支持es6语法-cnblog
    一些注意点1、配置vue项目支持es6语法在package.json文件中新增type节点package.json{"type":"module",}2.Vuex的挂载Vue.use方法调用了一个install的......
  • vue3 与vue2的区别-cnblog
    vue3与vue2的区别1.template节点vue2只允许一个根节点vue3允许多个根节点2.创建工具vue3:使用vite,也可使用vue-clivue2:使用vue-clivite创建3.调试工......
  • vue入门(二)-cnblog
    vue入门(二)1.过滤器一个函数在插值表达式中使用,对插值的值进行再处理{{username|toUpCase}}示例<!DOCTYPEhtml><htmllang="en"><head><metacharset......
  • vue入门(一)-cnblog
    vue入门(一)1.什么是vue一个框架(现有的解决方案)构造用户界面(操作html页面的内容)2.vue的特性数据驱动视图页面所依赖的数据发生变化时,vue会监听数据的变化,重新......
  • VUE学习笔记DAY01-cnblog
    webpack的使用(配合ppt)1.webpack前端工程化的具体解决方案作用代码压缩混淆处理浏览器端的JavaScript兼容性性能优化1.1基于webpack实现隔行变色npmij......
  • Vue(四)-cnblog
    Vue(四)1.生命周期一个组件从(创建->运行->销毁的整个阶段)生命周期函数:vue框架的内置函数,会随着组件的生命周期,自动按次序执行注意点生命周期强调整个时间段......
  • Vue(三) (Vue-cli)-cnblog
    Vue(三)(Vue-cli)1.单页面应用程序(SPA)一个web网站只有唯一的html页面2.vue-cli简化了webpack创建工程化Vue项目的全过程不需要自己去配置webpack,只需专心写页面2.......
  • vue页面加载闪烁的问题以及解决方案
    一、原因:问题:当我们打开Vue页面的时候,如果弱网环境,会出现一个闪烁的效果下图:加载闪烁问题效果  原因:因为在浏览器中先执行html代码,先渲染Dom,然后再执行JavaScript代......