이 기사는 주로 WeChat 미니 프로그램에 대한 빠른 지식을 공유하여 모든 사람이 WeChat 미니 프로그램을 더 쉽게 개발할 수 있도록 도와줍니다.
1. 구성
구성 전체 분석
project.config.json(프로젝트 구성 파일)
{ // 文件描述 "description": "项目配置文件", // 项目代码配置 "setting": { // 是否检查 url 域名安全性和 TLS 版本 "urlCheck": false, // 是否将项目的 es5 代码转成 es6 "es6": true, // 是否自动补全 css 兼容前缀 "postcss": true, // 是否压缩代码 "minified": true, // 是否启用新功能 "newFeature": true }, // 编译方式 "compileType": "miniprogram", // 版本号 "libVersion": "1.7.2", // appid "appid": "touristappid", // 项目名 "projectname": "haiyangbg", // 项目配置 "condition": { // 搜索关键字 "search": { "current": -1, "list": [] }, // 客服 "conversation": { "current": -1, "list": [] }, // 编译方式 "miniprogram": { "current": -1, "list": [] } } }
app.json(미니 프로그램 구성)
{ // 项目路由设置(第一项为首页) "pages":[ "pages/index/index", "pages/logs/logs" ], // 窗口设置 "window":{ // 顶部导航栏背景色,必须是十六进制颜色值,如"#000000" "navigationBarBackgroundColor": "#9ef468", // 顶部导航栏显示文字 "navigationBarTitleText": "组件展示", // 导航栏文字颜色,仅支持 black/white "navigationBarTextStyle": "black", // 下拉背景的文字样式,仅支持 dark/light "backgroundTextStyle":"light", // 下拉背景色,必须是十六进制颜色值,如"#000000" "backgroundColor": "#333", // 是否开启下拉刷新 "enablePullDownRefresh": true, // 距离最底端触多少距离时触发触底事件,单位px "onReachBottomDistance": 40 }, //网络请求过期时间,单位毫秒 "networkTimeout": { // 普通ajax请求 "request": 20000, // Socket请求 "connectSocket": 20000, // 文件上传 "uploadFile": 20000, // 文件下载 "downloadFile": 20000 }, // tab导航栏 "tabBar": { // 文字的颜色 "color": "#999", // 选中时文字的颜色 "selectedColor": "#000", // 背景色 "backgroundColor": "#fff", // 上边框的颜色,仅支持 black/white "borderStyle": "black", // tab导航栏显示在底部还是顶部(顶部不显示图片) "position": "bottom", // 导航栏列表项 "list": [{ // 导航到的页面路径 "pagePath": "pages/index/index", // tab按钮上的文字 "text": "组件", // 图片路径 "iconPath": "img/com-l.png", // 选中后显示的图片 "selectedIconPath": "img/com-d.png" },{ "pagePath": "pages/logs/logs", "text": "API", "iconPath": "img/api-l.png", "selectedIconPath": "img/api-d.png" }] }, // 调试信息 "debug": true }
-
페이지 .json(단일 페이지 구성)
단일 페이지의 json
은 다음으로 로드될 때 app.json
의 window
필드입니다. 이 페이지에서 이 구성은 app.json
json
就是app.json
的window
字段,当加载到这个页面时,此配置将覆盖app.json
2. 生命周期
小程序 App 生命周期
onLaunch ------ 小程序初始化完成时,触发(只会调用一次)
onShow ------ 1. 小程序启动 2. 从后台进入前台显示,触发
onHide ------ 当小程序从前台进入后台,触发
onError ------ 1. 发生脚本错误 2. api 调用失败,触发并带上错误信息
单页面 Page 生命周期
onLoad ------ 页面加载时,触发(只会调用一次)
onShow ------ 页面显示时,触发
onReady ------ 初次渲染完成时,触发(只会调用一次)
onHide ------ 页面隐藏时,触发
onUnload ------ 页面卸载时,触发
详细的生命周期分类:
1.小程序启动:
App.onLaunch
- -> App.onShow
- -> 注册app.json pages里的页面(按索引顺序) - -> 将app路由设置为首页路由 - -> 首页page参数深拷贝 - -> 初始化首页 data - -> Page.onLoad
- -> Page.onShow
- -> Page.onReady
2.切后台(app 和 page 生命周期重合):
小程序被切到后台 - -> page.onHide
- -> App.onHide
- -> 切回小程序 - -> App.onShow
- -> page.onShow
3.跳转页面:
old 表示前一个页面, new 表示新页面
navigateTo
跳转 - -> 将路由设置为目标页面路由 - ->old.onHide
- -> 初始化页面 data - ->new.onLoad
- ->new.onShow
- ->new.onReady
redirectTo
重定向 - -> 设置路由 - ->old.onUnload
- -> init data - ->new.onLoad
- ->new.onShow
- ->new.onReady
navigateBack
页面返回 - -> 设置路由 - ->old.onUnload
- -> init data - ->new.onShow
reLaunch
重启动 - -> 设置路由 - ->old.onUnload
- -> init data - ->new.onLoad
- ->new.onShow
- ->new.onReady
switchTab
Tab 切换(图截自官方文档)
3. 数据绑定和渲染
数据绑定: { { message } }
渲染
-
列表渲染:
- wx:for=" { { message } } " - wx:for-index="idx" (设置索引的变量名,默认 index ) - wx:for-item="itemName"(设置每一项的变量名,默认item )
渲染块:
-
条件渲染:
- wx:if="boolean" - wx:elif="boolean" -wx:else="boolean" == (if - else if - if) - hidden="boolean"
4. 模板(template)
基本用法:
( 定义代码片段,可以在不同的地方调用,使用 name 属性,作为模板的名字,调用时使用 is 属性 )
// 源码(需要和调用的页面在同一个wxml里) <template> <view> I am {{ name }} </view> </template> // 调用 <template></template> // js 数据 Page({ data: { message: { name: '海洋饼干' } } })
进阶用法
当时很多的页面都需要同一个模板时,就需要模板导入了
先在pages文件夹中新建一个template文件夹
,文件夹中新建一个template.wxml
文件
// template.wxml <template> <view> I am {{ name }} </view> </template>
// page.wxml 调用 <import></import> <template></template> // js 数据 Page({ data: { message: { name: '海洋饼干' } } })
5. 事件
事件列表
点击 事件
点击事件
tap
长按事件(超过0.35秒)
longpress
触摸 事件
触摸开始
touchstart
触摸后开始移动
touchmove
触摸后被打断
touchcancel
-
触摸结束
2. 라이프 사이클touchend
미니 프로그램 앱 라이프 사이클
🎜onLaunch ------ 미니 프로그램 초기화 시 트리거됩니다. 완료 (한번만 호출됩니다)🎜🎜🎜🎜onShow ------ 1. 미니 프로그램 시작 2. 백그라운드에서 전경 디스플레이로 들어가서 🎜🎜🎜🎜onHide ------ 미니 프로그램 시작 프로그램이 포그라운드에서 백그라운드로 들어가서 🎜 🎜🎜🎜onError ------ 1. 스크립트 오류가 발생했습니다. 2. API 호출이 실패하고 오류 메시지와 함께 트리거되었습니다🎜🎜🎜🎜🎜🎜Single 페이지 페이지 수명 주기🎜🎜🎜🎜onLoad --- --- 페이지가 로드될 때 트리거됨(한 번만 호출됨) 🎜🎜🎜🎜onShow ------ 페이지가 표시될 때 트리거됨 🎜🎜🎜🎜onReady -- ---- 초기 렌더링이 완료되면 트리거됨(한 번만 호출됨) 한 번 호출됨)🎜🎜🎜🎜onHide ------ 페이지가 숨겨지면 🎜🎜🎜🎜onUnload가 트리거됨 ------ 언제 페이지가 언로드되면 🎜🎜🎜
🎜🎜자세한 수명 주기 분류: 🎜🎜🎜1 미니 프로그램 시작: 🎜🎜
App.onLaunch
- -> .onShow - -> app.json 페이지에 페이지 등록(인덱스 순서) - -> 홈페이지 경로로 앱 경로 설정 -> 홈페이지 데이터 - -> Page.onLoad
- -> Page.onShow
- -> Page.onReady
🎜🎜🎜2. 배경으로 전환(앱과 페이지 수명 주기가 겹침): 🎜🎜🎜애플릿이 배경으로 전환됩니다.- -> page.onHide
- -> > - -> 애플릿으로 다시 전환 - -> page.onShow
🎜🎜3. 이전 페이지, new는 새 페이지를 나타냅니다🎜- 🎜🎜
navigateToJump- -> >old.onHide
- -> 페이지 데이터 초기화 - -> new.onLoad
- -> new.onReady🎜🎜🎜🎜redirectTo
Redirect- -> 라우팅 설정- -> old.onUnload
- -> new.onLoad
- -> new.onShow
- -> ; new.onReady
🎜🎜🎜🎜navigateBack
페이지 반환 - -> 라우팅 설정 - -> 데이터 초기화 - -> 다시 시작- -> 라우팅 설정- -> old.onUnload
- -> 데이터 초기화 - -> code>new.onShow - -> new.onReady
🎜🎜🎜 🎜switchTab
탭 전환(공식 문서에서 가져온 사진)🎜🎜
- 🎜🎜데이터 바인딩: { { 메시지 } }🎜🎜🎜🎜Rendering🎜🎜🎜🎜🎜목록 렌더링: 🎜
引入:<wxs></wxs> 自己撸: <wxs> var foo = '海洋饼干' module.exports = { foo } </wxs>🎜🎜🎜렌더링 블록:
{ "component": true }🎜🎜
🎜 기본 사용법: 🎜
🎜 (코드 조각 정의) 다른 곳에서 호출되면 name 속성을 템플릿 이름으로 사용하고, 호출할 때는 is 속성을 사용하세요.) 🎜Component({ // 组件的对外属性(父组件传的数据) properties: { msg: { type: String, value: 'msg', // 父组件值改变时触发的回调 observer: () => { console.log('i am change') } } }, data: { componentData: {} }, })
🎜 고급 사용법🎜
🎜🎜여러 페이지에 동일한 템플릿이 필요한 경우 템플릿은 다음을 수행해야 합니다. 가져오기🎜🎜🎜먼저 페이지 폴더에 새템플릿 폴더
를 만들고 파일 폴더🎜// 先引用声明 "usingComponents": { // hybg 标签名 "hybg": "../component/component" // 相对路径 } // 直接使用,需要的话要绑定数据 <hybg></hybg>
1. 单 solt " // component <view> <slot></slot> </view> // page ( hybg 是上面的组件标签名) <hybg> <view> page 的 slot </view> </hybg> // 效果 <view> <view> page 的 slot </view> </view> " 2. 多slot " // 先在 Component 的 js 中添加 options: { // 启用多slot multipleSlots: true }, // 多 slot 需要使用不同的 name 来区分 <view> <slot></slot> <slot></slot> </view> // page ( hybg 是上面的组件标签名) <hybg> <view> first -- slot </view> <view> last-- slot </view> </hybg> // 效果 <view> <view> first -- slot </view> <view> last-- slot </view> </view> "🎜5에 새
template.wxml
파일을 만듭니다. >이벤트 목록- 🎜🎜🎜Click🎜 Event🎜 🎜🎜🎜🎜클릭 이벤트
탭
🎜🎜🎜🎜길게 누르기 이벤트(이상) 0.35초) 길게 누르기
🎜🎜🎜🎜🎜🎜touch🎜 이벤트 🎜🎜🎜🎜🎜터치 시작 touchstart
🎜🎜🎜🎜터치 후 이동 시작 touchmove
🎜🎜🎜🎜터치 touchcancel
🎜🎜🎜🎜터치 종료 touchend
🎜🎜🎜🎜🎜🎜animation🎜 이벤트🎜 후 중단됨过渡完成时触发
transitionend
动画开始时触发
animationstart
一次迭代结束时触发
animationiteration
动画完成时触发
animationend
事件冒泡,事件捕获
绑定事件 + 冒泡:
bind
+ 事件名 , 如bindtap
绑定事件 + 阻止冒泡:
catch
+ 事件名 , 如catchtap
捕获 + 冒泡:
capture-bind:
+ 事件名 , 如capture-bind:tap
捕获 + 中断事件 + 取消冒泡:
capture-catch:
+ 事件名 , 如capture-catch:tap
事件对象
BaseEvent
( 基础事件,所有事件的父类 )同 target
id
( String - 事件源的id )tagName
( String - 当前组件的类型 )dataset
( Object - 事件源组件上由data-开头的自定义属性集合 )type
( String - 事件类型 )timeStamp
( Integer - 事件生成时的时间戳 )target
( Object - 触发事件的组件的属性 )currentTarget
( Object - 当前组件的属性 )TouchEvent
( 触摸事件 )identifier
( Number - 触摸点的标识符 )pageX
( Number - 距文档左上角 x 轴的距离 )pageY
( Number 距文档左上角 y 轴的距离 )clientX
( Number 距页面可显示区域 x 轴的距离 )clientY
( Number 距页面可显示区域 y 轴的距离 )touches
( Array 停留在屏幕中的触摸点的信息对象集合 )changedTouches
( Array 变化的触摸点信息对象集合 )CustomEvent
( 自定义事件 )detail
( Object - 自定义事件额外的信息 )
6. wxs 模块
wxs 文件就是 js 文件,引入 wxs 文件就是引入一个 js 模块( 不能用es6 ),现有两种引入方式
-
在
wxml
里引用,使用<wxs></wxs>
标签
1.1.module
必填,为当前模块的模块名
1.2.src
选填,引用.wxs
文件的相对路径(仅当标签为 单闭合标签 或 标签的内容为空 时有效)
1.3. 例引入:<wxs></wxs> 自己撸: <wxs> var foo = '海洋饼干' module.exports = { foo } </wxs>
在
wxs
里引用,使用require
引用
2.1. 例var tools = require("./tools.wxs")
7. wxss 样式
微信版的 css ,几个不同的地方
添加 自适应尺寸单位 ( rpx )
添加 导入外联样式 ( @import )
精减 css选择器,只支持
类选择器 .class
id选择器 #id
标签选择器 element
兄弟选择器 element1,element2
伪元素选择器 只支持两种 ::after ::before
8. 自定义组件
使用自定义组件
-
创建自定义组件( 类似于page,但需要在 json 文件中将
component
字段设为true
){ "component": true }
-
创建组件构造器 ( 构造函数不是page(),而是Component() )
Component({ // 组件的对外属性(父组件传的数据) properties: { msg: { type: String, value: 'msg', // 父组件值改变时触发的回调 observer: () => { console.log('i am change') } } }, data: { componentData: {} }, })
-
使用自定义组件( 先要在页面的
json
文件中进行引用声明 )// 先引用声明 "usingComponents": { // hybg 标签名 "hybg": "../component/component" // 相对路径 } // 直接使用,需要的话要绑定数据 <hybg></hybg>
slot 模板
1. 单 solt " // component <view> <slot></slot> </view> // page ( hybg 是上面的组件标签名) <hybg> <view> page 的 slot </view> </hybg> // 效果 <view> <view> page 的 slot </view> </view> " 2. 多slot " // 先在 Component 的 js 中添加 options: { // 启用多slot multipleSlots: true }, // 多 slot 需要使用不同的 name 来区分 <view> <slot></slot> <slot></slot> </view> // page ( hybg 是上面的组件标签名) <hybg> <view> first -- slot </view> <view> last-- slot </view> </hybg> // 效果 <view> <view> first -- slot </view> <view> last-- slot </view> </view> "
父子组件事件(子组件传值)
// page fatherEvent: function(e){ console.log(e.detail) // 组件传递的自定义信息 } <hybg></hybg> // component tap: function(){ var myEventDetail = { a: 10} // detail对象,提供给事件监听函数 var myEventOption = {} // 触发事件的配置选项 // bubbles 事件是否冒泡 // capturePhase 事件是否拥有捕获阶段 // composed 是否可以穿越父组件边界 this.triggerEvent('hybgEvent', myEventDetail, myEventOption) } <view>触发 hybgEvent 事件</view>
相关推荐:
위 내용은 WeChat 미니 프로그램에 대한 빠른 지식의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

JavaScript 프레임 워크의 힘은 개발 단순화, 사용자 경험 및 응용 프로그램 성능을 향상시키는 데 있습니다. 프레임 워크를 선택할 때 : 1. 프로젝트 규모와 복잡성, 2. 팀 경험, 3. 생태계 및 커뮤니티 지원.

서론 나는 당신이 이상하다는 것을 알고 있습니다. JavaScript, C 및 Browser는 정확히 무엇을해야합니까? 그들은 관련이없는 것처럼 보이지만 실제로는 현대 웹 개발에서 매우 중요한 역할을합니다. 오늘 우리는이 세 가지 사이의 밀접한 관계에 대해 논의 할 것입니다. 이 기사를 통해 브라우저에서 JavaScript가 어떻게 실행되는지, 브라우저 엔진의 C 역할 및 웹 페이지의 렌더링 및 상호 작용을 유도하기 위해 함께 작동하는 방법을 알게됩니다. 우리는 모두 JavaScript와 브라우저의 관계를 알고 있습니다. JavaScript는 프론트 엔드 개발의 핵심 언어입니다. 브라우저에서 직접 실행되므로 웹 페이지를 생생하고 흥미롭게 만듭니다. 왜 Javascr

Node.js는 크림 덕분에 효율적인 I/O에서 탁월합니다. 스트림은 메모리 오버로드를 피하고 큰 파일, 네트워크 작업 및 실시간 애플리케이션을위한 메모리 과부하를 피하기 위해 데이터를 점차적으로 처리합니다. 스트림을 TypeScript의 유형 안전과 결합하면 Powe가 생성됩니다

파이썬과 자바 스크립트 간의 성능과 효율성의 차이는 주로 다음과 같이 반영됩니다. 1) 해석 된 언어로서, 파이썬은 느리게 실행되지만 개발 효율이 높고 빠른 프로토 타입 개발에 적합합니다. 2) JavaScript는 브라우저의 단일 스레드로 제한되지만 멀티 스레딩 및 비동기 I/O는 Node.js의 성능을 향상시키는 데 사용될 수 있으며 실제 프로젝트에서는 이점이 있습니다.

JavaScript는 1995 년에 시작하여 Brandon Ike에 의해 만들어졌으며 언어를 C로 실현했습니다. 1.C Language는 JavaScript의 고성능 및 시스템 수준 프로그래밍 기능을 제공합니다. 2. JavaScript의 메모리 관리 및 성능 최적화는 C 언어에 의존합니다. 3. C 언어의 크로스 플랫폼 기능은 자바 스크립트가 다른 운영 체제에서 효율적으로 실행하는 데 도움이됩니다.

JavaScript는 브라우저 및 Node.js 환경에서 실행되며 JavaScript 엔진을 사용하여 코드를 구문 분석하고 실행합니다. 1) 구문 분석 단계에서 초록 구문 트리 (AST)를 생성합니다. 2) 컴파일 단계에서 AST를 바이트 코드 또는 기계 코드로 변환합니다. 3) 실행 단계에서 컴파일 된 코드를 실행하십시오.

Python 및 JavaScript의 미래 추세에는 다음이 포함됩니다. 1. Python은 과학 컴퓨팅 분야에서의 위치를 통합하고 AI, 2. JavaScript는 웹 기술의 개발을 촉진하고, 3. 교차 플랫폼 개발이 핫한 주제가되고 4. 성능 최적화가 중점을 둘 것입니다. 둘 다 해당 분야에서 응용 프로그램 시나리오를 계속 확장하고 성능이 더 많은 혁신을 일으킬 것입니다.

개발 환경에서 Python과 JavaScript의 선택이 모두 중요합니다. 1) Python의 개발 환경에는 Pycharm, Jupyternotebook 및 Anaconda가 포함되어 있으며 데이터 과학 및 빠른 프로토 타이핑에 적합합니다. 2) JavaScript의 개발 환경에는 Node.js, VScode 및 Webpack이 포함되어 있으며 프론트 엔드 및 백엔드 개발에 적합합니다. 프로젝트 요구에 따라 올바른 도구를 선택하면 개발 효율성과 프로젝트 성공률이 향상 될 수 있습니다.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

DVWA
DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

드림위버 CS6
시각적 웹 개발 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.
