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

OSCHINA-MIRROR/yhf7-Protoss

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 9.7 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 28.11.2024 14:10 40ff2e2

Протос

Введение

Магазин закусок.

Архитектура программного обеспечения

Приложение WeChat + ThinkPHP 5.07.

Инструкция по установке

Скачайте и импортируйте приложение.

Заметки

Классы в ES6 в приложении

  • В приложении мы также можем использовать синтаксис ES6 для реализации нашей бизнес-логики.
  • В ES6 были добавлены методы классов, давайте попробуем их использовать.
  • На самом деле нет никакой разницы между классами в приложении и классами на бэкенде.
  1. Создание класса:
// class создаёт класс
class Home {
    // метод конструктора класса
  constructor () {

  }

    // пользовательский метод класса
  getBannerData () {
      ...
  }

}
// чтобы использовать этот класс во внешнем коде, нужно экспортировать его
export {Home};
  1. Использование класса:
// 1. сначала импортируем этот класс home-mode.js это имя моего файла класса
import {Home} from 'home-model.js';
// 2. создаём экземпляр класса home из home-model
var home = new Home();
// 3. вызываем
Page({
    onLoad: function () {
        // вызов метода
        home.getBannerData(() => {
            ....
        })
    }
})

Наследование классов в ES6

// 1. импортируем класс
import {Base} from '../../utils/base.js'

// 2. наследуем класс
class Home extends Base {

  constructor () {
    // если есть конструктор, необходимо вызвать конструктор базового класса
    super();
  }

  // 3. вызов метода базового класса
  getBannerData() {
      // просто добавляем this перед именем метода
      this.request()
  }
}

export {Home};

Запрос (как использовать то, что было сказано выше)

  1. При вызове API бэкенда мы будем часто отправлять запросы к бэкенд-API, что может привести к повторению нашей бизнес-логики на фронте.
  2. Мы используем объектно-ориентированный подход для инкапсуляции функций запросов.
  3. Таким образом, код становится более пригодным для повторного использования, а повторяемость кода снижается.
  4. Когда мы хотим создать класс с высокой степенью повторного использования, мы должны создать базовый класс, чтобы другие классы могли наследовать и использовать его.
// 1. utils/base.js создание нового файла base.js в utils
// 2. новый файл config.js для хранения общих данных или информации о конфигурации

// 3. импорт класса Config из config.js
import {Config} from 'config.js'

// 2. создание базового класса Base
class Base {
    // конструктор
  constructor() {
      // получение общей информации об URL из класса информации о конфигурации
    this.baseRequestUrl = Config.restUrl;
  }

  /**
   * Запрос инкапсулируется
   */
  request (params) {
    // объединение URL
    var url = this.baseRequestUrl + params.url;

    // 判断, если тип не передан, по умолчанию используется GET
    if (!params.type) {
      params.type = 'GET'
    }

    // вызов API WeChat
    wx.request({
      url: url,
      data: params.data,
      method: params.type,
      header: {
        'content-type':'application/json',
        'token': wx.getStorageSync('token')
      },
      success: res => {
        // функция определения, существует ли она, и вызов
        // обратный вызов функции возврата информации
        params.sCallback&&params.sCallback(res.data);
      },
      fail: err => {
        console.log(err);
      }
    })
  }
}

export {Base};

Пользовательские шаблоны в приложении

  • При разработке наших страниц мы также столкнёмся с большим количеством страниц, которые можно будет повторно использовать.
  • Тогда мы определим модуль шаблона, который облегчит нам его использование.
  1. Создать шаблон:
// шаблон
// добавить name для уникальности при вызове, на самом деле это не отличается от написания HTML
<template name="products">
    <view class="products-box">
        
    </view>
</template>
  1. Вызов шаблона:
<!-- импортировать файл шаблона -->
<import src="../tpls/products/products-tpl.wxml" />

<view>
    <!-- использовать шаблон так же, как определение, просто измените имя на is -->
    <!-- передать данные в шаблон -->
    <!-- метод именования настраивается -->
    <!-- ключ products, значение productsArr -->
    <template is="products" data="{{products:productsArr}}"></template>
</view>

Связывание событий, переход на страницу, передача данных

  • Связывание событий в приложении — это bindtap, за которым следует имя функции.
  • Переход на страницу осуществляется с помощью wx.navigateTo API.
  • Передача данных между страницами может осуществляться через URL.
  1. Связывание данных и передача данных:
<swiper indicator-dots="true" autoplay="true" class="swiper">
    <block wx:for="{{bannerArr}}" wx:key="index">
      <!-- связывание событий, bindtap связывает событие, затем следует имя метода -->
      <!-- передача данных data- начинается с -->
      <!-- почему WeChat требует этого, в любом случае это делается таким образом -->
      <swiper-item data-id="{{item.key_word}}" bindtap="onProductsItemTap">
        .....
      </swiper-item>
    </block>
  </swiper>
  1. Реализация метода, переход на другую страницу:
Page({
  /**
   * событие клика баннера
   * event имеет встроенные переменные
   */
  onProductsItemTap: function (event) {
    // id хранится в event.currentTarget.dataset.id
    // все переданные данные находятся в event.currentTarget.dataset, данные передаются без data
    // здесь я сделал небольшую инкапсуляцию для повышения степени повторного использования и поместил её в базовый класс
    // getDataSet(event,key) {
    // return event.currentTarget.dataset[key];
    //}
    var id = home.getDataSet(event,"id");

    // вызвать интерфейс
    // url - это адрес страницы, которую вы хотите перейти
    // можно передать параметры на эту страницу через url
    wx.navigateTo({
      url: '../product/product?id=' + id,
    });
  }
})
  1. Страница перехода получает данные, переданные с предыдущей страницы:
Page({

  /**
   * жизненный цикл функции -- мониторинг загрузки страницы
   * это options является постоянной
   */
  onLoad: function (options) {
    // передаётся как имя, какое.что
    var id = options.id;
    console.log(id)
  }
})

Динамическое обновление навигационной панели

  • wx.setNavigationBarTitle.
/**
   * функция жизненного цикла -- мониторинг первого рендеринга страницы
   */
  onReady: function () {
    // динамически устанавливаем заголовок навигации
    wx.setNavigationBarTitle({
      title: this.data.name
    })
  }

Отклонение частых запросов к серверу

  • Сохраняйте данные запроса в объекте при запросе.
  • Перед повторным запросом проверьте, запрашивались ли данные ранее, и получите их непосредственно из объекта. ``` А это перевод исходного текста.

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

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

1
https://api.gitlife.ru/oschina-mirror/yhf7-Protoss.git
git@api.gitlife.ru:oschina-mirror/yhf7-Protoss.git
oschina-mirror
yhf7-Protoss
yhf7-Protoss
master