Javascript40行代码实现基础MVC原理。

15 篇文章 0 订阅
1 篇文章 0 订阅
该文章展示了MVVM架构的一个简单实现,通过JavaScript创建了Model、View和Controller三个类,实现了数据绑定和实时更新视图的功能。用户在input输入时,控制器监听到变化,更新数据模型,进而自动刷新页面上的p标签内容。
摘要由CSDN通过智能技术生成

参考文章

M数据层 V视图 C控制器

  1. 先来一个dom结构,一个p标签,用来展示输入的内容,一个input标签,用来输入内容⬇️
<p id="mvcp"></p>
<input id="mvc"></input>
  1. 创建Model类,有value属性和setValue的方法
// Model
function Model(){
  // 定义数据模型,包括值和修改值的方法
  this.inputValue = 'Look Me';
  this.setInputValue = value=>this.inputValue=value;
}
  1. 创建View类,绑定dom节点,添加input的监听事件,渲染内容的方法
// View
function View(controller){
 // 获取需要绑定的dom
 const inputNode = document.getElementById('mvc');
 const pNode = document.getElementById('mvcp');
 // 监听dom的change事件,调用控制器的change事件
 inputNode.addEventListener('input',(e)=>{
     controller.onChaneg(e);
     this.render()
 });
 // render
 this.render = ()=>{
     pNode.innerHTML=controller.getValue()
 }
}
  1. 创建Controller类,有获取model及setMode的方法
// Controller
function Controller(model){
    // get Value
    this.getValue = ()=>{
        return model.inputValue
    }
    // onChang
    this.onChaneg = (event)=>{
        model.setInputValue(event.target.value)
	}
}
  1. 分别创建M、V、C对象,并render
const model = new Model()
const controller = new Controller(model)
const view = new View(controller)
view.render()

看下效果
在这里插入图片描述

完整代码

<!--
 * @Author: atwLee
 * @Date: 2023-04-12 21:30:09
 * @LastEditors: atwLee
 * @LastEditTime: 2023-04-12 21:30:42
 * @Description: 
 * @FilePath: /ant-design/Users/atwlee/Downloads/index.html
-->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
    <p id="mvcp"></p>
    <input id="mvc"></input>
    <script type="text/javascript"> 
        // Model
        function Model(){
            // 定义数据模型,包括值和修改值的方法
            this.inputValue = 'Look Me';
            this.setInputValue = value=>this.inputValue=value;
        }
        // View
        function View(controller){
            // 获取需要绑定的dom
            const inputNode = document.getElementById('mvc');
            const pNode = document.getElementById('mvcp');
            // 监听dom的change事件,调用控制器的change事件
            inputNode.addEventListener('input',(e)=>{
                controller.onChaneg(e);
                this.render()
            });
            // render
            this.render = ()=>{
                pNode.innerHTML=controller.getValue()
            }
        }
        // Controller
        function Controller(model){
            // get Value
            this.getValue = ()=>{
                return model.inputValue
            }
            // onChang
            this.onChaneg = (event)=>{
                model.setInputValue(event.target.value)
            }
        }
        const model = new Model()
        const controller = new Controller(model)
        const view = new View(controller)
        view.render()
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值