美文网首页
前端 MVC 与模块化

前端 MVC 与模块化

作者: 千反田爱瑠爱好者 | 来源:发表于2018-08-14 16:45 被阅读61次

模块化

将页面中各部分执行逻辑抽取出来单独写在一个js文件模块。

模块调用

  • 在模块中不要使用var声明变量(会变量提升为全局变量),模块之间会相互影响;
  • 可以封装为立即执行函数:!function(){}.call()(会改变函数返回值,但没什么关系);
  • 如模块之间要共享变量,可以把变量设置在window,或使用闭包(必然跟立即执行函数一起使用):
!function() {

    // 1、把变量设置在window
    var name = window.name = 'ywh'      

    // 2、把闭包函数设置在window(隐藏细节,使person不可以直接访问)
    var person = {
        name: 'ywh',
        age: 18
    }
    window.ywhGroupUp = function() {    
        person.age += 1
        return person.age
    }
}.call()

MVC

MVC
MVC
  • MVC即根据Model(模型,一般是AJAX),View(视图,DOM API),Controller(控制器,数据结构、算法和面向对象)三个层面来组织代码;
  • 根据功能划分:
    • 用户访问网站,与MVC中的View交互,包括获取信息和提交数据等;View接收到用户请求,通知Controller执行相应的逻辑,Controller也可以把内容更新到视图;
    • Controller调用Model的方法,向服务端请求获取数据,Model把结果(数据、请求信息)返回给Controller做进一步处理;
    • Model负责向服务端发起HTTP请求获取并接收响应,把响应返回给Controller。

View:在js模块中获取页面元素(如最外层div)命名为view,封装render方法

var view = document.querySelector('#topNavBar')
// ...

Controller:把对模块中元素的操作函数封装在controller对象中。

var controller = {
    view: null,
    init: function(view) {          // 初始化
        this.view = view
        this.bindEvents()
        // 其他初始化操作
    }
    bindEvents: function() {        // 绑定事件
        let logo = view.querySelector('.logo')
        window.addEventListener('scroll', function(x){
            if (window.scrolly > 0) {
                this.active()
            }
            else {
                this.deactive()
            }
            this.view.classList.add('test')
        }.bind(this))   // 绑定this为外部(即controller)的this
        // 也可以改为箭头函数,箭头函数中的this即为外部的this
    },
    active: function() {            // 激活
        this.view.classList.add('test')
    }
    deactive: function() {          // 不激活
        this.view.classList.remove('test')
    }
}
controller.init(view)

Model:抽取Controller中涉及CRUD的函数放在model。

最后封装到立即执行函数中构成一个模块:

!function(){
    var model = // ...
    var view = // ...
    var controller = // ...
    controller.init(view)
}.call()

相关文章

  • 前端 MVC、MVVM 与面向对象

    按照《前端MVC与模块化》中的方法把各模块代码分成MVC三层,仍然存在一些问题,如公共方法无法复用、每个模块MVC...

  • web前端学习计划

    前端学习的知识路线:原生js,使用jQuery及编写jQuery扩展,前端模版,前端mvc,模块化开发,mvvm开...

  • 前端 MVC 与模块化

    模块化 将页面中各部分执行逻辑抽取出来单独写在一个js文件模块。 模块调用 在模块中不要使用var声明变量(会变量...

  • 模块化开发 MVP View Presenter Model 与MVC区别: 视图层与业务层无直...

  • 前端模块化(requirejs)

    前端模块化 什么是前端模块化 将代码依据不同功能,或者职责进行模块的划分,就称为前端模块化 模块化的好处 结构更轻...

  • AngularJS学习笔记(一)模块、作用域、双向数据绑定

    AngularJS四大核心特性:MVC、模块化、指令系统、双向数据绑定。 MVC 好处:职责清晰,代码模块化,可复...

  • 模块化与 MVC

    一、代码模块化 定义模块化就是把一个复杂的代码段拆分成若干个小片段(模块),使实现不同功能的代码区分开,然后就可以...

  • Get Strated of React

    痛点:前端html的开发越来越复杂,没有可重用和模块化编程 React不是一个完整的MVC,MVVM框架,它只负责...

  • Vue

    Node.js(后端)中的MVC与前端中的MVVM之间的区别 MVC是后端的分层开发概念,MVVM是前端视图层的概...

  • webpack基础笔记

    webpack基础 1.前端工程化 实际的前端开发: 模块化:(js的模块化,css的模块化,资源的模块化) 组件...

网友评论

      本文标题:前端 MVC 与模块化

      本文链接:https://www.haomeiwen.com/subject/ckmvbftx.html