Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 国产精品日本亚洲777,中文字幕高清在线,日本在线视频免费观看

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          html5遷移到微信小程序的 方法 親測(cè)可用

          圖網(wǎng)習(xí)慣于在做小程序之前先做成html5+vuejs的形式,因?yàn)閔tml5切圖是我們比較熟悉的方式,而且有專(zhuān)業(yè)的工具 以及瀏覽器調(diào)試也會(huì)更加的方便 靈活,效率高,而且html5的方式可以方便預(yù)覽看效果,方便調(diào)整,當(dāng)html5頁(yè)面做好確認(rèn)沒(méi)問(wèn)題以后 再轉(zhuǎn)成小程序或者官方出品wepy的方式,這個(gè)時(shí)候就需要找到html5和小程序之間的微妙不同,需要做以下調(diào)整,親測(cè)可用。

          css需要調(diào)整的

          把css中的px改為rpx,可以借助工具批量替換,如果使用的工具是 vscode 可以用插件 px to rpx,如果是hbuilder可以執(zhí)行批量替換。

          html需要調(diào)整的

          1. p 改為 view
          2. span、i 改為 label
          3. @click 改為 @tap
          4. img 改為 image
          5. a href 改
          6. :style=”” 改為 style=”{{}}”

          js需要調(diào)整的

          this.$router.push({
          path: ‘/course-detail’,
          query: {
          caseCode: ‘123’
          }
          })

          挑戰(zhàn)30天在頭條寫(xiě)日記#

          WePY (發(fā)音: /'wepi/)是一款讓小程序支持組件化開(kāi)發(fā)的框架,通過(guò)預(yù)編譯的手段讓開(kāi)發(fā)者可以選擇自己喜歡的開(kāi)發(fā)風(fēng)格去開(kāi)發(fā)小程序。框架的細(xì)節(jié)優(yōu)化,Promise,Async Functions 的引入都是為了能讓開(kāi)發(fā)小程序項(xiàng)目變得更加簡(jiǎn)單,高效。




          同時(shí) WePY 也是一款成長(zhǎng)中的框架,大量吸收借鑒了一些優(yōu)化前端工具以及框架的設(shè)計(jì)理念和思想。如果 WePY 有不足地方,或者你有更好的想法,歡迎提交 ISSUE 或者 PR。

          特性:

          • 類(lèi) Vue 開(kāi)發(fā)風(fēng)格
          • 支持自定義組件開(kāi)發(fā)
          • 支持引入 NPM 包
          • 支持 Promise
          • 支持 ES2015+ 特性,如 Async Functions
          • 支持多種編譯器,Less/Sass/Stylus/PostCSS、Babel/Typescript、Pug
          • 支持多種插件處理,文件壓縮,圖片壓縮,內(nèi)容替換等
          • 支持 Sourcemap,ESLint 等
          • 小程序細(xì)節(jié)優(yōu)化,如請(qǐng)求列隊(duì),事件優(yōu)化等

          Demo

          <style lang="less">
          @color: #4D926F;
            .num {
            color: @color;
            }
          </style>
          <template>
            <div class="container">
              <div class="num" @tap="num++">
                {{num}}
              </div>
              <custom-component></custom-component>
              <vendor-component></vendor-component>
              <div>{{text}}</div>
              <input v-model="text"/>
            </div>
          </template>
          <config>
          {
            usingComponents: {
              customComponent: '@/components/customComponent',
              vendorComponent: 'module:vendorComponent'
            }
          }
          </config>
          
          <script>
            import wepy from '@wepy/core';
          
            wepy.page({
              data: {
                num: 0,
                text: 'Hello World',
              },
            });
          </script>

          安裝使用

          安裝(更新) wepy 命令行工具。

          npm install @wepy/cli@next -g

          生成開(kāi)發(fā)示例

          wepy init standard myproject

          安裝依賴(lài)

          cd myproject
          npm install

          開(kāi)發(fā)實(shí)時(shí)編譯

          wepy build --watch

          開(kāi)發(fā)者工具導(dǎo)入項(xiàng)目

          使用微信開(kāi)發(fā)者工具新建項(xiàng)目,本地開(kāi)發(fā)選擇項(xiàng)目根目錄,會(huì)自動(dòng)導(dǎo)入項(xiàng)目配置。

          WePY 實(shí)例

          宿主環(huán)境


          我們稱(chēng)微信客戶端給小程序所提供的環(huán)境為宿主環(huán)境。小程序借助宿主環(huán)境提供的能力,可以完成許多普通網(wǎng)頁(yè)無(wú)法完成的功能。 更多小程序原理的相關(guān)知識(shí)可參考小程序官方文檔。

          程序與頁(yè)面

          原生小程序中,每個(gè)頁(yè)面擁有獨(dú)自的一個(gè)頁(yè)面實(shí)例 Page,整個(gè)小程序只有一個(gè) App 實(shí)例,是全部頁(yè)面共享的。

          同樣的,在 WePY 的環(huán)境當(dāng)中,每個(gè) WePY 頁(yè)面擁有獨(dú)自的 WepyPage 實(shí)例。小程序也會(huì)有 WepyApp 實(shí)例。它們并非是繼承自原生的 Page 和 App。WePY 提供 wepy.appwepy.pagewepy.component 等入口 方法注冊(cè)程序、頁(yè)面、以及組件。注冊(cè)后在組件的生命周期事件(onLaunch/onLoad/created)里,會(huì)自動(dòng)創(chuàng)建相對(duì)應(yīng)的 WePY 實(shí)例。

          入口


          注冊(cè) App

          1. 在指定位置新建 app.wpy,默認(rèn)位置:src/app.wpy,具體配置可參考 編譯器配置文件
          2. <script> 塊內(nèi)使用 wepy.app 方法注冊(cè)
          <!-- app.wpy -->
          
          <script>
          import wepy from '@wepy/core'
          
          wepy.app({
            // 選項(xiàng)
          })
          </script>

          使用入口方法注冊(cè) App 時(shí),可以傳入一個(gè)參數(shù)對(duì)象。這篇教程主要描述的就是如何使用這些選項(xiàng)來(lái)創(chuàng)建你想要的行為。

          注冊(cè)頁(yè)面

          1. app.wpy<config> 代碼塊中注冊(cè)頁(yè)面信息
          <!-- app.wpy -->
          
          <config>
          {
            "pages": [
              "pages/example"
            ]
          }
          </config>
          1. 新建 pages/example.wpy 文件
          2. <script> 塊內(nèi)添加 Page 注冊(cè)方法
          <!-- pages/example.wpy -->
          
          <script>
          import wepy from '@wepy/core'
          
          wepy.page({
            // 選項(xiàng)
          })
          </script>

          注冊(cè) Page 時(shí),可以傳入一個(gè)參數(shù)對(duì)象。這篇教程主要描述的就是如何使用這些選項(xiàng)來(lái)創(chuàng)建你想要的行為。

          WePY 2.0 中,Page 同樣是使用小程序原生的 Component 方法進(jìn)行注冊(cè)的。

          注冊(cè)組件

          1. 新建 components/comA.wpy 文件
          2. <script> 塊內(nèi)添加 component 實(shí)例
          <!-- components/comA.wpy -->
          
          <script>
          import wepy from '@wepy/core'
          
          wepy.component({
            // 選項(xiàng)
          })
          </script>
          1. 在需要引用組件的頁(yè)面配置中添加組件信息,如需要在 pages/example.wpy 頁(yè)面中新增 comA 組件,則在 pages/example.wpy<config> 塊中添加如下信息:
          <!-- pages/example.wpy -->
          
          <config>
          {
            "usingComponents": {
              "comA": "components/comA"
            }
          }
          </config>

          與 WePY 1 或者 Vue 不同的是,組件的引用方式保留了原生的 usingComponents 方式。不可以使用 import 的方式導(dǎo)入。

          數(shù)據(jù)與方法


          使用 wepy.page 或者 wepy.component 注冊(cè)頁(yè)面或者組件時(shí),它將 data 對(duì)象中的所有的屬性加入到 wepy 的 響應(yīng)式系統(tǒng) 中。當(dāng)這些屬性的值發(fā)生改變時(shí),視圖將會(huì)產(chǎn)生“響應(yīng)”,即匹配更新為新的值。

          wepy.page({
            data: {
              a: 1
            },
            plus: function () {
              // 點(diǎn)擊 “+“ 按鈕式觸發(fā)
              this.a++
            }
          })

          當(dāng)這些數(shù)據(jù)改變時(shí),視圖會(huì)進(jìn)行重渲染。值得注意的是只有當(dāng)實(shí)例被創(chuàng)建時(shí) data 中存在的屬性才是響應(yīng)式的。也就是說(shuō)如果你添加一個(gè)新的屬性,比如:

          wepy.page({
            data: {
              a: 1
            },
            plus: function () {
              // 點(diǎn)擊 “+“ 按鈕式觸發(fā)
              this.a++
            },
            sayHi: function () {
              this.b = 'hi'
            }
          })

          那么對(duì) b 的改動(dòng)將不會(huì)觸發(fā)任何視圖的更新。如果你知道你會(huì)在晚些時(shí)候需要一個(gè)屬性,但是一開(kāi)始它為空或不存在,那么你僅需要設(shè)置一些初始值。比如:

          wepy.page({
            data: {
              newTodoText: '',
              visitCount: 0,
              hideCompletedTodos: false,
              todos: [],
              error: null
            }
          })

          生命周期回調(diào)函數(shù)

          WePY 單文件組件

          WePY 單文件組件主要由 <script><template><style><config> 四部分組成(也包括小程序 <wxs> 標(biāo)簽)。

          App 生命周期

          wepy.app 注冊(cè) App 是直接調(diào)用原生 App 方法進(jìn)行 App 注冊(cè),生命周期與原生一致。可參見(jiàn)官方文檔 App

          頁(yè)面生命周期

          wepy.page 本質(zhì)上也是調(diào)用原生方法 Component 注冊(cè)頁(yè)面,因此它包含了 Component 的完整生命周期。同時(shí),為了兼容對(duì)原有 Page 的使用習(xí)慣,也保留了所有 Page 特有的生命周期事件。

          通過(guò) Page({}) 注冊(cè)頁(yè)面

          通過(guò) wepy.page({}) 注冊(cè)頁(yè)面

          說(shuō)明

          onLoad

          onLoad

          參看官方文檔 Page

          onShow

          onShow

          同上

          onReady

          onReady

          同上

          onHide

          onHide

          同上

          onUnload

          onUnload

          同上

          onPullDownRefresh

          onPullDownRefresh

          同上

          onReachBottom

          onReachBottom

          同上

          onShareAppMessage

          onShareAppMessage

          同上

          onPageScroll

          onPageScroll

          同上

          onResize

          onResize

          同上

          onTabItemTap

          onTabItemTap

          同上

          onAddToFavorites

          onAddToFavorites

          同上

          -

          created

          參看官方文檔 Component

          -

          attached

          同上

          -

          ready

          同上

          -

          moved

          同上

          -

          detached

          同上

          -

          error

          同上

          組件生命周期

          wepy component 實(shí)例生命周期與原生小程序的 組件生命周期 一致,在 wepy component 實(shí)例中,您可以使用如下生命周期鉤子:

          wepy.component 注冊(cè)組件除了原生的 Component 生命周期外,還定義了某些其它生命周期。

          通過(guò) Component({}) 注冊(cè)頁(yè)面

          通過(guò) wepy.component({}) 注冊(cè)頁(yè)面

          說(shuō)明

          -

          beforeCreate

          本質(zhì)上與wepy.created 一樣都是在 Component.created 階段觸發(fā),但 wepy.beforeCreate 在 Component.created 剛進(jìn)入時(shí)觸發(fā),然后進(jìn)行 WePY 的 data, props, methods 等等初始化,完成后再觸發(fā) wepy.created

          created

          created

          參看官方文檔 Component

          attached

          attached

          同上

          ready

          ready

          同上

          moved

          moved

          同上

          detached

          detached

          同上

          error

          error

          同上

          生命周期函數(shù)補(bǔ)充與修改

          不排除一些情況,小程序進(jìn)行版本庫(kù)升級(jí)后,添加或者刪除了新的生命周期函數(shù),而且 WePY 并沒(méi)有及時(shí)的進(jìn)行更新,而且導(dǎo)致無(wú)法使用最新的生命周期函數(shù)。在這種情況下,開(kāi)發(fā)者通過(guò)參數(shù)自行添加最新的生命周期函數(shù)。使用方法如下:

          wepy.app({ ... }, {
            lifecycle: {
              // 定義要添加生命周期到 app 或者 page 或者 component
              // 值類(lèi)型為:String 或者 Array 或者 Function
              // 值為需要添加的生命周期一個(gè)或者多個(gè)函數(shù)名,或者返回生命周期的函數(shù)數(shù)組的方法
              app: 'onSomeTime', // 給 App 添加一個(gè) `onSomeTime` 生命周期函數(shù)
              page: ['onTime1', 'onTime2'], // 給 Page 添加兩個(gè)生命周期函數(shù)
              component: function (lifecycles) {  // 刪除 Component 最后一個(gè)生命周期函數(shù)
                lifecycles.pop();
                retrun lifecycles;
              }
            }
          })

          生命周期圖示

          下圖展示了 頁(yè)面/組件 實(shí)例的生命周期。你不需要立馬弄明白所有的東西,不過(guò)隨著你的不斷學(xué)習(xí)和使用,它的參考價(jià)值會(huì)越來(lái)越高。

          模板語(yǔ)法

          WePY 繼承了 WXML 的基本模板語(yǔ)法,并支持大部分 Vue 模板語(yǔ)法。

          WXML(WeiXin Markup Language)是框架設(shè)計(jì)的一套標(biāo)簽語(yǔ)言,用來(lái)描述小程序頁(yè)面的結(jié)構(gòu)

          同時(shí),WePY 允許你使用大部分 HTML 模板標(biāo)簽,經(jīng)編譯器編譯后,會(huì)將模板標(biāo)簽的轉(zhuǎn)換成標(biāo)準(zhǔn)的 WXML 模板語(yǔ)法。

          模板標(biāo)簽


          轉(zhuǎn)換流程

          HTML 模板標(biāo)簽映射表

          標(biāo)簽

          轉(zhuǎn)換后

          select

          picker

          datalist

          picker

          img

          image

          source

          audio

          video

          video

          track

          video

          a

          navigator

          span

          label

          其它

          view

          數(shù)據(jù)綁定


          以下案例均使用 HTML 模板標(biāo)簽作為參考

          文本

          數(shù)據(jù)綁定最常見(jiàn)的形式就是使用“Mustache”語(yǔ)法 (雙大括號(hào)) 的文本插值:

          <div>hello, {{ name }}</div>

          Mustache 標(biāo)簽將會(huì)被替代為對(duì)應(yīng)數(shù)據(jù)對(duì)象上 name 屬性的值。無(wú)論何時(shí),綁定的數(shù)據(jù)對(duì)象上 name 屬性發(fā)生了改變,插值處的內(nèi)容都會(huì)更新。

          組件屬性

          • 使用 v-bind 指令
          <div v-bind:id="id"></div>

          此時(shí)不能使用 Mustache 語(yǔ)法

          • 使用 原生小程序 的方式
          <div id="{{ id }}"></div>

          此時(shí)必須使用 Mustache 語(yǔ)法

          控制屬性

          • 使用 v-if 指令
          <div v-if="condition"></div>

          此時(shí)不能使用 Mustache 語(yǔ)法

          • 使用 原生小程序 的方式
          <div wx:if="{{ condition }}"></div>

          此時(shí)必須使用 Mustache 語(yǔ)法

          事件

          兩種方式均不能使用 Mustache 語(yǔ)法

          • 使用 v-on 指令
          <div v-on:tap="tapHandler"></div>
          
          <!-- or -->
          <div @tap="tapHandler"></div>
          • 使用 原生小程序 的方式
          <div bindtap="tapHandler"></div>

          運(yùn)算

          可以在 {{}} 內(nèi)進(jìn)行簡(jiǎn)單的運(yùn)算,目前支持原生小程序的所有運(yùn)算方式,如下:

          三元運(yùn)算

          {{ ok ? 'YES' : 'NO' }}

          算數(shù)運(yùn)算

          {{ a + b }}

          邏輯判斷

          {{ length > 5 }}

          字符串運(yùn)算

          {{ "hello" + name }}

          數(shù)據(jù)路徑運(yùn)算

          {{ object.key }}
          {{ array[0] }}

          組合

          也可以在 Mustache 內(nèi)直接進(jìn)行組合,構(gòu)成新的對(duì)象或者數(shù)組,詳情請(qǐng)閱讀 小程序官方文檔

          條件渲染

          WePY 推薦使用 v-showv-if 控制條件渲染


          • wx:if
          // example 01
          <div wx:if="{{ condition }}"></div>
          
          // example 02
          <div wx:if="{{ condition2 }}"></div>
          <div wx:else></div>
          
          // example 03
          <div wx:if="{{ condition3 }}"></div>
          <div wx:elif="{{ condition4 }}"></div>
          <div wx:else></div>
          • hidden
          <div hidden="{{ condition }}"></div>

          Vue 綁定語(yǔ)法


          • v-if
          // example 01
          <div v-if="condition"></div>
          
          // example 02
          <div v-if="condition2"></div>
          <div v-else></div>
          
          // example 03
          <div v-if="condition3"></div>
          <div v-else-if="condition4"></div>
          <div v-else></div>

          編譯后:

          // example 01
          <view wx:if="{{ condition }}"></view>
          
          // example 02
          <view wx:if="{{ condition2 }}"></view>
          <view wx:else></view>
          
          // example 03
          <view wx:if="{{ condition3 }}"></view>
          <view wx:elif="{{ condition4 }}"></view>
          <view wx:else></view>
          • v-show
          <div v-show="condition"></div>

          編譯后:

          <view hidden="{{ !condition }}"></view>

          列表渲染

          WePY 2 推薦使用 Vue v-for 指令進(jìn)行列表渲染


          編譯前:

          // example 01
          <div v-for="item in array">{{index}}: {{item.message}}</div>
          
          // example 02
          <div v-for="(item, idx) in array">
            {{idx}}: {{itemName.message}}
          </div>

          編譯后:

          // example 01
          <view wx:for="{{array}}">{{index}}: {{item.message}}</view>
          
          // example 02
          <view wx:for="{{array}}" wx:for-index="idx" wx:for-item="itemName">
            {{idx}}: {{itemName.message}}
          </view>

          事件處理

          未特殊提及的信息可優(yōu)先參考 vue官方文檔

          原理

          小程序原生的事件系統(tǒng) 使用bindcatch 等關(guān)鍵字進(jìn)行事件監(jiān)聽(tīng)。 而在 WePY 中,事件沿用了 Vue 的風(fēng)格,使用 v-on 或者是 @ 操作符進(jìn)行事件監(jiān)聽(tīng)。同時(shí) WePY 中會(huì)有一個(gè)統(tǒng)一的事件分發(fā)器接管原生事件。大致如下圖:

          WePY 在編譯過(guò)程中,會(huì)找到所有監(jiān)聽(tīng)事件,并為其分配事件 ID。同時(shí)將事件代碼(可以是一個(gè)方法,也可以是一個(gè)簡(jiǎn)單的代碼片段)注入至 JS 代碼中。 然后當(dāng)事件分發(fā)器接收到原生事件時(shí),會(huì)通過(guò)事件 ID,分發(fā)到相應(yīng)的事件邏輯當(dāng)中。

          這樣做的好處主要是:

          1. 可控性更強(qiáng)。用戶可利用相關(guān)鉤子函數(shù)從而處理全局的用戶事件。(典型場(chǎng)景:為頁(yè)面全部按鈕統(tǒng)一增加一個(gè)點(diǎn)擊上報(bào)功能)
          2. 靈活度更高。相對(duì)于原生只能使用函數(shù)名的方式來(lái)說(shuō),還可使用簡(jiǎn)單代碼片段。(典型場(chǎng)景:@tap="num++")

          事件監(jiān)聽(tīng)

          WePY 不僅可以支持到響應(yīng)事件監(jiān)聽(tīng),也可以支持到像 Web 原生,或者 Vue 的那種,使用簡(jiǎn)單代碼片段的監(jiān)聽(tīng)方式,示例如下:

          <template>
            <!-- 使用代碼片段響應(yīng)事件 -->
            <button @tap="num =+ 1">Counter - {{num}}</button> 
          
            <!-- 類(lèi)原生方式,使用事件函數(shù)響應(yīng)事件 -->
            <button @tap="handler">Handle my event</button>
          
            <!-- 類(lèi)Vue方式,原生不支持?jǐn)y帶參數(shù) -->
            <button @tap="handlerWithArgs(1, 2)">Handle my event with arguments</button>
          </template>
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
            data: {
              num: 0,
            },
            methods: {
              handler() {
                // do something
              },
              handlerWithArgs(a, b) {
                console.log(a, b);
              }
            }
          })
          </script>

          注: 原生小程序中使用 <div data-hi="1"></div> 的方式傳遞參數(shù),然后使用 event.currentTarget.dataset.hi 的方式獲取參數(shù)。 在 WePY 中請(qǐng)盡量使用攜帶參數(shù)響應(yīng)事件去完成參數(shù)的傳遞與獲取。WePY 會(huì)在編譯時(shí)為你綁定 data-xxx 并且在事件分發(fā)器中貼心的為你處理好參數(shù)的。

          特殊參數(shù)支持

          小程序原生事件會(huì)傳遞一個(gè) event 參數(shù)。而 WePY 的事件分發(fā)器在處理事件時(shí)會(huì)有一個(gè) $event 參數(shù)。 $event 參數(shù)是對(duì) event 進(jìn)行了一層包裝,目地是為了無(wú)侵入地對(duì)齊 Web Event 標(biāo)準(zhǔn)屬性。而其中 $event.$wx === event。 因此,WePY 中響應(yīng)事件獲得的事件參數(shù)均是指 $event。如果想拿到原生事件參數(shù),請(qǐng)使用 $event.$wx

          當(dāng)使用類(lèi)原生方式,使用響應(yīng)事件方法名進(jìn)行事件監(jiān)聽(tīng)時(shí),響應(yīng)事件會(huì)接收到一個(gè) $event 參數(shù)。 當(dāng)使用帶參函數(shù)進(jìn)行事件監(jiān)聽(tīng)時(shí),默認(rèn)不會(huì)拿到事件的 $event。 該行為與 Vue 行為是一致的。此時(shí)若想拿到 $event 需要指定 $event 參數(shù)。

          示例:

          <!-- click 會(huì)接收到一個(gè) $event 參數(shù) -->
          <button @tap="click">Click</button>
          
          <!-- click 會(huì)接收一個(gè)為 1 的參數(shù) -->
          <button @tap="click(1)">Click</button>
          
          <!-- click 會(huì)接受兩個(gè)參數(shù): 1, $event -->
          <button @tap="click(1, $event)"

          事件修飾符

          小程序的事件系統(tǒng)中,可以使用 bind, catch, capture-bind, capture-catch 等來(lái)處理事件的冒泡與捕獲,其中區(qū)別請(qǐng)參考官方文檔。

          在 WePY 中,使用修飾符來(lái)完成這一動(dòng)作,相對(duì)來(lái)說(shuō)更加靈活與易讀。示例:

          <!-- 等同于 bind:tap -->
          <div @tap="myclick"></div>
          
          <!-- 等同于 catch:tap -->
          <div @tap.stop="myclickStop"></div>
          
          <!-- 等同于 capture-bind:tap -->
          <div @tap.capture="myclickCapture"></div>
          
          <!-- 等同于 capture-catch:tap -->
          <div @tap.stop.capture="myclickCaptureStop"></div>
          
          <!-- 等同于 capture-catch:tap 修飾符中無(wú)先后關(guān)系 -->
          <div @tap.capture.stop="myClickCaptureStopWithParams"></div>
          

          stop 修飾符

          作用:標(biāo)識(shí)取消事件冒泡,對(duì)應(yīng)原生事件中的 catch

          在下邊這個(gè)例子中,點(diǎn)擊 inner view 會(huì)先后調(diào)用 handleTap3handleTap2 (因?yàn)閠ap事件會(huì)冒泡到 middle view,而 middle view 阻止了 tap 事件冒泡,不再向父節(jié)點(diǎn)傳遞),點(diǎn)擊 middle view 會(huì)觸發(fā) handleTap2,點(diǎn)擊 outer view 會(huì)觸發(fā) handleTap1

          <div id="outer" @tap="handleTap1">
            outer view
            <div id="middle" @tap.stop="handleTap2">
              middle view
              <div id="inner" @tap="handleTap3">
                inner view
              </div>
            </div>
          </div>
          

          capture 修飾符

          作用:標(biāo)識(shí)事件捕獲階段,對(duì)應(yīng)原生事件中的 capture-xxxx

          捕獲階段位于冒泡階段之前,且在捕獲階段中,事件到達(dá)節(jié)點(diǎn)的順序與冒泡階段恰好相反。需要在捕獲階段監(jiān)聽(tīng)事件時(shí),可以采用 .capture.capture.catch 修飾符,后者將中斷捕獲階段和取消冒泡階段。

          在下面的代碼中,點(diǎn)擊 inner view 會(huì)先后調(diào)用 handleTap2handleTap4handleTap3handleTap1

          <div id="outer" @touchstart="handleTap1" @touchstart.capture="handleTap2">
            outer view
            <div id="inner" @touchstart="handleTap3" @touchstart.capture="handleTap4">
              inner view
            </div>
          </div>

          如果將上面代碼中的第一個(gè) capture 后面加一個(gè) catch 修飾符,將只觸發(fā) handleTap2

          <div id="outer" @touchstart="handleTap1" @touchstart.capture.catch="handleTap2">
            outer view
            <div id="inner" @touchstart="handleTap3" @touchstart.capture="handleTap4">
              inner view
            </div>
          </div>

          wxs 修飾符


          作用:標(biāo)識(shí)使用WXS函數(shù)響應(yīng)事件

          小程序基礎(chǔ)庫(kù) 2.4.4 開(kāi)始支持,低版本需做兼容處理

          wxs 響應(yīng)事件的背景及實(shí)現(xiàn)方案,參考 小程序官方文檔

          <wxs module="test" src="./test.wxs"></wxs>
          <div change:prop="{{test.propObserver}}" :prop="propValue" @touchmove.wxs="test.touchmove" class="movable"></div>
          

          上面的 change:prop(屬性前面帶 change: 前綴)是在 prop 屬性被設(shè)置的時(shí)候觸發(fā) WXS 函數(shù),值必須用{{}}括起來(lái)。在 propValue 值發(fā)生變化之后會(huì)觸發(fā)。

          當(dāng) prop 屬性的值被設(shè)置 WXS 函數(shù)就會(huì)觸發(fā),而不只是值發(fā)生改變,所以在頁(yè)面初始化的時(shí)候會(huì)調(diào)用一次 WXS 中 propObserver 的函數(shù)。

          WXS 文件 test.wxs 里面定義并導(dǎo)出事件處理函數(shù)和屬性改變觸發(fā)的函數(shù):

          module.exports = {
            touchmove: function(event, instance) {
              console.log('log event', JSON.stringify(event))
            },
            propObserver: function(newValue, oldValue, ownerInstance, instance) {
              console.log('prop observer', newValue, oldValue)
            }
          }
          

          mut 修飾符


          作用:標(biāo)識(shí)使用互斥事件

          小程序基礎(chǔ)庫(kù) 2.8.2 開(kāi)始支持,低版本需做兼容處理 該修飾符 WePY 暫不支持

          表單輸入綁定

          v-model 本質(zhì)上是語(yǔ)法糖,它會(huì)根據(jù)控件類(lèi)型自動(dòng)選取正確的方法來(lái)更新元素

          • input 和 textarea 元素使用 value 作為 prop ,并通過(guò) input 事件觸發(fā) v-model 屬性值的更新。
          • picker,checkbox-group,radio-group 元素將使用 value 作為 prop ,并通過(guò) change 事件觸發(fā) v-model 屬性值的更新。
          • switch 元素將使用 checked 作為 prop ,并通過(guò) change 事件觸發(fā) v-model 屬性值的更新。

          基礎(chǔ)用法

          輸入框 input

          <input v-model="inputmodel" />
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  inputmodel: ''
              }
          })
          </script>

          多行文本 textarea

          <textarea v-model="inputmodel" />
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  inputmodel: ''
              }
          })
          </script>

          picker

          <picker v-model="pickermodel" range="{{array}}">
              <div class="picker">
                  當(dāng)前選擇:{{pickermodel}}
              </div>
          </picker>
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  array: ['美國(guó)', '中國(guó)', '巴西', '日本'],
                  pickermodel: ''
              }
          })
          </script>
          

          switch

          <switch v-model="switchmodel" />
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  switchmodel: ''
              }
          })
          </script>

          radio

          小程序的radio目前不支持 change 事件, 請(qǐng)使用radio-group標(biāo)簽

          <radio-group v-model="radiomodel">
              <label>
                  <div>
                      <radio value="美國(guó)"></radio>
                  </div>
              </label>
          </radio-group>
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  radiomodel: ''
              }
          })
          </script>

          checkbox

          小程序的checkbox目前不支持 change 事件, 請(qǐng)使用checkbox-group標(biāo)簽

          <checkbox-group v-model="checkboxmodel">
              <label>
                  <div>
                      <checkbox value="美國(guó)"></checkbox>
                  </div>
              </label>
          </checkbox-group>
          <script>
          import wepy from '@wepy/core';
          
          wepy.page({
              data: {
                  checkboxmodel: ''
              }
          })
          </script>

          項(xiàng)目地址:

          https://github.com/Tencent/wepy

          ublime下代碼高亮

          文件后綴為.wpy,可共用vue高亮,但需要手動(dòng)安裝。

          1. 打開(kāi)Sublime->Preferences->Browse Packages..進(jìn)入用戶包文件夾。

          2. 在此文件夾下打開(kāi)cmd,運(yùn)行

            git clone git@github.com:vuejs/vue-syntax-highlight.git,無(wú)GIT用戶可以直接下載zip包解壓至當(dāng)前文件夾。

          3. 關(guān)閉.wpy文件重新打開(kāi)即可高亮。

          WebStorm下代碼高亮

          打開(kāi)Preferences,搜索Plugins,搜索Vue.js插件并安裝。

          打開(kāi)Preferences,搜索File Types,找到Vue.js Template,在Registered Patterns添加*.wpy,即可高亮。

          Atom下代碼高亮

          在Atom里先安裝vue的語(yǔ)法高亮 - language-vue,如果裝過(guò)了就忽略這一步。

          打開(kāi)Atom -> Config菜單。在core鍵下添加:

          customFileTypes:

          "text.html.vue": [

          "wpy"

          ]

          Vscode下代碼高亮

          在vscode里先安裝vue的語(yǔ)法高亮 - language-vue,如果裝過(guò)了就忽略這一步。

          在項(xiàng)目根目錄下,建立.vscode目錄

          在.vscode里建立settings.json文件,內(nèi)容如下:

          {

          "git.ignoreLimitWarning": true,

          "files.associations": {

          "*.wxml": "html",

          "*.wxss": "css",

          "*.wpy": "vue"

          }

          }


          主站蜘蛛池模板: 亚洲一区精品中文字幕| 免费播放一区二区三区| 激情综合一区二区三区| 亚洲Av高清一区二区三区| 波多野结衣一区二区三区高清在线| 男人免费视频一区二区在线观看| 在线精品国产一区二区三区 | 麻豆AV一区二区三区久久| 精品一区二区三区AV天堂| 国产成人精品一区二区三区免费| 国产精品免费一区二区三区| 国产品无码一区二区三区在线| 国产精品自拍一区| 国产一区二区三区免费观在线| 偷拍精品视频一区二区三区| 色婷婷亚洲一区二区三区 | 一区二区国产在线播放| 天天综合色一区二区三区| 中文字幕精品一区二区2021年 | 一区二区乱子伦在线播放| 一区二区三区www| 人妻无码一区二区三区四区| 国产精品成人一区无码 | 在线观看一区二区三区av| 日韩精品无码免费一区二区三区 | 日韩AV无码一区二区三区不卡| 午夜一区二区在线观看| 欧美成人aaa片一区国产精品| 国模一区二区三区| 日本在线视频一区| 国产高清在线精品一区二区三区| 中文人妻无码一区二区三区| 国产免费一区二区三区在线观看| 亚洲一区二区成人| 无码人妻精品一区二区三区99性 | 少妇无码一区二区二三区| 无码AV天堂一区二区三区| 国产福利一区二区三区在线观看| 少妇人妻精品一区二区| 国产福利电影一区二区三区,免费久久久久久久精 | 日韩精品一区二区三区老鸭窝|