当前位置:首页 > VUE

mvvm实现vue

2026-01-13 05:12:34VUE

MVVM 模式在 Vue 中的实现

MVVM(Model-View-ViewModel)是一种设计模式,Vue 框架天然支持 MVVM 模式。以下是 Vue 中实现 MVVM 的关键机制:

数据绑定(Model 与 View 的同步)

Vue 通过数据劫持和发布-订阅模式实现双向绑定:

// 数据层(Model)
const vm = new Vue({
  data: {
    message: 'Hello MVVM'
  }
})

// 视图层(View)
<div id="app">
  {{ message }} 
  <input v-model="message">
</div>

message 改变时,视图自动更新;反之用户修改输入框时,数据也会同步变更。

指令系统(View 与 ViewModel 的桥梁)

Vue 指令是特殊的 HTML 属性,实现视图与逻辑的绑定:

mvvm实现vue

<div v-if="isVisible">控制显示</div>
<ul>
  <li v-for="item in list">{{ item.name }}</li>
</ul>
<button @click="handleClick">事件绑定</button>

计算属性和侦听器(ViewModel 逻辑)

ViewModel 包含业务逻辑和状态管理:

new Vue({
  computed: {
    fullName() {
      return this.firstName + ' ' + this.lastName
    }
  },
  watch: {
    counter(newVal) {
      console.log('值变化:', newVal)
    }
  }
})

组件化(MVVM 的模块化实现)

Vue 组件是独立的 MVVM 单元:

mvvm实现vue

Vue.component('user-card', {
  props: ['user'],  // 外部数据(Model)
  template: `       // 视图(View)
    <div class="card">
      <h2>{{ user.name }}</h2>
    </div>
  `,
  methods: {        // 逻辑(ViewModel)
    sendMessage() {
      // ...
    }
  }
})

响应式原理(底层实现)

Vue 使用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)实现数据响应:

// 简化的响应式实现
function defineReactive(obj, key) {
  let value = obj[key]
  Object.defineProperty(obj, key, {
    get() {
      return value
    },
    set(newVal) {
      value = newVal
      updateView() // 触发视图更新
    }
  })
}

生命周期钩子(ViewModel 控制流)

Vue 提供生命周期函数管理 MVVM 流程:

new Vue({
  created() {
    // 数据已初始化,DOM未生成
  },
  mounted() {
    // DOM已挂载
  },
  beforeUpdate() {
    // 数据变化前的钩子
  }
})

通过以上机制,Vue 实现了:

  • Model:普通 JavaScript 对象
  • View:模板/DOM 渲染
  • ViewModel:Vue 实例处理绑定和逻辑

标签: mvvmvue
分享给朋友:

相关文章

vue实现飘窗原理

vue实现飘窗原理

vue实现飘窗原理 飘窗效果通常指在页面上悬浮显示的弹窗或通知,跟随页面滚动或固定在某个位置。Vue实现这一效果主要依赖组件化开发、CSS定位和动态数据绑定。 组件结构设计 创建一个独立的Vue组…

vue无限菜单怎么实现

vue无限菜单怎么实现

实现 Vue 无限菜单的方法 递归组件实现嵌套菜单 使用 Vue 的递归组件特性可以轻松实现无限级嵌套菜单。通过组件调用自身的方式处理嵌套数据。 <template> <ul&…

vue里实现增删改查

vue里实现增删改查

在Vue中实现增删改查 数据初始化 在Vue组件的data中定义初始数据和表单绑定的变量: data() { return { items: [ { id: 1, name:…

vue实现下拉框删除

vue实现下拉框删除

Vue 实现下拉框删除功能 在Vue中实现下拉框的删除功能通常涉及以下步骤: 数据绑定与渲染 在Vue组件中定义数据数组用于存储下拉框选项: data() { return { op…

用vue实现滑动输入条

用vue实现滑动输入条

使用 Vue 实现滑动输入条 使用原生 HTML5 input range 实现 在 Vue 模板中直接使用 <input type="range">,通过 v-model 绑定数据:…

vue实现单点

vue实现单点

Vue 实现单点登录(SSO)方案 单点登录(SSO)允许用户在多个相关但独立的系统中使用同一组凭证登录。以下是基于 Vue 的实现方案: 基于 OAuth2/OpenID Connect 的实现…