美文网首页
使用Vue.js搭建仿cnode社区

使用Vue.js搭建仿cnode社区

作者: YukiWeng | 来源:发表于2019-11-18 15:33 被阅读0次

近期用Vue.js搭了一个仿cnode的社区,中间遇到一些坑,故把一些注意事项记录下来。
预览链接:https://yukiweng.github.io/cnode/dist/index.html

将整个项目结构拆分为以下组件:

  • header 头部
  • PosList 文章列表
  • Article 文章详情页
  • SlideBar 侧边栏
  • UserInfo 用户信息
  • Pagination 分页

请求数据相关

  1. 使用axios发请求,项目安装axios
    全局注册在Vue原型上
    Vue.prototype.$http=axios
//发请求带参数时,需用params:{}包裹起来
this.$http.get('/',{params:{}})
  1. 实例加载完成前请求数据 beforeMount
    页面渲染时,某些元素需要动态绑定,如 <img :src="..."> ,否则获取不到更新的数据

  2. 报错:Cannot read property 'loginname' of undefined
    异步请求获取数据时,由于数据时异步获取的,所以一开始是没有该数据属性的
    我将获取的数据放入一个对象dataList,里面的数据类似 {author:{avatar_url:"",logginame:""}}
    在这个数据中,由于初始值dataList.author是一个空对象(undefined),
    author.loginname相当于undefined.loginname,故报错。
    (后来异步请求拿到数据就渲染了,页面看着是正常的,但控制台的报错会影响之后的操作)
    解决方法两种:
    ① 在标签上加 v-if="dataList.author"
    ② 在数据未加载完成前,整个页面只渲染一个loading.gif


路由跳转

  1. 路由跳转传递多个参数,用 & 拼接,如
path:'/topic/:id&author=:name'
// /:第一个参数&自定义变量名=:第二个参数
// 配置路由 
 name: 'article',
  path: '/topic/:id&author=:name',
  components: {
    main: Article,
    slideBar: SlideBar
  }

// A组件中跳转
<router-link :to="{name:'article',params:{id:item.id,name:item.author.loginname}}">
</router-link>

// B组件获取参数
this.$route.params.id
this.$route.params.name
  1. 假如要跳转的路由和当前路由是同一个,
    虽然传递的参数不一样,但浏览器默认为同一路由,页面不会重新渲染。
    此时,可用watch方法:观察Vue实例上的数据变动,只要指定的数据改变就会执行预定的函数。
// 监视 $route ,接的参数为新值和旧值,当值发生改变(自动检测),执行里面的方法
watch:{
    $route:function(to,from){ 
        this.getData()
    }
}

其他

  1. 过滤器的代码顺序:
    main.js中,我原本先写Vue实例,再写过滤器,
    结果,在子组件中,第一次加载OK,但页面刷新就报错:
    [Vue warn]: Failed to resolve filter: formatDate
    解决方法:
    应该先全局注册过滤器,写在上面,再写vue实例
    Vue.filter()
    new Vue()

  2. 上传github,因路径问题无法预览
    解决方法:

// 先打包
npm run build // 自动创建dist文件夹

// config 路径下的index.js ,修改build配置
// assetsPublicPath: '/'  绝对路径改相对路径
assetsPublicPath: './'  
// productionSourceMap:true 改为 
productionSourceMap: false

相关文章

网友评论

      本文标题:使用Vue.js搭建仿cnode社区

      本文链接:https://www.haomeiwen.com/subject/dtqbictx.html