«

手写实现一个简单的MVVM框架

时间:2023-6-1 00:01     作者:六思逸     分类: JavaScript


什么是MVVM?

MVVM是一种流行的软件架构模式,适用于各种类型的应用程序,包括前端应用程序。它主要由三部分组成:Model(数据)、View(视图)和ViewModel(视图模型)。在前端框架中,如Angular、Vue和React中,使用的是虚拟DOM操作,而不是直接操作DOM。ViewModel可以监听模型的变化,同时也可以监听视图上输入框变化,但使用的并不一定是事件监听器。

MVVM模式的目的是将数据、界面和交互行为分隔开来,从而产生高可维护性和可扩展性的应用程序代码。通过使用MVVM,我们可以更好地组织代码,并将它们分离到单独的责任区域中。

自己实现MVVM

<!-- 视图层 V,用 h1 和 span 显示数据,input 用于设置数据 -->
<h1>显示数据:<span>****</span></h1>
<input type="text" id="username">

<script>
    // 模型层 M,定义数据
    let obj = { name: '六思逸' }

    // 定义数据渲染方法,DOM操作将模型的数据渲染到视图
    function render() {
        document.querySelector('span').textContent = obj.name; // 将obj的数据显示在span中
        document.querySelector('#username').value = obj.name; // 将obj的数据显示在input中
    }
    render(); // 页面载入时要先渲染一次

    console.dir(document.querySelector('span')) // 打印出span的DOM对象方便调试

    // 模型层 M,挟持数据实现数据绑定
    let name = obj.name; // 把obj的name属性值保存在一个变量里
    Object.defineProperty(obj, 'name', { // 为obj的name属性定义一个数据访问器
        get() { // 监听obj的name属性的get方法
            return name; // 取值时直接返回name
        },
        set(v) { // 监听obj的name属性的set方法
            name = v; // 将v的值存到变量中
            render(); // 数据发生变化时重新渲染视图
        },
    });

    // 控制器层 C,视图层 V 到模型层 M,监听 input 的输入事件,自动把输入框的值赋给数据模型
    document.querySelector('#username').oninput = function () {
        obj.name = this.value; // 输入框的值赋给obj的name属性,触发数据绑定
    }
</script>

标签: JavaScript 前端 MVVM 数据绑定 框架实现

版权所有:六思逸
文章标题:手写实现一个简单的MVVM框架
除非注明,文章均为 六思逸 原创,转载请注明作者和出处 六思逸

扫描二维码,在手机上阅读

推荐阅读: