项目作者: ckangwen

项目描述 :
vue全家桶源码学习,将vue的computed、watch、component插件化
高级语言: TypeScript
项目地址: git://github.com/ckangwen/like-vue.git
创建时间: 2020-09-16T09:00:12Z
项目社区:https://github.com/ckangwen/like-vue

开源协议:

下载


介绍

本项目是在阅读Vuejs(2.6.12)源码以及周边库的过程中对Vue的个人实现。

Vue

功能实现

  • 模板语法
  • 计算属性
  • 侦听器
  • class与style绑定
  • 事件功能
  • 组件功能
  • 插槽
  • 动态组件&异步组件
  • 渲染函数
  • 过滤器
  • 指令
  • 插件
  • mixins
  • 过渡&动画


为了更清晰地了解vue的各个功能,本项目将vue的各个功能最大化的抽离出来,设计为一个独立的插件。例如其中的计算属性、侦听器和组件功能。

其核心功能的实现仅包括了双向绑定、数据渲染、原生事件处理及其部分全局API。如需额外的功能需要使用Vue.use()进行加载。

VueRouter

功能实现

  • 导航守卫
  • [X] 路由匹配
  • HTML5 History模式
  • 路由组件传参
  • 嵌套路由

VueX

功能实现

  • 单一状态数
  • store模块的命名空间
  • vuex辅助函数

案例演示

  1. import { Vue } from '@/core/Vue'
  2. import computedPlugin from '@/plugins/computed';
  3. Vue.use(computedPlugin)
  4. new Vue({
  5. data() {
  6. return {
  7. count: 0
  8. }
  9. },
  10. computed: {
  11. evenOrOdd() {
  12. return this.count % 2 === 0 ? 'even' : 'odd'
  13. }
  14. },
  15. methods: {
  16. increment() {
  17. this.count++
  18. },
  19. decrement() {
  20. this.count--
  21. },
  22. },
  23. render(h: Function) {
  24. const { count, evenOrOdd, increment, decrement } = this
  25. return h(
  26. 'div', [
  27. h('p', `Clicked: ${count} times, count is ${evenOrOdd}.`),
  28. h('button', { on: { click: increment } }, '+'),
  29. h('button', { on: { click: decrement } }, '-'),
  30. ]
  31. )
  32. },
  33. beforeCreate() {
  34. console.log('beforeCreate');
  35. },
  36. created() {
  37. console.log('created');
  38. }
  39. })
  40. .$mount('#app')