【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)

简介: 【微信小程序】-- 自定义组件 -- 创建与引用 &样式(三十二)



一、组件的创建与引用

  前面对学习到的页面导航、页面事件和wxs脚本等相关内容进行了一个总结。接下来就来学习小程序中的自定义组件 – 创建与引用。话不多说,让我们原文再续,书接上回吧。

1、创建组件

  在微信小程序中创建组件可分为以下三步:

  • Step 1、项目的根目录中,鼠标右键,创建 components 文件夹。
  • Step 2、然后在新建的 components 文件夹上创建组件名文件夹,这里以 test1 为例。
  • Step 3、最后在 test1 文件上鼠标右键,点击“新建 Component,输入组件的名称之后回车,会自动生成组件对应的 4 个文件,后缀名分别为 .js.json.wxml.wxss

  注意:为了保证目录结构的清晰,建议把不同的组件,存放到单独目录中。

2、引用组件

  创建完组件之后,接下来就要去进行使用,首先对组件进行引用,组件的引用方式分为“局部引用”和“全局引用”,顾名思义:

  • 局部引用:组件只能在当前被引用的页面内使用。
  • 全局引用:组件可以在每个小程序页面中使用。

3、局部引用组件

  在页面的 .json 配置文件中引用组件的方式,叫做“局部引用”。采用键值对方式进行引用,具体代码如下所示:

contact.json

  引入组件

{
  "usingComponents": {
    "my-test1": "/components/test1/test1"
  }
}

contact.wxml

  使用组件

<view></view>
<my-test1></my-test1>

  可以来看一下运行效果:

  注意:由于组件是局部引用的,所以在别的页面进行调用该组件的时候是不会生效的。

4、全局引用组件

  如果一个一个页面都要这样调用该组件,那就太麻烦了。这里就可以把该组件进行全局引用供全部页面使用。在 app.json 全局配置文件中引用组件的方式,叫做“全局引用”。具体代码如下:

app.json

  创建 usingComponents 节点并引用组件。

{
  "pages":[
  ...
  ],
  "window":{
  ...
  },
  "usingComponents":{
    "my-test1": "/components/test1/test1"
  },

  这样在全部页面都可以调用该组件,这里以 message 页面为例,就能发现 message 页面可以调用该组件了,实际运行如下所示:

5、全局引用与局部引用的使用

  根据组件的使用频率和范围,来选择合适的引用方式,如下表所示:

引用方式 使用范围
全局引用 如果某组件在多个页面中经常被用到
局部引用 如果某组件只在特定的页面中被用到

6、组件和页面的区别

  从表面来看,组件和页面都是由 .js.json.wxml.wxss 这四个文件组成的。但是,组件和页面的 .js 与

.json 文件有明显的不同:

区别 组件 页面
.json 需要声明 “component”: true 属性 不需声明
.js 调用的是 Component() 函数 调用的是 Page() 函数
事件处理函数 需要定义到 methods 节点中 只要与 data 平级位置即可

二、自定义组件 - 样式

1、组件样式隔离

  默认情况下,自定义组件的样式只对当前组件生效,不会影响到组件之外的UI 结构,如图所示:

  • 组件 1 的样式不会影响组件 2 的样式。
  • 组件 2 的样式不会影响小程序页面的样式。
  • 小程序页面的样式不会影响组件 1 和 2 的样式。

  这样做好处就是: 防止外界的样式影响组件内部的样式以及组件的样式破坏外界的样式。

2、组件样式隔离的注意点

  • app.wxss 中的全局样式对组件无效。

  首先定义一个全局样式,页面和组件进行调用,具体代码如下所示:

app.wxss

.g-csh-red-test{
  color: red;
}

message.wxml

  在页面调用全局样式。

<text class="g-csh-red-test">pages/message/message.wxml</text>
<view></view>
<my-test1></my-test1>

test1.wxml

  在组件调用全局样式。

<text class="g-csh-red-test">components/test/test1.wxml</text>

  可以发现只有页面上全局样式是生效的,来看一下运行效果:

  • 只有 class 选择器会有样式隔离效果,id 选择器、属性选择器、标签选择器不受样式隔离的影响。

  #a { }      /* 在组件中不能使用 */

  [a] { }    /* 在组件中不能使用 */

  button { }   /* 在组件中不能使用 */

  .a > .b { }   /* 除非 .a 是 view 组件节点,否则不一定会生效 */

  这里对全局样式的字体进行设置,具体代码如下所示:

app.wxss

.g-csh-red-test{
  color: red;
}

  可以看得到组件跟页面字体都变小了,可以来看一下运行效果:

  这样直接修改页面和组件的样式,在开发过程中风险很大,所以建议:在组件和引用组件的页面中建议使用 class 选择器,不要使用 id、属性、标签选择器!

3、修改组件的样式隔离选项

  默认情况下,自定义组件的样式隔离特性能够防止组件内外样式互相干扰的问题。但有时,我们希望在外界能够控制组件内部的样式,此时,可以通过 styleIsolation 修改组件的样式隔离选项,用法有以下两种:

方法一:

  在组件的 js 文件中新增如下配置:

Component({
  options:{
    styleIsolation: "isolated"
  },
})

方法二:

  在组件的 json 文件中新增如下配置:

{
  "styleIsolation": "isolated"
}

  一般情况方法一使用的比较多一点。

4、styleIsolation 的可选值

  这里以方法一为例,来对 styleIsolation 属性进行设置,具体属性如下所示:

可选值 默认值 描述
isolated 表示启用样式隔离,在自定义组件内外,
使用 class 指定的样式将不会相互影响
apply-shared 表示页面 wxss 样式将影响到自定义组件,
但自定义组件 wxss 中指定的样式不会影响页面
shared 表示页面 wxss 样式将影响到自定义组件,
自定义组件 wxss 中指定的样式也会影响页面和其他设置了 apply-sharedshared 的自定义组件

test1.js

  将组件和页面的样式设置为相互影响。

Component({
  options:{
    styleIsolation: "shared"
  },
})

test1.wxss

  对文本进行加粗。

.g-csh-red-test {
  font-weight: bold;
}

  此时可以发现,页面的文本也加粗了且组件上文本也变成红色了,说明组件和页面的样式现在是相互影响的,可以来看一下实际运行效果:


总结

  感谢观看,这里就是自定义组件 – 创建与引用&样式的介绍,如果觉得有帮助,请给文章点个赞吧,让更多的人看到。🌹 🌹 🌹

  也欢迎你,关注我。👍 👍 👍

  原创不易,还希望各位大佬支持一下,你们的点赞、收藏和留言对我真的很重要!!!💕 💕 💕 最后,本文仍有许多不足之处,欢迎各位认真读完文章的小伙伴们随时私信交流、批评指正!下期再见。

相关文章
|
20天前
|
小程序 JavaScript
【微信小程序】之轮播图、swiper、swiper-item、banner组件使用
【微信小程序】之轮播图、swiper、swiper-item、banner组件使用
【微信小程序】之轮播图、swiper、swiper-item、banner组件使用
|
1月前
|
存储 小程序 JavaScript
【微信小程序】-- 表单组件 - picker 实现日期选择器(五十三)
【微信小程序】-- 表单组件 - picker 实现日期选择器(五十三)
|
1月前
|
JSON 小程序 数据格式
【微信小程序】-- 自定义组件总结 (四十)
【微信小程序】-- 自定义组件总结 (四十)
|
20天前
|
小程序 JavaScript
【微信小程序】之自定义三宫格一行展示row-grid(简单数据看板)
【微信小程序】之自定义三宫格一行展示row-grid(简单数据看板)
|
18天前
|
小程序 程序员
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
【uniapp微信小程序】自定义导航栏:非首页展示的实现方式(极为快捷方式)
14 0
|
1月前
|
JSON 资源调度 小程序
一个强大的小程序富文本组件mp-html
一个强大的小程序富文本组件mp-html
26 0
|
1月前
|
JSON 小程序 前端开发
【微信小程序】-- 案例 - 自定义 tabBar(四十六)
【微信小程序】-- 案例 - 自定义 tabBar(四十六)
|
15天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
15天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
16天前
|
JavaScript 前端开发 小程序
微信小程序全栈开发之性能优化策略
【4月更文挑战第12天】本文探讨了微信小程序全栈开发的性能优化策略,包括前端的资源和渲染优化,如图片压缩、虚拟DOM、代码分割;后端的数据库和API优化,如索引创建、缓存使用、RESTful API设计;以及服务器的负载均衡和CDN加速。通过这些方法,开发者可提升小程序性能,优化用户体验,增强商业价值。