1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dream2023-data-mapping

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README.md 6.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 18:13 8e9402d

Введение

@dream2023/data-mapping позволяет выделить и объединить возможности анализа выражений в Vue 2 и собственные функции отображения данных, создавая компактный и многофункциональный механизм анализа и обработки выражений и объектов.

Особенности

  • Небольшой размер: исходный код 3 Кб + зависимости 4 Кб = 7 Кб;
  • Мощные возможности: поддерживает глубокие объекты, настраиваемые разделители и фильтры;
  • Высокая стабильность: покрытие тестами 100%.

Быстрое начало работы

yarn add @dream2023/data-mapping # npm install -S @dream2023/data-mapping
import { compilerStr, dataMapping } from '@dream2023/data-mapping';

compilerStr('{{name}}', { name: 'jack' }); // "jack"

dataMapping(
  { username: '{{ info.name }}', address: '{{ address }}' },
  { info: { name: '夏洛克福尔摩斯' }, address: '伦敦贝克街221号' }
); // { username: '夏洛克福尔摩斯', address: '伦敦贝克街221号' }

Подробное описание функций

Строки шаблона

compilerStr('{{name}}', { name: 'jack' }); // "jack"

Функция compilerStr принимает два параметра: первый — строка шаблона, которую нужно скомпилировать, второй — объект данных. Строка шаблона компилируется на основе объекта данных и выдаёт соответствующий результат.

compilerStr('{{firstName}} -- {{lastName}}', {
  firstName: 'jack',
  lastName: 'li'
}); // "jack --- li"

Строка шаблона может использоваться не только для получения значения одной переменной, но и для создания строки из нескольких переменных.

Выражения

compilerStr("{{ok ? 'YES' : 'NO'}}", { ok: true }); // "YES"

compilerStr("{{message.split('').reverse().join('')}}", {
  message: 'are you ok?'
}); // "?ko uoy era"

Выражение может не только получать значение, но также использовать внутренние выражения.

Поддержка цепочечного получения значений

compilerStr(
  'My name is {{name}}. I live in {{address.area}}, {{address.city}}',
  {
    name: 'jack',
    address: {
      city: 'Shenzhen',
      area: 'Nanshan'
    }
  }
);

Поддерживается получение значений из глубоких вложенных структур. Также доступны все функции, описанные для строк шаблона.

Отображение объектов данных

Помимо компиляции строк, @dream2023/data-mapping также предоставляет возможность компиляции объектов данных.

dataMapping(
  { username: '{{name}}', password: '{{pwd}}' },
  { name: 'jack', pwd: 'helloworld' }
); // { username: 'jack', password: 'helloworld' }

Компиляция объектов также поддерживает глубокое вложение и все особенности, доступные для строк шаблона.

// Поддержка функций
dataMapping(
  {
    country(data: any) {
      return data.address.split('-')[0];
    },
    province(data: any) {
      return data.address.split('-')[1];
    }
  },
  { address: 'china-guangzhou' }
); // { country: 'china', province: 'guangzhou' }

Фильтры

Фильтры — это расширение возможностей отображения данных, которое позволяет выполнять некоторые преобразования над данными перед их отображением. Они работают аналогично фильтрам в Vue2.

Пользовательские фильтры

import { setFilter, setFilters, clearFilters } from '@dream2023/data-mapping';

// Реализация функции
const capitalize = (value) => {
  if (!value) return '';
  value = value.toString();
  return value.charAt(0).toUpperCase() + value.slice(1);
};

// Установка одного фильтра
setFilter('capitalize', capitalize);

// Настройка нескольких фильтров
setFilters({ capitalize });

// Использование
compilerStr('{{ message | capitalize }}', { message: 'hello' }); // Hello

// Если фильтры больше не нужны, их можно очистить
clearFilters();

Разделители

Если вам не нравятся стандартные разделители, вы можете изменить их.

import {
  compilerStr,
  setDelimiters,
  clearDelimiters
} from '@dream2023/data-mapping';

// Установить разделители
setDelimiters(['${', '}']);

// Использовать
compilerStr('My Name is ${name}', { name: 'Jack' });

// Конечно, после установки разделителей их можно также очистить
clearDelimiters();

Поскольку это глобальная настройка, она повлияет на приведённый выше пример, поэтому здесь она не демонстрируется.

Символ $ для удобного разворачивания объектов

Сначала рассмотрим следующий пример: нам нужно извлечь поля longitude и latitude из поля loc и перенести их на один уровень вверх. Для этого нам нужно написать следующее 👇:

dataMapping(
  {
    name: '{{name}}',
    longitude: '{{loc.longitude}}',
    latitude: '{{loc.latitude}}'
  },
  {
    name: 'jack',
    loc: { longitude: 118.366899, latitude: 40.90281 }
  }
); // {  name: 'jack', longitude: 118.366899, latitude: 40.90281 }

Конечно, если атрибутов много, это может быть утомительно. В этом случае мы можем использовать символ $ для быстрого разворачивания:

dataMapping(
  {
    name: '{{name}}',
    $: '{{loc}}'
  },
  {
    name: 'jack',
    loc: { longitude: 118.366899, latitude: 40.90281 }
  }
); // {  name: 'jack', longitude: 118.366899, latitude: 40.90281 }

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dream2023-data-mapping.git
git@api.gitlife.ru:oschina-mirror/dream2023-data-mapping.git
oschina-mirror
dream2023-data-mapping
dream2023-data-mapping
main