对比Jquery和Vue实现Todolist

Vue是MVVM设计模式的前端框架,其实现Todolist相比于通过Jquery操作Dom来实现的方法是非常简洁的。下面我就来对比下这两种方法。

Vue实现

<body>
//View层,既视图层
	<div id='app'>
		<input type="text" v-model="inputValue"/><br>
		<input type="text" v-model:lazy="inputValue"/>
	    <button v-on:click="handleBtnClick">点击</button>
		<ul>
			<li v-for="item in list">{{item}}</li>
		</ul>
	</div>
    <script>
    	var app = new Vue({
    	//Model层,既数据层
    		el: '#app',
    		data: {
    			list: [],
    			inputValue:''
    		},
    		methods: {
    			handleBtnClick: function () {
    				this.list.push(this.inputValue)
    				this.inputValue = ''
    			}
    		}

    	})
    </script>
</body>
可以看到,vue实现todolist仅仅是对Model层进行的操作,既对数据进行操作,在操作完成后,vue内置的ViewModel层会自动对数据进行处理,将结果映射在body中的View层上,如下图所示img1

Jquery实现

<body>
//View层,既视图层
    <div>
        <input id="input" type="text"/>
        <button id="btn">提交</button>
        <ul id="list"></ul>
    </div>
    <script>
        function Page(){

        }
        //Presenter层,既控制器层
        $.extend(Page.prototype, {
            init: function(){
                this.bindEvents()
            },
            bindEvents: function(){
                var btn = $("#btn");
                btn.on('click', $.proxy(this.handleBtnClick, this))
            },
            handleBtnClick: function(){
                var inputElem = $("#input");
                var inputVal = inputElem.val();
                var ulElem = $("#list");
                ulElem.append('<li>' + inputVal + '</li>');
                inputElem.val('');
            }
        })

        var page = new Page();
        page.init();
    </script>
</body>
利用Jquery对页面进行Dom操作从而实现todolist这其实是一种MVP设计模式(Model,Presenter,View),但是这个实现中没有调用ajax请求获取数据,是控制器层直接对Dom进行操作的,所以Model层可以忽略,如图所示。

img2

可以看出MVP设计模式中核心就是Presenter层,它里面放的业务逻辑是视图层与模型层的桥梁,既MVP设计模式大量的代码都是对Dom进行操作,对比MVVM设计模式,后者仅仅是对Model层的数据进行操作,同时页面上数据改变时也会影响Model层,既数据的双向绑定,这种模式大大简化了代码逻辑,减少了代码数量,对大型项目实现了很好的代码优化。
posted @ 2020-03-22 00:14  海常7号  阅读(215)  评论(0编辑  收藏  举报