Vue组件开发分享

在开始本文之前,你可能需要先了解以下相关内容:

Vue.js  一款高性能轻量化的MVVM框架

Webpack  前端模块化代码构建工具

Vue组件介绍

基于vue.js高效的双向数据绑定特性,让我们在开发高可用组件时可以更加专注于数据逻辑开发;

忘记DOM操作,忘记事件绑定,让开发的专注力集中于数据上:

1、定义需要使用的数据及类型

2、在合适的时机更新数据

3、在模板上绑定数据与视图的映射关系

4、开放对外调用接口

代码

https://github.com/xiaoyunchen/vue-search

代码详解

script

组件逻辑脚本实现。详细配置属性含义请参考:http://cn.vuejs.org/guide/components.html

这里引入weui样式作为组件全局默认样式。

name:组件名称,默认作为使用组件的标签名

props:组件需要使用的数据定义,包括数据类型与默认值。这些数据可以在使用组件时由父级传入。

也就是说,props里面的这些属性,外部在使用的时候都是可以自行进行定义。

data:组件内部私有数据,也就是不需要对外暴露的值。比如这里的用户搜索时输入的关键字。

methods:事件响应方法。这里主要实现当用户选择对应子项时,将选择的数据进行事件派发,交由父级进行逻辑处理。

template

组件模板定义,除了DOM结构定义以外,还包括模板与数据的绑定方式。

v-show:绑定组件的show值,当show为true时,组件才会显示(display:block);

transition:组件过渡切换动画模式,这里请参考 http://cn.vuejs.org/guide/transitions.html 这里定义的过渡动画,需要在css中自行实现。组件内部已经默认实现了slide切换动画。

第3行:v-on:click="show=false"  这里为组件遮罩层绑定了响应事件,简单的将show的值改为false,vue会自动根据双向数据绑定特性将组件隐藏,无需我们进行操作。

第9行:绑定输入框对应的model:query,以及placeholder值。

第10行:v-show定义这个清除按钮的显示条件:当输入的值长度大于0时。

另外也定义了清除按钮的功能,将query值设置为空,同样的,我们无需进行DOM操作。

第13-16行:v-for:根据传入的数组数据生成选项列表,同时使用了vuejs的过滤器,根据query字段进行数据过滤。

另外,这里还定义了最大显示条数limit。

v-text:定义了我们需要显示的对象属性值

v-on:click="chooseItem(item)":对应script中的方法,用户选择对应子项后,组件进行事件派发,将选择的数据上报给父级进行处理。

style

这里有两个style标签,一个带有scoped属性,代表这些样式为组件内部单独使用,避免因重名的问题导致与外部样式重叠。

另外一个是公用样式,外部可以覆盖修改。主要是为了外部在使用时自定义过渡动画时,需要额外定义动画css。

使用方法

JS

  • 引入并使用vue-search组件
  • events中定义对使用的组件进行响应的事件,这里事件名与组件内定义的派发事件名称保持一致。如果当前模块有自己的方法,请在methods中实现。

HTML模板
引入组件,并定义相关需要传入的数据项。

代码构建

我们的vue文件格式进行自定义组件开发,所以在代码构建时需要对vue格式的文件进行解析,然后交由webpack进行模块化打包。

感谢 vue-loader让上述变成可能。

因此我们只需要在webpack中为vue文件配置对应的加载器即可:

{test: /\.vue/, loader: "vue" }

再说两句

MVVM的魅力就在于屏蔽了DOM操作,解放前端开发创造力,将开发专注力集中在数据的变化过程上来。

这样一方面可以让开发更高效,另外一方面让开发调试过程变成相对简单。

其二,使用MVVM框架并不代表原生JS操作DOM,以及事件模型等这些基础知识就不重要。

其实不然,所有框架都是使用原生JS开发的,只有对原生JS有足够深的了解,才能更好的掌握MVVM框架。

最后请大家思考一个问题:

刚才组件的实现中(第14行),我们将点击事件绑定在了每一个item上,那如果我们的item足够多的话,是不是等于也要绑定N多次事件?最终的事件执行效率能高吗?

时间: 2024-08-01 22:45:02

Vue组件开发分享的相关文章

vue组件开发练习--焦点图切换

1.前言 vue用了有一段时间了,开发的后台管理系统也趋于完善,现在时间比较算是有点空闲吧!这个空闲时间我在研究vue的另外的一些玩法,比如组件,插件等.今天,我就分享一个组件的练手项目--焦点图切换组件.这个项目是我用于vue组件练习的一个项目,当然了,代码也会提交到github(ec-slider),也会维护.我也想我开发的东西好用一点!现在,就是建议有需要的伙伴,可以来玩下这个项目,当练习的作用!另外,如果大家有什么建议,欢迎指点! 建议1.下面的步骤,最好在自己本地上跑起来,根据文章的步

vuejs 插件开发并发布到npm--(3)vue组件开发并发布

一.以hyy-vshare插件开发为例 1.初始化插件项目:vue init webpack-simple hyy-vshare,目录结构如下: 2.添加依赖:npm i: 3.启动服务:npm run dev; 4.在src目录下新建lib文件夹,用于组件开发: 5.开发并调试插件 lib/index.js(全局组件的方式) import vshare from './vshare.vue' // 导入组件 vshare.install = function (Vue) { Vue.compo

饿了么基于Vue2.0的通用组件开发之路(分享会记录)

Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网:http://element.eleme.io/#/github:https://github.com/ElemeFE/element ## 设计目的 大部分项目起源都是源于业务方的需求,Element 也是一样.随着公司业务发展,内部开始衍生出很多后台系统,UED 部门也接到越来越多的设计需求,

用Vue构建一个github“可视化大数据平台”-GitDataV,设计开发分享

写在前面 GitDataV,是一个github“大数据可视化平台”,通过它你可以更直观的看到你在github里的一些数据,(之所以打双引号,是因为我觉得这个还没到大数据可视化的程度).其实我在 上篇文章 分享的时候已经提到了这个想法,通过github提供的接口,做一个自己的“大数据分析页面”,所以我就花了几天晚上的时间,把这想法从设计到开发构建出来了,那么下面我就我个人的账号测试看看效果如下gif图 如果您感兴趣可以点击这里访问简单的:GitDataV网站(目前打包后有些小bug,但不影响正常使

模块化开发与vue组件

模块化开发是保证每个文件都是独立的模块,不受外界干扰,提高性能,便于后期维护与团队开发. 可以引入官网的模块,也可以自定义模块. 使用require()引入需要使用的模块,自定义的模块在使用之前需要通过module.exports 暴露出去. 通过npm init -y 下载package.json文件管理维护模块,其中 main 为入口文件 ,dependencies 指定项目开发与上线需要的模块 ,devdependeciens  指定项目开发中需要而上线时不需要的模块. var as=re

Vue组件信息传递和Vue项目开发

一.全局组件 <body> <!-- 两个全局vue实例可以不用注册全局组件,就可以使用 --> <div id="app"> <global-tag></global-tag> </div> <div id="main"> <global-tag></global-tag> </div> </body> <script src=

Vue组件化开发

一. 通过axios实现数据请求 1. json简介 json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据格式. json的作用:在不同的系统平台,或不同编程语言之间传递数据. 1.1 json数据的语法 json数据对象类似于JavaScript中的对象,但是它的键对应的值里面是没有函数方法的,值可以是普通变量,不支持undefined,值还可以是数组或者jso

前端框架Vue自学之Vue组件化开发(三)

终极目标:掌握和使用Vue(全家桶:Core+Vue-router+Vuex) 本博客目的:记录Vue学习的进度和心得(Vue组件化开发) 内容:通过官网说明,掌握Vue组件化开发. 正文: Vue组件化开发 一.认识组件化 原文地址:https://www.cnblogs.com/xinkuiwu/p/12037281.html

Vue.js组件开发:从一个简单的例子说起

<ol> <!-- <li v-for="thing in someThings" > {{ thing.name }} </li> --> <thing-liv-for="thing in someThings" v-bind:something="thing"></thing-li> </ol> li列表的功能是显示一件事情的名字,我们以它作为例子来介绍最简单