zoukankan      html  css  js  c++  java
  • 通过TodoList案例对比Vue.js的MVVM设计模式与JQuery的MVP设计模式

    Vue MVVM设计模式:

    在使用vue进行编程时,不会再涉及到DOM的操作,取而代之的是修改数据层,当把数据进行变更的时候,vue之中它的底层会自动的根据数据的不同帮助我们去重新渲染页面。

    编码时不需要关注VM层是如何实现的,它是vue内置的,只需要关注M层(模型层)和V层(视图层)。

    使用MVVM设计模式进行编码时,编码的重点一部分在于视图层,一部分在于模型层。

    data:指M层。

    <div>模板标签:指V层。

    vue:自身实现VM层。vue会监听到数据变了会帮你改变视图层,vue也能监听到视图层有一些事件触发然后帮助你通过VM这一层去调用一些你写的逻辑代码,通过这些代码改变了M层的数据,当数据发生变化时,VM层又会自动的把数据的变化映射到视图层的上面来。

    VM层的实现:引入虚拟DOM+ES5的一个核心API:Object.defineProperty(),来实现VM层的架构体系。

    MVVM设计模式的好处:

    开发时只需要关注M层的开发。代码会得到显著的减少。

    MVVM里最重的一层是M层。

    vue是面向数据进行编程。

    JQuerty:MVP设计模式: 

    M(model):模型层(数据层)(弱)
    V(view):视图层,页面上的DOM展示
    P(presenter):控制器(最核心的一层),视图和模型层的中转站,大量代码做DOM的操作,模型层非常弱。视图发生改变点击提交时控制器会去执行,控制器里负责了所有的业务逻辑,控制器可以去调模型层去发Ajax请求,控制器通过DOM操作再改变视图层。
    在大型项目中,JQuery编写的百分之七八十以上的代码都在操作DOM。
    JQuery是面向DOM在做开发。

    vue实现todolist:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8     <title>todolist</title>
     9     <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    10 </head>
    11 
    12 <body>
    13     <div id="app">
    14         <!-- v-model:数据的双向绑定 -->
    15         <!-- 把input里的value值和data里的value值做了绑定 -->
    16         <input type="text" name="" id="" v-model="inputValue">
    17         <!-- v-on:绑定事件 -->
    18         <button v-on:click="handleBtnClick">提交</button>
    19         <ul>
    20             <!-- item指list中的每一项(循环过程的每一项内容) -->
    21             <!-- v-for指令:循环数据 -->
    22             <li v-for="item in list">{{item}}</li>
    23         </ul>
    24     </div>
    25 
    26     <script>
    27         var app = new Vue({
    28             el: '#app',
    29             data: {
    30                 list: [],
    31                 inputValue: ''
    32             },
    33             methods: {
    34                 handleBtnClick: function() {
    35                     this.list.push(this.inputValue);
    36                     this.inputValue = '';
    37                 }
    38             }
    39         })
    40     </script>
    41 </body>
    42 
    43 </html>

    jquery实现todolist:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 
     4 <head>
     5     <meta charset="UTF-8">
     6     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     7     <meta http-equiv="X-UA-Compatible" content="ie=edge">
     8     <title>TodoList Jquery</title>
     9     <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
    10 </head>
    11 
    12 <body>
    13     <div>
    14         <input type="text" id="input">
    15         <button id="btn">提交</button>
    16         <ul id="list"></ul>
    17     </div>
    18 
    19     <script> 
    20         function Page() {
    21 
    22         }
    23         $.extend(Page.prototype, {
    24             init: function() {
    25                 this.bindEvents()
    26             },
    27             bindEvents: function() {
    28                 var btn = $('#btn');
    29                 btn.on('click', $.proxy(this.handleBtnClick, this)); //proxy:改变this的指向
    30             },
    31             handleBtnClick: function() {
    32                 var inputEle = $('#input');
    33                 var inputValue = inputEle.val(); //获取input框的内容
    34                 var ulEle = $('#list');
    35                 ulEle.append('<li>' + inputValue + '</li>');
    36                 inputEle.val('');
    37             }
    38         })
    39         var page = new Page();
    40         page.init();
    41     </script>
    42 </body>
    43 
    44 </html>
    你必须穷尽一生磨练技能,这就是成功的秘诀,也是让人家敬重的关键。
  • 相关阅读:
    模式识别 第一章 概论
    高等代数9 欧几里得空间
    离散数学6 初等数论
    高等代数6 线性空间
    高等代数5 二次型
    GMOJ 6870. 【2020.11.17提高组模拟】ckw的树 (tree)
    1
    Virtual Tree 学习笔记
    [2020.11.14提高组模拟] 鬼渊传说(village)
    企业购置新车,各项费用会计入账以及案例分析
  • 原文地址:https://www.cnblogs.com/knuzy/p/9257623.html
Copyright © 2011-2022 走看看