当前位置:首页 > JavaScript

js实现mvc

2026-03-15 05:24:59JavaScript

MVC 模式简介

MVC(Model-View-Controller)是一种软件架构模式,将应用程序分为三个核心组件:模型(Model)处理数据和业务逻辑,视图(View)负责展示数据,控制器(Controller)处理用户输入并协调模型和视图。

实现 MVC 的步骤

模型(Model) 模型负责管理数据和处理业务逻辑。可以创建一个独立的类或对象来封装数据操作。

class Model {
  constructor(data = {}) {
    this.data = data;
  }

  setData(key, value) {
    this.data[key] = value;
    this.notifyChange();
  }

  getData(key) {
    return this.data[key];
  }

  notifyChange() {
    // 通知视图更新
    if (this.onChange) {
      this.onChange(this.data);
    }
  }
}

视图(View) 视图负责渲染数据到用户界面,通常是 DOM 操作。

class View {
  constructor(elementId) {
    this.element = document.getElementById(elementId);
  }

  render(data) {
    this.element.innerHTML = `
      <div>Name: ${data.name}</div>
      <div>Age: ${data.age}</div>
    `;
  }
}

控制器(Controller) 控制器负责处理用户输入,更新模型并通知视图。

class Controller {
  constructor(model, view) {
    this.model = model;
    this.view = view;

    // 绑定模型变更时的回调
    this.model.onChange = (data) => this.view.render(data);
  }

  handleInputChange(key, value) {
    this.model.setData(key, value);
  }
}

完整示例

以下是一个简单的 MVC 实现示例,模拟用户输入更新视图:

js实现mvc

// 初始化模型、视图和控制器
const model = new Model({ name: "John", age: 25 });
const view = new View("app");
const controller = new Controller(model, view);

// 首次渲染
view.render(model.data);

// 模拟用户输入更新数据
setTimeout(() => {
  controller.handleInputChange("name", "Alice");
}, 2000);

setTimeout(() => {
  controller.handleInputChange("age", 30);
}, 4000);

关键点

  • 数据绑定:模型通过回调(如 onChange)通知视图更新。
  • 职责分离:模型不直接操作视图,控制器负责协调。
  • 扩展性:可以轻松添加新功能(如多个视图监听同一模型)。

进阶优化

  • 使用观察者模式(Observer)实现更灵活的数据绑定。
  • 结合框架(如 React、Vue)实现更高效的视图更新。
  • 引入路由(Router)处理多页面场景。

标签: jsmvc
分享给朋友:

相关文章

js实现瀑布流

js实现瀑布流

实现瀑布流布局 瀑布流布局是一种常见的网页布局方式,常用于图片展示、商品列表等场景。以下是使用 JavaScript 实现瀑布流布局的几种方法。 纯 JavaScript 实现 通过计算元素的位置和…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…

js实现定位

js实现定位

使用Geolocation API获取当前位置 在JavaScript中,可以通过浏览器内置的Geolocation API获取用户的地理位置信息。该API需要用户授权才能访问位置数据。 if (n…

js实现上传图片

js实现上传图片

使用HTML5的File API实现图片上传 HTML5的File API允许通过JavaScript访问用户选择的文件。需要创建一个文件输入元素,并监听其change事件。 <input t…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…

js实现左右滑动

js实现左右滑动

实现左右滑动的 JavaScript 方法 监听触摸事件 通过 touchstart、touchmove 和 touchend 事件来检测用户的手势操作。记录触摸的起始位置和移动距离,判断滑动方向。…