您现在的位置是:主页 > news > 台州网站推广/常州seo建站

台州网站推广/常州seo建站

admin2025/5/5 12:03:33news

简介台州网站推广,常州seo建站,浏览器的历史,网站优化 套站公众号:前端微服务GitHub:https://github.com/yongbolu作 者:子奕一、概述组件化是长期开发过程中一个提炼精华的过程,目的主要是提高复用性、解耦、提升开发效率。本次主要以Vue.js为例来讲解前端组件开发的注意事项&#xff0c…

台州网站推广,常州seo建站,浏览器的历史,网站优化 套站公众号:前端微服务GitHub:https://github.com/yongbolu作 者:子奕一、概述组件化是长期开发过程中一个提炼精华的过程,目的主要是提高复用性、解耦、提升开发效率。本次主要以Vue.js为例来讲解前端组件开发的注意事项&#xff0c…

a3827ec65de8454d8c4fa9e3c641b2ae.png

公众号:前端微服务
GitHub:https://github.com/yongbolu
作  者:子奕

一、概述

组件化是长期开发过程中一个提炼精华的过程,目的主要是提高复用性、解耦、提升开发效率。本次主要以Vue.js为例来讲解前端组件开发的注意事项,并且带领大家封装自己的组件并发布到npm。

二、环境

  • window10 x64
  • node v10.16.3
  • npm v6.13.4
  • yarn

三、什么叫做组件化

Vue.js 有两大特性,一个是数据驱动,另一个就是组件化。接下来我就针对这两个问题一一解答,所谓组件化,就是把页面拆分成多个组件,每个组件依赖的 CSS、JS、模板、图片等资源放在一起开发和维护。 因为组件是资源独立的,所以组件在系统内部可复用,组件和组件之间可以嵌套,如果项目比较复杂,可以极大简化代码量,并且对后期的需求变更和维护也更加友好。

四、如何进行组件化开发

Vue.js 提供了 2 种组件的注册方式,全局注册和局部注册。

4.1 全局注册

在vue.js中我们可以使用Vue.component(tagName,options)进行全局注册。 例如:

Vue.component('my-component', {
// 选项
})

4.2 局部注册

Vue.js 也同样支持局部注册,我们可以在一个组件内部使用 components 选项做组件的局部注册。 例如:

import HelloWorld from './components/HelloWorld'
export default {
components: {
HelloWorld
}
}

区别:全局组件是挂载在 Vue.options.components 下,而局部组件是挂载在 vm.$options.components 下,这也是全局注册的组件能被任意使用的原因。

五、组件开发的要素

  • 组件的名称
  • 控制参数
  • 自定义内容
  • 自定义事件

六、封装一个Vue组件

6.1 开发vue组件要素

6.6.1 组件的名称name(必填)

js 中使用驼峰式命令,HTML 使用kebab-case命名。





……


6.6.2 props参数

组件属性,用于父子组件通信,可通过this.msg访问。

父对子传参,就需要用到 props,通常的 props 是这样的:

props:['data','type']

{{msg}}

// show: Boolean // 默认false //msg: [String, Boolean]  // 多种类型

但是通用组件的的应用场景比较复杂,对 props 传递的参数应该添加一些验证规则,常用格式如下:

props: {
// 基础类型检测 (`null` 意思是任何类型都可以)
propA: Number,
// 多种类型
propB: [String, Number],
// 必传且是字符串
propC: {
type: String,
required: true
},
// 数字,有默认值
propD: {
type: Number,
default: 100
},
// 数组/对象的默认值应当由一个工厂函数返回
propE: {
type: Object,
default: function () {
return { message: 'hello' }
}
},
// 自定义验证函数
propF: {
validator: function (value) {
return value > 10
}
}
}

对于通过 props 传入的参数,不建议对其进行操作,因为会同时修改父组件里面的数据 // vue2.5已经针对 props 做出优化,这个问题已经不存在了 如果一定需要有这样的操作,可以这么写:

let copyData = JSON.parse(JSON.stringify(this.data))

6.6.3 computed:

处理data或者props中的属性,并返回一个新属性。(注:因为props,data和computed在编译阶段都会作为vm的属性合并,所以不可重名)

{{newMsg}}


6.6.4 render

用render函数描述template。

前端微服务


注意: render 中的 h 其实就是 createElement,它接受三个参数,返回一个 vnodeh 参数解释:

  1. args1:stringFunction | Object用于提供DOM的html内容
  2. args2: {Object} 设置DOM样式、属性、绑定事件之类
  3. args3: {array} 用于设置分发的内容

注:vue编译顺序: template–> compile --> render --> vnode --> patch --> DOM

6.6.5 slot定制插槽

分发内容,有传入时显示,无传入 DOM 时显示默认,分为无名和具名两种,this.slots.default默认指向无名插槽,多个slot时用法this.slots.name,一个通用组件,往往不能够完美的适应所有应用场景 所以在封装组件的时候,只需要完成组件 80% 的功能,剩下的 20% 让父组件通过 solt 解决。

// 子组件


// 父组件
slot按钮

组件封装

header
footer
button




6.6.6  定义子组件的类名class

// 父组件


// 子组件
控制


//真实DOM
hello

6.6.7 向子组件传递样式 style

// 父组件



// 子组件
hello world



6.2 其他属性

6.2.1 $attrs

v-bind="$attrs" 将除class和style外的属性添加到父组件上,如定义input:


6.2.2 v-once

组件只渲染一次,后面即使数据发生变化也不会重新渲染。比如例子中val不会变成2020

buttonbutton
{{val}}



6.2.3 mixins

// mixin.js
export default {
data() {
return{
msg: 'hello world'
}
},
methods: {
clickBtn() {
console.log(this.msg)
}
},
}

// index.vue
button

import actionMixin from "./mixin.js";
export default {
methods: {},
mixins: [actionMixin]
}

6.3  封装button组件

index.vue

MyButton


index.js

import MyButton from './src/index'

MyButton.install = (Vue) => {
Vue.component(MyButton.name, MyButton)
}

export default MyButton

其中 install 是 Vue.js 提供了一个公开方法,这个方法的第一个参数是 Vue 构造器,第二个参数是一个可选的选项对象。MyPlugin.install = function (Vue, options){}

七、发布到npm

7.1 登陆npm

$ npm login

7.2 发布

$ npm publish

八 、关注我们

b211f80350c42eb2ade31f38f67d085e.png