Tạo Thành Phần Biểu Tượng Tùy Chỉnh cho Ứng Dụng Nhỏ WeChat

Biểu tượng dạng font (icon font) là giải pháp phổ biến để hiển thị các biểu tượng vector mượt mà và dễ mở rộng trên nền tảng web. Trong môi trường ứng dụng nhỏ WeChat (WeChat Mini Program), việc tái sử dụng biểu tượng một cách linh hoạt — kèm theo khả năng điều chỉnh kích thước, màu sắc và xử lý sự kiện — đòi hỏi một thành phần đóng gói riêng. Dưới đây là cách triển khai một thành phần <icn> tối giản nhưng đầy đủ chức năng, được thiết kế dựa trên bộ biểu tượng từ thư viện Iconfont của Alibaba.

Cấu trúc thành phần

Thành phần được đặt trong thư mục /components/icn/, gồm bốn tệp bắt buộc:

index.wxml

<view
  class="ext-class icn-font icn-{{ symbol }}"
  style="{{ color ? 'color: ' + color : '' }}; {{ scale ? 'font-size: ' + scale : '' }}"
  bind:tap="handleTap"
>
  <view wx:if="{{ badge }}" class="icn__badge">{{ badge }}</view>
</view>

Lưu ý: Các lớp icn-fonticn-* tương ứng với tên font và mã Unicode đã khai báo trong tệp CSS biểu tượng (ví dụ: .icn-tel::before { content: "\e601"; }).

index.js

Component({
  options: {
    addGlobalClass: true
  },

  externalClasses: ['ext-class'],

  properties: {
    symbol: {
      type: String,
      value: ''
    },
    badge: {
      type: [String, Number],
      value: null
    },
    color: {
      type: String,
      value: ''
    },
    scale: {
      type: String,
      value: ''
    }
  },

  methods: {
    handleTap() {
      this.triggerEvent('activate');
    }
  }
});

index.json

{
  "component": true
}

index.wxss

/* Nhúng toàn bộ quy tắc CSS từ iconfont.css (chế độ Unicode) tại đây */
.icn__badge {
  position: absolute;
  top: -0.4em;
  right: -0.4em;
  min-width: 1.1em;
  height: 1.1em;
  line-height: 1.1em;
  text-align: center;
  font-size: 0.55em;
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  background: #e74c3c;
  color: #fff;
  border-radius: 50%;
  padding: 0 0.25em;
  box-sizing: border-box;
  transform: translate(50%, -50%);
}

API Tham Chiếu

Thuộc tính Mô tả Kiểu dữ liệu Mặc định
symbol Tên biểu tượng (tương ứng với lớp CSS như icn-home) String ""
badge Giá trị hiển thị trên badge góc trên phải (số hoặc chuỗi) String | Number null
color Màu biểu tượng (CSS color value) String "" (kế thừa từ ngữ cảnh)
scale Kích thước biểu tượng (vd: 20px, 1.2em) String "" (kế thừa)
ext-class Lớp CSS bên ngoài để ghi đè hoặc mở rộng kiểu dáng String ""

Cách sử dụng

Khởi tạo thành phần trong tệp cấu hình của trang (ví dụ: pages/index/index.json):

"usingComponents": {
  "icn": "/components/icn/index"
}

Sử dụng trong WXML:

<icn symbol="mail" color="#2d8cf0" scale="24px" />
<icn symbol="user" badge="9+" color="#ff9900" scale="20px" ext-class="highlight" />

Bộ biểu tượng cần được xuất từ Iconfont với chế độ Unicode, sau đó sao chép nội dung CSS vào index.wxss. Đảm bảo font-face được khai báo đúng trong tệp app.wxss hoặc tệp CSS toàn cục.

Thẻ: weixin-miniprogram iconfont custom-component css-font-icons unicode-icons

Đăng vào ngày 17 tháng 6 lúc 21:05