热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mvvm——如何进行dom的操作

单页面应用已经成为了我们前端工程师开发中的常客,我们总是会遇到这样的情况如何从传统的dom操作中走出来,以前我们进行dom操作,用的是js的document.getElementB

单页面应用已经成为了我们前端工程师开发中的常客,我们总是会遇到这样的情况如何从传统的dom操作中走出来,以前我们进行dom操作,用的是js的document.getElementById,document.getElementsByClassName,jquery的$(‘xxx’)来进行操作,所以从传统的web前端转型过来的工程师,我们总是想着如何在MVVM中使用jquery.js,zepto.js来加快我们的开发,这样的开发想法其实并没有什么错误,为了更好更快的开发吗,但是我们既然用MVVM的框架进行开发就要掌握它的使用的正确姿势,做为一个vue.js开发的忠实爱好者和开发者,我就以它为例来进行介绍。

从我接触到的angular和vue,它们都有directive这个概念,正所谓美好的事物总有相通之处。下面我们就来介绍一下directive这个概念在vue框架中所起的作用,指令作为vue框架中很重的一环,在vue中常用的有v-for, v-text, v-model,v-if, v-bind, v-on等,这些框架内置的指令我们在实用的过程中很常见,正是由于它们的存在从而使我们加快了开发中的速度,这根本的原因是我们对dom的操作更加方便,我们只需要通过简单的几行代码就可以实现传统开发中几十行代码实现的效果。

话不多说我们先来一个例子介绍一下vue中的自定义指令。
通过自定义一个指令来对#app容器内的p元素进行颜色设置

dom结构


theme: {{ themeColor }}

this is 1 pargraph


this is 2 pargraph


this is 3 pargraph


this is 4 pargraph



js 代码

var vm = new Vue({
el: '#app',
data: {
themeColor: 'color',
themeImg: 'img',
red: '#ff00000',
tomato: '#f00000',
green: '#00ff00',
},
directives: {
tcolor: function(el, binding){
el.style.color = binding.value;
}
}
});
效果:

根据使用的作用域的不同我们认为的将指令分为全局指令和局部指令,上面的实例即为局部指令,将它转换为全局指令其实很简单,这和我们自定义组件使用方法一致。处理形式如下:

var vm = new Vue({
el: '#app',
data: {
themeColor: 'color',
themeImg: 'img',
red: '#ff00000',
tomato: '#f00000',
green: '#00ff00',
}
});
Vue.directive('tcolor', function(el, binding){
el.style.color = binding.value;
});

注意:在使用MVVM框架时,们应该注意在使用指令是要先定义指令,在MVVM开发时若我们需要某个插件或某个组件的话我们应该先定义这个插件组件,或指令,以及是说我们要在最后指定元素的容器。

上面所讲只是指令的常规应用,在开发项目时我们可能因为开发需求的不同需要对项目做一些特殊处理。以下四个钩子函数可以解决我们遇到的大部分问题。

bind: 只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个在绑定时执行一次的初始化动作。
inserted: 被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于 document 中)。
update: 所在组件的 VNode 更新时调用,但是可能发生在其孩子的 VNode 更新之前。指令的值可能发生了改变也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 (详细的钩子函数参数见下)。
componentUpdated: 所在组件的 VNode 及其孩子的 VNode 全部更新时调用。
unbind: 只调用一次, 指令与元素解绑时调用。

这些钩子函数都包含了这样几个参数el, binding, vnode, oldVnode,其中binding参数是一个对象包含value, oldvalue,name, expression,arg,modifiers六个属性。

最后一句话,也是个人的心得体会,‘要想MVVM用的好,就远离jquery,zepto’,我这里并不是说jquery不好,但是我们既然用MVVM就要充分发挥这个框架的特性,从而使我们的应用的性能达到最佳。


推荐阅读
  • 【Vue基础】监听属性watch
    Vue监听属性是watch,我们可以通过watch来响应数据的变化。代码示例: ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • express工程中的json调用方法
    本文介绍了在express工程中如何调用json数据,包括建立app.js文件、创建数据接口以及获取全部数据和typeid为1的数据的方法。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • const限定符全解一、const修饰普通变量  intconsta500;  constinta600;  上述两种情况相同,都是声明一个const型的变量,它们 ... [详细]
  • 本文涉及源码版本为2.6.9准备工作down一份Vue源码,从package.json入手,找我们需要的代码1、package.json中的scripts,build:nodesc ... [详细]
  • 认识Vue关于Vue的描述有不少,不外乎都会拿来与Angular和React对比,同样头顶MVVM双向数据驱动设计模式光环的Angular自然被对比的最多,但到目前为止,Angul ... [详细]
  • <ItemTemplate><ahref#onclickjavascript:window.location.hrefoa_NoReply.aspx?fid ... [详细]
  • vue.js如何实现数据的双向绑定呢?与angular不同。vue利用的是es5的defineproperty特性。1.一个小例子 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • PHP中的单例模式与静态变量的区别及使用方法
    本文介绍了PHP中的单例模式与静态变量的区别及使用方法。在PHP中,静态变量的存活周期仅仅是每次PHP的会话周期,与Java、C++不同。静态变量在PHP中的作用域仅限于当前文件内,在函数或类中可以传递变量。本文还通过示例代码解释了静态变量在函数和类中的使用方法,并说明了静态变量的生命周期与结构体的生命周期相关联。同时,本文还介绍了静态变量在类中的使用方法,并通过示例代码展示了如何在类中使用静态变量。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • NotSupportedException无法将类型“System.DateTime”强制转换为类型“System.Object”
    本文介绍了在使用LINQ to Entities时出现的NotSupportedException异常,该异常是由于无法将类型“System.DateTime”强制转换为类型“System.Object”所导致的。同时还介绍了相关的错误信息和解决方法。 ... [详细]
author-avatar
手机用户2502883501
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有