元件實例
this.selectComponent('.classSelector')
引入
<span style="font-size: 14px;">Taro</span>
Taro中引入Vant Weapp,不能直接透過第三方NPM
套件的形式直接呼叫。
需要進行以下幾個步驟:
- 在github上找到Vant-weapp下載檔案包,將對應的
dist
目錄複製到項目/src/components/vant-weapp
目錄下。 - 在
Pages
對應檔案的config.usingComponents
中,設定每個頁面所需的元件。 (無法在app.js
中進行所謂的全域註冊元件。)
config = { navigationBarTitleText: '首页', usingComponents: { "van-button": "../../components/vant-weapp/button/index", "van-popup": "../../components/vant-weapp/popup/index" } }
- 在使用
Vant-weapp
元件後,taro
建置會自動將對應的元件複製一份到dist/components
下,而Vant-weapp
的元件也依賴工具庫/src/components/vant-weapp/wxs
,工具庫taro
不會自動複製到dist
。所以,我們需要修改/config/index.js
檔案中的config.copy.patterns
,讓其在編譯時,自動複製到dist
對應目錄下。
copy: { patterns: [ { from: 'src/components/vant-weapp/wxs/', to: 'dist/components/vant-weapp/wxs/' } ], options: { } },
- 由於
Vant-weapp
的樣式使用的單位是px
,所以會被taro
編譯成rpx
,以便對各個設配進行適配。可以透過修改/config/index.js
檔案中的config.weapp.module.pxtransform.selectorBlackList
不讓其單位轉換。
pxtransform: { enable: true, config: { }, selectorBlackList: [ /^.van-.*?$/, // 这里是vant-weapp中className的匹配模式 ] },
ec-canvas
#ec-canvas
是ECharts
的微信小程式版本。
<span style="font-size: 14px;">iconfont</span>
下載到本機,什麼都不要改,放到指定位置。
該資源不會自動拷貝到dist/
資料夾下,所以需要透過修改設定檔拷貝。
copy: { patterns: [ ... { from: 'src/assets/fonts/', to: 'dist/assets/fonts/' }, ... ], options: { } }
然後,在app.js
入口檔案中,import './assets/fonts/iconfont.css'
。
自訂元件
元件向外傳參考
this.triggerEvent( 'eventType', { key: value, //这里定义的键值对,在父组件中,通过args.detail.key获取; }, { bubbles: true, //事件属性:是否冒泡; capturePhase: true, //事件属性: 是否可捕获; } )
插槽slot
用法同Vue
。
注意:元件內部對slot
定義的樣式,不起作用。只能在呼叫元件的位置,對傳入slot
內的結構進行樣式定義。
開發障礙
<span style="font-size: 14px;">Taro</span>
中自訂tabBar
##切換Tab時(app.jsx中config.tabBar.custom = true),需要在對應Tab頁
componentDidShow生命週期中:
if (typeof this.$scope.getTabBar === 'function' && this.$scope.getTabBar()) { this.$scope.getTabBar().setData({ selected: 1 }) }#注意是
this.$scope.getTabBar。
Canvas所造成的層級覆寫問題
#canvas所以,如果是由客戶端建立的原生元件,而原生元件的層級則是最高的,所以頁面中的其他元件無論設定
z-index為多少,都無法蓋在原生元件上。
canvas和遮罩互動同時存在時,
canvas會在遮罩的上層。
- 在
- canvas
外包覆一層結構,透過條件(遮罩的開關)來設定
canvas容器的
hidden屬性。
- 透過
cover-view
、
cover-image#自訂元件,
cover-view透過定位,提升層級,可防止被
canvas覆蓋。
- 因為後面插入的原生元件可以覆寫先前的原生元件,所以,要注意:
- 結構上,cover-view
一定要在
canvas後邊
; 可以透過 - flex
和
order來調整展示順序。
只有 - 最外層cover-view
才支援
#position: fixed。
- 結構上,cover-view
typeof
#wx:if語句中,不能使用
typeof運算符,
{{}}中不能使用
typeof運算符,只能在
wxs中使用。
data初始化賦值
不知道data什麼時機初始化,但,初始化data的時候,不能使用
this指向目前元件實例(這是
this === void 0),也就是說,
data初始化只能給一個
常數。
properties或
methods來初始化
data的時候,只能在生命週期
attached中透過
this.setData更新
data的值。
而且,如果data.fn = this.methodName
,methodName
中如果调用了this
引用,这时this
指向的是data
,所以需要使用data.fn = this.methodName.bind(this)
。
vant-weapp库中的popup样式设置
popup
内容的大小不是由内容撑起来的,需要通过popup
组件的custom-class
定义一个类名,设置width
、height
来定义内容的尺寸。
vant-tree-select事件触发
在Taro
中的代码风格类React
,而vant-weapp
库中的代码风格为wxml
和wxs
风格。React
绑定事件是驼峰式,wxml
绑定事件是使用-
连字符分隔。
这就造成了Taro
使用vant-tree-select
组件时,onClickNav
和onClickItem
不会被vant-tree-select
识别,事件无法触发。
解决方案:对vant-tree-select
进行二次封装,事件原始触发通过this.$triggerEvent
传出驼峰式的事件类型,在Taro
中调用。
目前vant-weapp0.5.20
中,vant-tree-select
不支持单选。
props获取不到
驼峰式命名的事件无法触发[微信小程序]
注意@tarojs/cli
的版本,如最初用的1.2.0
版本就获取不到自定义组件传的参数,升级到最新版1.3.15
就可以了。
注意@tarojs/cli
的版本,如最初用的1.2.0
版本无法触发驼峰式命名的事件,升级到最新版1.3.15
,使用onClick-nav
形式绑定事件就可以了。
<span style="font-size: 14px;">Taro</span>
编译器无法自动将用到组件的<span style="font-size: 14px;">.wxs</span>
文件移动到<span style="font-size: 14px;">/dist</span>
相应目录下
手动移动。
在<span style="font-size: 14px;">微信开发者工具</span>
中运行<span style="font-size: 14px;">Taro</span>
代码,如果有<span style="font-size: 14px;">async/await</span>
,则regenerator is not defined。
将微信开发者工具
--> 右上角详情
--> 本地设置
里的配置全部关掉,如ES6转ES5
...。
定制echarts,引入报错
echarts.js
不需要再次编译,配置中新增编译时忽略echarts.js
。
weapp: { ... compile: { exclude: ['src/echarts-for-weixin/ec-canvas/echarts.js'] } }
getState()获取Store存储的数据
可以在<span style="font-size: 14px;">(dispatch, getState) => {</span>
中使用。
真机调试正常,预览/体验版空白(只有tabbar)
将"本地设置"--> "上传时进行代码保护"取消勾选。
<span style="font-size: 14px;">Taro</span>
中<span style="font-size: 14px;">className=''</span>
单引号赋值不起作用。
className
的值使用双引号包裹。
<span style="font-size: 14px;">Taro</span>
自定义组件内部使用<span style="font-size: 14px;">iconfont</span>
,不显示图标
参照外部样式类、全局样式类。
或者,组件单独引入iconfont.css
也可以。
获取路由参数
this.$router.params
<span style="font-size: 14px;">iconfont</span>
字符串渲染
如果将字体做变量使用,通用情况下无法正常显示。
- 需要将
icon: ['', '']
改写成icon: ['\ue61e', '\ue62d']
。 <rich-text nodes="{}"></rich-text>
使用Taro/微信小程序同步接口,仍异步返回结果
如使用Taro.getStorageSync('key')
获取缓存数据,结果仍是异步返回。同步接口需要结合await
使用,才是真正的同步。
分包
包大小限制
- 包超过2048KB,无法上传
分包操作
-
主包不需要特殊处理。
- navigateTab导航的页面必须在主包中。
-
分包
- 分包在
subPackages
配置。
- 分包在
pages: [ 'pages/login/login', 'pages/index/index', 'pages/manage/manage', 'pages/schedule/schedule', 'pages/inpidual/inpidual' ], 'subPackages': [ { 'root': 'pages-main', name: 'main', 'pages': [ 'acs/acs', 'acs-setting/acs-setting', 'setting-details/setting-details', 'current-energy/current-energy', 'history-energy/history-energy', 'electricity/electricity', 'runtime/runtime', 'daily-usage/daily-usage', 'onshift-record/onshift-record', 'schedule-details/schedule-details' ] }, ],
伪动态绑定事件
// index.wxml <input>
// index.js Component({ data: { changeValidate: '', inputValidate: '', blurValidate: '', eventType: 'input', rules: '', value: '', isRequired: false, validateState: '', //['validating', 'success', 'error'] validateMessage: '' }, observers: { rules(newV) { console.log('------=======') this.setData({ [`${this.data.eventType}Validate`]: 'onBlurValidate' }) } }, methods: { onBlurValidate (e) { this.onValidate(e, rule) }, onValidate (e, rule) { } } })
获取组件实例
refFormItem = (node, idx) => { if(this.formItem) { !this.formItem.includes(node) && this.formItem.push(node) } else { this.formItem = [node] } } ... clearValidate () { console.log(this.formItem) this.formItem.forEach(item => { item.clearValidate() }) } ... render () { const { fieldMetas } = this.props; return () }
styleIsolation: "apply-shared"
对于options.styleIsolation = "apply-shared"
的应用:
如果是组件包裹组件,内部组件设置该配置,外部组件的样式依旧无法影响内部组件,Page()或Component()注册的页面级的样式才能影响到组件内部样式。
推荐教程:《微信小程序》
以上是微信小程式開發初次體驗的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Atom編輯器mac版下載
最受歡迎的的開源編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具

WebStorm Mac版
好用的JavaScript開發工具