Мини программа давно так глубоко не разрабатывалась.В этот раз я воспользовался услугами компании для создания мини программы и подробно изучил ее.В результате было вырыто бесчисленное количество ям.Конечно копались только ямы,и они не были заполнены. Ха-ха, просто отметьте это первым.
Из-за потребностей бизнеса компании этот апплет используетmpvue + typescript
развивать.
mpvue
родственная яма
оinput
вопрос
Потому что дизайн хочет, чтобы взаимодействие с полем ввода выглядело так:
Недостаточно использовать родное поле ввода, можно только написать компоненты самостоятельно. затем используйтеvue
способ написать компонент, и обнаружил, чтоmpvue
оinput
Есть довольно много проблем.
-
input
использоватьv-modal
Мигает при вводе - вложение компонентов
slot
Что-то не так - Вход не поддерживается
:type
а такжеv-modal
- Такие теги, как слот, не поддерживают добавление
class
, который не может быть скомпилирован вwxss
- вложенные компоненты,
props
Что-то не так - Исправлять
slot
нельзя обновлять в горячем виде, только повторноnpm run dev
Вот связанная проблема на github:
проблема с перепрошивкой inout
Проблема слота вложенного компонента 11
Проблема слота вложенного компонента 222
Что касается этой проблемы, я пробовал вышеуказанные решения, но хорошего решения нет (падение). Итак, я воссоздал компонент нативным способом.
Небольшие ямы, связанные с программой
нативные компонентыcanvas
вопрос
Из-за бизнес-потребностей компании в апплете есть много данных диаграммы, которые необходимо отобразить, и, естественно, их необходимо использовать.canvas
,а такжеcanvas
является нативным компонентом, егоz-index
Бесконечно большой, как только появляется содержимое всплывающего окна, которое нужно прикрыть, просто gg.
На самом деле это может быть решено с помощьюcover-view
В качестве маскирующего слоя (сначала я думал, надо поставитьcover-view
Вложенный в узел нативного компонента), объедините содержимое всплывающего окнаcover-view
, но это очень невкусно,cover-view
Содержащиеся в нем проблемы узла, а также некоторые проблемы стиля не могут быть реализованы. Если содержимое всплывающего окна крутое, то могу только предложить поменять дизайн на эскизный.
<view>
<canvas canvas-id="test"></canvas>
// 这是一个遮罩层,为了覆盖住原生组件( 1.9.0及以上才支持 )
<cover-view>
这是一个遮罩层balabala
</cover-view>
// 官方给的demo
<video>
<cover-view>
这里也可以覆盖video里的内容
</cover-view>
</video>
<view>
Вот соответствующие ошибки, с которыми я столкнулся:
- покрыть текст
cover-view
Этикетки, иначе опечатки. -
cover-view
Содержимое не поддерживает настройкиградиент, теньи другие стили. - вложение пользовательских компонентов
cover-view
, пользовательский компонентslot
и его родительские узлы в настоящее время не поддерживают передачуwx:if
Элементы управления отображаются и скрываются, иначе это вызоветcover-view
Не показывай -
canvas
Его нельзя поместить в прокручиваемый список.Когда страница скользит, под эффектом настоящей машины,canvas
Не могу очень хорошо следить за прокруткой, сначала будет очень плохой эффект от прокрутки, а потом прокрутка внезапно исчезнет. -
cover-image
не поддерживаетсяbindtouchstart
дождитесь сенсорного события
В общем, с нативными компонентами апплета еще много проблем, и конкретную реализацию нужно протестировать на реальной машине, чтобы увидеть различные проблемы.
Яма с использованием echart-for-wx
- Решите проблему с всплывающим окном, закрывающим холст, тем же способом, что и выше.
Решение: используйте диаграммуcover-view
должен быть в узлеec-canvas
Добавлено позже, контролируется стилемcover-view
соответствующее местонахождение
<ec-canvas class="canvas" id="mychart-dom-line" canvas-id="mychart-line" :ec="ecLine">
</ec-canvas>
<cover-view class="cover-view">cover-vdddddddddddddiew</cover-view>
-
echart
В использованииrpx
Когда единицей является единица, возникает проблема адаптации модели.
echart
Проблемы с адаптацией на разных моделях, блок использованияpx
, адаптация не проблема, но с помощьюrpx
, будет небольшая проблема с адаптацией модели, а если использовать mpvue, то блокpx
превратится вrpx
, возникает следующая проблема:
фактический эффект:
ожидаемый результат:
Решение:
существуетmpvue
, используйте встроенные стили (встроенные стили неpx
Превратиться вrpx
), Лучше всего фиксировать высокие
Emmmm .... Результаты показали, что будут проблемы с мобильными телефонами с большим экраном и маленьким экраном, поэтому его нельзя написать в встроенном стиле.px
Размер (поднял вопрос на GitHub, но пока не ответил, боюсь мертвый камень утонет в море)
Canvas создает проблему адаптации изображения
Из-за разных размеров телефонов и соотношения пикселей их устройствdevicePixelRatio
Несовместимо, а то у апплета свой блокrpx
, так что если генерироватьcanvas
Фиксировано писать его ширину и высоту, что проблематично.
Основной алгоритм:
canvas
рисовать с помощьюpx
единицы, но разные устройстваpx
Его нужно преобразовать, поэтому единица rpx используется в компоненте единообразно, и вот проблема, как преобразовать единицу.
пройти черезwx.getSystemInfoSync
Получите размер экрана устройства, чтобы получить соотношение, а затем выполните преобразование, код выглядит следующим образом:
const sysInfo = wx.getSystemInfoSync();
const screenWidth = sysInfo.screenWidth;
this.factor = screenWidth / 750; // 获取比例
function toPx(rpx) { // rpx转px
return rpx * this.factor;
}
function toRpx(px) { // px转rpx
return px / this.factor;
},
Но я знаю, что все ленивы, почему бы не иметь колёса🤣
Я действительно не хочу считать, я могу использовать готовые колесаНебольшой программный холст генерирует изображения
Тогда есть,canvas
проблема с передачей изображения
Нужно использоватьcanvasToTempFile
метод, потому чтоcanvas
Узел должен существовать, чтобы получить егоcanvas
рисование в контекстеcanvas
вне видимой области страницы. И когда вы конвертируете его в картинку, вам нужно добавить волшебствоsetTimeout
задерживать. Минимальная задержка составляет300ms
, каким бы маленьким он ни был. (Почему, я не знаю, о(╥﹏╥)о)
наконец
Это всего лишь запись моего опыта рытья ям, а есть еще ямы, которые нужно вырыть.