关于Vue,移动前端开发前景

本文介绍了Vue组件中的prop属性验证、默认值设置、自定义事件的使用,以及如何通过v-model和EventBus进行组件间的数据交互,包括ES6特性和微信小程序开发相关知识点。
摘要由CSDN通过智能技术生成

{{ parStr }}

{{ parArr }}

{{ parAny }}

`

})

<my-component-a

:par-str = “str”

:par-arr = “arr”

:par-any = “any”

prop 还可以同时指定多个类型,通过数组方式保存即可

Vue.component(‘MyComponentA’, {

props: {

parData: [String, Number]

},

template: `

{{ parData }}

`

})

props 验证

==================================================================

当 prop 需要设置多重规则时,可以将 prop 的值设置为选项对象

之前的类型检测功能通过 type 选项设置

Vue.component(‘MyComponentA’, {

props: {

parNum: {

type: Number

},

parData: {

type: [String, Boolean]

}

},

template: `

{{ parNum }}

{{ parData }}

`

})

required 用于设置数据为必填项

Vue.component(‘MyComponentA’, {

props: {

parNum: {

type: Number,

required: true

}

},

template: `

{{ parNum }}

`

})

default 用于给可选项指定默认值,当父组件未传递数据时生效

Vue.component(‘MyComponentA’, {

props: {

parNum: {

type: Number,

dafault: 100

}

},

template: `

{{ parNum }}

`

})

注意:当默认值为数组或对象是,必须为工厂函数返回的形式

Vue.component(‘MyComponentA’, {

props: {

parArr: {

type: Array,

default: function () {

return [1, 2, 3]

}

}

},

template: `

{{ parArr }}

`

})

validator 用于给传入的 prop 设置校验函数,return 值为 false 时 Vue.js 会发生警告

Vue.component(‘MyComponentA’, {

props; {

type: String,

validator: function (value) {

return value.startsWitn(‘lagou’);

}

},

template: `

{{ parStr }}

`

})

注意:验证函数中无法使用实例的 data、methods 等功能

非 props 属性

====================================================================

当父组件给子组件设置了属性,但此属性在 props 中不存在,这时会自动绑定到子组件的根元素上

<my-component-a

demo-attr=“示例属性”

title=“示例title”

style=“height: 200px”

class=“colorBlue”

如果组件根元素已经存在了对应属性,则会替换组件内部的值

class 与 style 是例外,当内外都设置时,属性会自动合并

Vue.component(‘MyComponentA’, {

template: `

子组件内容

`

})

如果不希望继承父组件设置的属性,可以设置 inheritAttrs: false,但是只适用于普通书写,class 与 style 不受影响

Vue.component(‘MyComponentA’, {

inheritAttrs: false,

template: `

子组件内容

`

})

子组件向父组件传值

===================================================================

子向父传值需要通过自定义事件实现

商品为子组件,购物车为父组件,父组件需统计商品个数,就需要在子组件个数变化时传值给父组件

购物车

<product-item

v-for=“product in products”

:title=“product.title”

:key=“product.id”

总数为:{{ totalCount }}

子组件数据变化时,通过 $emit() 触发自定义事件

Vue.component(‘product-item’, {

// …

methods: {

countIns () {

this.$emit(‘count-change’);

this.count++

}

}

})

子组件向父组件传值

父组件监听子组件自定义事件,并设置处理程序

<product-item

@count-change=“totalCount++”

自定义事件传值

=================================================================

子组件触发事件时可以向父组件传值

Vue.component(“product-item”, {

props: [‘title’],

template: `

商品名称:{{ title }};商品个数:{{ count }}

<button @click=“countIns1”> +1

<button @click=“countIns2”> +5

`,

data () {

return { count: 0 }

}.

methods: {

countIns1 () {

this.$emit(‘count-change’, 1);

this.count++

}

countIns5 () {

this.$emit(‘count-change’, 5);

this.count += 5

}

}

})

父组件在监听事件时需要接受子组件传递的数据

<product-item

@count-change=“totalCount += $event”

父组件在监听事件时需要接受子组件传递的数据

<product-item

@count-change=“onCountChange”

组件与 v-model

=====================================================================

v-model 用于组件时,需要通过 props 与自定义事件实现

输入内容为:{{ iptValue }}

非父子组件传值

=================================================================

兄弟组件或完全无关的两个组件

  • 兄弟组件传值

  • EventBus

  • 其他传值方式

兄弟组件传值

================================================================

兄弟组件可以通过父组件进行数据中转

<com-a

@value-change=“value = $event”

<com-b

:value=“value”

EventBus

==================================================================

当组件嵌套关系复杂时,根据组件关系传值会较为繁琐

组件为了数据中转,data 中会存在许多与当前组件功能无关的数据

  • EventBus(事件总线)是一个独立的事件中心,用于管理不同组件间的传值操作

  • EventBus 通过一个新的 Vue 实例来管理组件传值操作,组件通过给实例注册事件、调用事件来实现数据传递

// Event.js

var bus = new Vue()

发送数据的组件触发 bus 事件,接收的组件给 bus 注册对应事件

Vue.component(“product-item”, {

template: `

商品名称:苹果;商品个数:{{ count }}

<button @click=“countIns”> +1

`,

data () {

return { count: 0 }

}.

methods: {

countIns () {

bus.$emit(‘countChange’, 1);

this.count++;

}

}

})

给 bus 注册对应事件通过 $on() 操作

Vue.component(“product-total”, {

template: `

总个数为:{{ totalCout }}

`,

data () {

return { totalCout: 0 }

}.

created () {

bus.$on(‘countChange’, (productCount) => {

this.totalCount += productCount;

})

}

})

最后创建根实例执行代码即可

其他通信方式

================================================================

  • $root

  • $refs

$root


$root 用于访问当前组件树根实例,设置简单的 Vue 应用时可以通过此方式进行组件传值

父组件数据:{{ count }}

除了 $root,Vue.js 中还提供了 $parent 与 $children 用于便捷访问父子组件

$refs


$refs 用于获取设置了 ref 属性的 HTML 标签或子组件

给普通 HTML 标签设置 ref 属性,$refs 可以获取 DOM 对象

<button @click=“fn”>按钮

给子组件设置 ref 属性,渲染后可通过 $refs 获取子组件实例

按钮

给子组件设置 ref 属性,渲染后可通过 $refs 获取子组件实例

按钮

组件插槽

==============================================================

组件插槽可以便捷的设置组件内容

示例内容

组件的主体内容

单个插槽

==============================================================

如果我们希望组件标签可以像 HTML 标签一样设置内容,那么组件的使用灵活度会很高

示例内容1

示例内容2

但平常我们书写的组件,组件首尾标签中书写的内容会被抛弃

示例内容

组件的主体内容

我们需要通过 进行插槽设置

示例内容

组件的主体内容

需要注意模板内容的渲染位置

这里只能访问父组件的数据

{{ parValue }}

我们可以在 中为插槽设置默认值,也称为后备内容

var ComA = {

template: `

组件 A:

这是默认文本

`,

data () {

return {

value: ‘子组件数据’

}

}

}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
img

ES6

  • 列举常用的ES6特性:

  • 箭头函数需要注意哪些地方?

  • let、const、var

  • 拓展:var方式定义的变量有什么样的bug?

  • Set数据结构

  • 拓展:数组去重的方法

  • 箭头函数this的指向。

  • 手写ES6 class继承。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

微信小程序

  • 简单描述一下微信小程序的相关文件类型?

  • 你是怎么封装微信小程序的数据请求?

  • 有哪些参数传值的方法?

  • 你使用过哪些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

ue }}

我们可以在 中为插槽设置默认值,也称为后备内容

var ComA = {

template: `

组件 A:

这是默认文本

`,

data () {

return {

value: ‘子组件数据’

}

}

}

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

[外链图片转存中…(img-NkjIHLPz-1711024879484)]
[外链图片转存中…(img-p7lq2j0y-1711024879485)]
[外链图片转存中…(img-5h8yroXF-1711024879486)]
[外链图片转存中…(img-UY8ARZGp-1711024879486)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-XBalAfkn-1711024879486)]

ES6

  • 列举常用的ES6特性:

  • 箭头函数需要注意哪些地方?

  • let、const、var

  • 拓展:var方式定义的变量有什么样的bug?

  • Set数据结构

  • 拓展:数组去重的方法

  • 箭头函数this的指向。

  • 手写ES6 class继承。

开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】

微信小程序

  • 简单描述一下微信小程序的相关文件类型?

  • 你是怎么封装微信小程序的数据请求?

  • 有哪些参数传值的方法?

  • 你使用过哪些方法,来提高微信小程序的应用速度?

  • 小程序和原生App哪个好?

  • 简述微信小程序原理?

  • 分析微信小程序的优劣势

  • 怎么解决小程序的异步请求问题?

  • 16
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值