一、技術背景
二、需求
三、功能實現
根據釘釘開發文檔進行釘釘小程序原生開發https://ding-doc.dingtalk.com/doc#/dev/ed25rr
四、釘釘小程序與微信小程序的區別
可參考:https://www.cnblogs.com/dora-zc/p/10963644.html
五、開發中遇到的問題及解決方案:
1、dd.navigateTo跳轉到 tabbar 頁面,底部不顯示tab 欄?
解決方案:dd.navigateTo 和 dd.redirectTo 不允許跳轉到 tabbar 頁面;如果需要跳轉到 tabbar 頁面,請使用 dd.switchTab。
2、登錄頁面報錯:setState(...): Can only update a mounted or mounting component. This usually means you called setState() on an unmounted component. This is a no-op.Please check the code for the xxx component.
原因:登錄頁面用了計時器,當頁面跳轉到主頁后,登錄頁被關閉,但計時器的setData依然在執行
解決方案:在onUnload里執行清除計時器 → onUnload() { this.countdownHoldStop()},
3、事件如何傳參?
(1)給組件設置data-*屬性,如:<view class="item-box" data-item="{{item}}" onTap="toSignedDetailPage">
(2)獲取參數:toSignedDetailPage(event){console.log(event.target.dataset.item)}
4、當參數為對象或數組時,頁面跳轉時如何傳遞參數?
解決方案:
(1)通過encodeURIComponent() 函數可以把字符串作為 URI 組件來進行編碼,例如:
let detailData=JSON.stringify(event.target.dataset.itemDetail)
dd.navigateTo({ url: '/pages/signedDetail/signedDetail?detailData='+encodeURIComponent(detailData) })
(2)在跳轉到目標頁面接收時用decodeURIComponent對URI 組件進行解碼,后面在通過JSON.parse()將變量還原,這樣子就能達到預期效果了。
例如:let jsonData=decodeURIComponent(query.detailData)
5、scroll-view(可滾動視圖區域)設置height:100%或flex:1無效
解決方案:可以動態計算高度或者使用height:calc(100vh) 。一定要給 scroll-view 設置方向屬性 如:scroll-y="{{true}}"
6、父子組件如何通信?
https://www.cnblogs.com/wgl0126/p/11419345.html
7、各個單獨頁面的json文件的defaultTitle配置不生效?
解決方案:通過dd.setNavigationBar設置,例如: dd.setNavigationBar({title: "登錄"}),放在onLoad里
六、釘釘小程序存在的bug
1、dd.showToast經常不起作用
2、canvas執行clearRect()清除后依然存在,不能有效清除
3、自定義組件路徑一定要放在項目根目錄,否則會解析不出來
七、釘釘小程序H5集成