首頁 >微信小程式 >小程式開發 >微信小程式與頁面wepy框架佈局應用案例分享

微信小程式與頁面wepy框架佈局應用案例分享

php是最好的语言
php是最好的语言原創
2018-07-27 15:29:164761瀏覽

個人道行不深,有瑕疵的多多諒解,我會繼續學習更新更有價值的文章分享給大家的,希望大家多多給予指出與改正,咱們一起來共同學習與進步!這篇文章是關於微信小程式學習,還有wepy框架應用程式。

微信小程式是一種不需要下載安裝即可使用的應用,在國內它在企業推廣中的受歡迎度以及就這兩年的使用及普及熱度,然而就是因為它的備受歡迎度以及越來越被企業所重視,也就形成了咱們開發人員對小程式的開發的掌握;具體它的熱度這裡就不多扯了,而咱重點關心的是開發細節。所以今天咱們就一步一步的剖析和認識一下這個小程式:
一、開發準備工作

1、先登入微信公眾平台 https://mp.weixin.qq.com ,選擇小程式( 沒有註冊過的需要向註冊公眾號碼), 登入後

「設定」-「開發者設定」中,查看微信小程式的AppID

  注:不可直接使用服务号或订阅号的AppID

2、下載開發工具

  下载地址:     https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=1476197489869

3、新專案

  打开并使用微信扫码登录
   选择创建“小程序项目”
   选择一个要创建项目的文件夹(空文件夹)
   输入获取到的 AppID(可以选择不填,但这样会有很多功能受限制)
   输入你的项目名

二、編輯器架構佈局理解

 准备就绪后,进入编辑器进行项目编辑。

每一個小程式頁面是由同路徑下同名的四個不同後綴文件的組成,如:index.js、index.wxml、index.wxss、index.json。

.js後綴的文件是腳本文件,.json後綴的文件是配置文件,.wxss後綴的是樣式表文件,就相當於html中的css文件,

.wxml後綴的文件是頁面結構文件。

app.js是頁面全域功能js,可以在pages裡的專案中呼叫全域資料(gloableData)及其頁面方法.
 app.wxss裡的樣式為頁面全域樣式,但其優先級沒有局部頁面定義的優先順序高。

app.json檔案windows的設定項目一樣為全域設定,pages陣列定義新的頁面,排前面的為進入小程式的展示頁,如下app.json為:

{
     [

      'pages/index',  //放在了前面

      'pages/logs'

     ]
}

微信小程式與頁面wepy框架佈局應用案例分享

三、開發常用元件及標籤分享

微信小程式編輯只能用自己提供的標籤;
view,block標籤為區塊級元素類似p, text標籤為行級元素類似span,這三個標籤用的最頻繁。
表單元素除了H5裡的input、button外有新增了像switch、slider、picker,具體詳情使用可以看元件api。
頁面跳轉標籤navigator用於專案頁面之間的跳轉,但不是a連結因為它不能往網頁頁面跳轉(跳轉用的是webview標籤
eg:
但專案中我更多的是使用事件點擊跳轉,好處是跳轉之前好做判斷

eg:      wx.navigateTo({
                  url:'pages/index?title=navigate'
           })

還有一個常用的標籤是圖片標籤,與h5裡的不同之處是小程式裡的圖片標籤是全拼image,並且是雙標籤

四、開發常用指令及事件分享

和vue的設計模式一樣MVVM  資料渲染{{ data}}
 判斷wx:if,wx:else。eg:
 循環wx:for .
 小程式事件綁定 bindtap 、catchtap
 取得循環序號data-x

<!--在wxml中-->
<view class="contents">
    <button catchtap="choose" wx:if="{{showBtn}}">选择</button>
    <text wx:for="{{arrList}}" wx:key="{{index}}" data-i="{{index}}" data-type="{{item}}" bindtap="selectTab" >{{item}}</text>
</view>
//对应的js中
 data:{
     showBtn:true,
     arrList:[&#39;apple&#39;,&#39;pear&#39;,&#39;orange&#39;]
  },
  choose(){ //选择按钮catchtap的choose事件,catchtap是指点击事件会阻止向上冒泡
     this.setData({ //改变data中的showBtn的值
          showBtn:false
      })
   },
   selectTab(ev){ //列表上bindtap的selectTab事件,bindtap是指点击事件,但不会阻止向上冒泡
       var getAttrType=ev.target.dataset.type;//上面的列表标签里写了data-type,这里就是取到对应上面等于的值
       var index=ev.target.dataset.i;//同样的,上面的列表标签里写了data-i,这里就是取到对应上面等于的值
    }
  onLoad(){//页面加载时
 
   },
  onShow(){//页面显示时
 
  }

五、本機圖片選擇、檔案上傳及服務端資料互動及檔案處理

    本地图片选择wx.chooseImage(OBJECT)
    图片预览wx.previewImage(OBJECT)

    文件上传 wx.uploadFile(OBJECT)

    数据请求 wx.request()

#六、本地資料儲存操作

   wx.setStorageSync
   wx.getStorageSync
   wx.clearStorageSync
//对应的本地图片选择js
 
wx.chooseImage({
    count: 3, // 默认9,假如传张
    sizeType: [&#39;original&#39;, &#39;compressed&#39;], // 可以指定是原图还是压缩图,默认二者都有
    sourceType: [&#39;album&#39;, &#39;camera&#39;], // 可以指定来源是相册还是相机,默认二者都有
    success: function (res) {
          // 返回选定照片的本地文件路径列表,tempFilePath可以作为img标签的src属性显示图片
        var tempFilePaths = res.tempFilePaths    
        wx.previewImage({  //对应的图片预览
          current: temFilePaths[0], // 当前显示图片的链接
          urls: tempFilePaths||[] // 需要预览的图片http链接列表
        })
       wx.uploadFile({ //对应的图片上传
           url: &#39;http://example.weixin.qq.com/upload&#39;, //仅为示例,非真实的接口地址
           filePath: tempFilePaths[0],
           name:"file",
           formData:{ //上传的同时携带别的参数
              "user":"test"
           }
        success: function(res){
           var data = res.data
            //do something
       }
    })
  }
})
//数据请求js
wx.request({
  url: &#39;test.php&#39;, //仅为示例,并非真实的接口地址
  data: {  //注意你在这里上传图片url参数到后台后台是接收不到的,因为上面有专门上传图片的方法
     params1: &#39;&#39; ,
     params2: &#39;&#39;
  },
  header:{
      "Content-Type":"application/json"
  },
  success: function(res) {
     console.log(res.data)
  }
})
//数据储存js
wx.setStorageSync("key","value") //设置要本地存储的key值
wx.getStorageSync("key")  //获取本地存储的key
wx.clearStorageSync("key")  //上出本地存储的key

wepy框架安裝及使用介紹

連結位址https://tencent.github.io/wep...

全局安装或更新WePY命令行工具 npm install wepy-cli -g
在开发目录中生成Demo开发项目  wepy init standard myproject
接下来三步骤与vue一样  
cd myproject
npm  install
wepy build --watch(启动项目)
使用WePY框架后的开发目录结构(主要为src目录的结构,dist目录除外)

组件名后缀 .wpy 

组件页面结构与vue结构一样

一、 wepy頁面及元件結構介紹

wepy頁面及元件編輯佈局都是相同的三結構

   template模板
   script脚本
   style 样式(也可以外部引入)

page頁面實例 export default class MyPage extends wepy.page {    }

  注:page组件需在入口模板app.wpy的pages数组里注册后方可进行页面间跳转

#Component元件實例  export default class MyPage extends wepy.component {    }

方法的定義  頁面wxml標籤的bind、catch事件只能定義在WePY中的methods屬性裡

##xml元件的引用注意引用路徑 components裡註冊 模板裡使用

循環元件   repeat

    <!--wepy结构-->
    <style type="scss">
    </style>
    <template>
        <button bindtap="showFirstComponent">按钮</button>
        <view v-if="show">
         <DemoCom></DemoCom>   <!--使用组件-->
        </view>
       <repeat for="{{arr}}" key="index">  <!--循环组件-->
         <DemoCom :passdata="item" /> <!--传值-->
       <repeat>
    </template> 
    <script>
      import wepy from &#39;wepy&#39;
      import DemoComponent from &#39;../components/demoComponent&#39; //比如说这里通过路径引人了demoComponent组件
      export default class pageDemo extends wepy.page {
     
        config = {
               &#39;navigationBarTitleText&#39;: &#39;页面标题&#39;,
               &#39;navigationBarTextStyle&#39;: &#39;#FFFFFF&#39;, //头部背景色
               &#39;navigationBarBackgroundColor&#39;: &#39;#0386FF&#39; //头部字体颜色
             };
        components = { //注册引入的组件
               DemoCom:DemoComponent
            };
        data = {     
            show:true,
            arr:[
                {name:&#39;aa&#39;,age:&#39;16&#39;},
                {name:&#39;bb&#39;,age:&#39;17&#39;},
                {name:&#39;cc&#39;,age:&#39;c18&#39;}
              ]
        };
     
        methods = {
          showFirstComponent(){ //bindtap里面的事件
                this.show=!this.show; //在这里data数据的设置、获取与vueJS里面的设置、获取一样
           }
        };
        onLoad(){
     
        };
        onShow(){
     
        }
    </script>

看一下app.wpy裡的頁面元件註冊

<style> 
  .mainBgcolor{ /*全局样式全局用*/
   background:#ffffff;
   }
</style>
 
<script>
import wepy from &#39;wepy&#39;
import &#39;wepy-async-function&#39;
import { aldstat } from &#39;./utils/ald-stat&#39;
export default class extends wepy.app {
 
   config={
     pages: [ //这里注册的全是pages里面建立的pages.wpy组件,页面之间跳转
      &#39;pages/index&#39;,
      &#39;pages/login&#39;,
      &#39;pages/companyDetailInfo&#39;,
     ],
    window: {
      backgroundTextStyle: &#39;light&#39;,
      navigationBarBackgroundColor: &#39;#fff&#39;,
      navigationBarTitleText: &#39;WeChat&#39;,
      navigationBarTextStyle: &#39;black&#39;
    }
  }
 
  globalData = { //全局data 全局用
    userInfo: null
  }
</script>

二、wepy頁面元件之間傳數值與通訊

wepy元件之間的通訊與傳值有三種方式:

  父元件=>子元件(props,$broadcast),頁面events物件為中轉
  子元件= >父元件($emit,$invoke) ,頁面events物件為中轉
  子元件=>子元件( $invoke) ,非methods裡的方法為中轉,同樣適用與父元件傳向子元件

    eg:this.$broadcast(&#39;parentData&#39;,{getData:&#39;aaa&#39;})
       this.$emit(sendChildData,{ getData:&#39;aaa&#39; })
       this.$invoke(&#39;Footer&#39;,&#39;FooterMethod&#39;,{invokeData:&#39;aaa&#39;})
    <!--比如在父组件中-->
    <script>
    import wepy from &#39;wepy&#39;
    import childComponent from &#39;../components/childComponents&#39;
    import footerComponent from &#39;../components/footerComponents&#39;
    export default class extends wepy.app {
        components={
           childComponent:childComponent,
           footerComponent:footerComponent
         }
        data={
           pData:666,
           wantChildData:&#39;&#39;,
           wantFooterData:&#39;&#39;
         };
       events={
          &#39;childData&#39;:function(params){ //接收子组件传过来的值
              this.wantChildData=params;//params就是传过来的888
           },
          &#39;footerData&#39;:function(params){ //接收子组件传过来的值
             this.wantFooterData=params; //params就是传过来的999
           }
       };
        methods={
           sendData(){
              this.$broadcast(&#39;parentData&#39;,this.pData);//向子组件发送pData数据
            }
        }
       onLoad(){
     
        };
       onShow(){
     
       }
       }
    </script> 

     
    <!--比如在子组件childComponents中-->
    <script>
    import wepy from &#39;wepy&#39;
    import footerComponent from &#39;../components/footerComponents&#39;
    export default class extends wepy.app {
        components={
          footerComponent:footerComponent
         };
        data={
           wantParentData:&#39;&#39;,
           cData:888
          };
        events={
          &#39;parentData&#39;:function(params){ //接收父组件传过来的值
                 this.wantParentData=params; //params就是传过来的666
             }
         }
       methods={
           sendData(){
            this.$emit(&#39;childData&#39;,cData);//向父组件发送cData数据
          },
          sendFooterData(){
            this.$invoke(&#39;footerComponent&#39;,FooterMethod,{cDatas:this.cData}); //footerComponent指要往哪个组件传值,
                                                                             //FooterMethod是footerComponent里定义的方法(注意不是methods里面的),
                                                                             //最后的对象是要传递的东西,也可以是某个值
          }
     }
      onLoad(){
     
      }
      onShow(){
     
       }
      }
    </script> 

    <!--比如在子组件footerComponents中-->
    <script>
    import wepy from &#39;wepy&#39;
    import childComponent from &#39;./childComponents&#39;
     export default class extends wepy.app {
         components={
            childComponent:childComponent
          }
        data={
           wantParentData:&#39;&#39;,
           wantCdata:&#39;&#39;,
           fData:999
          };
        events={
          &#39;parentData&#39;:function(params){ //接收父组件传过来的值
                 this.wantParentData=params; //params就是传过来的666
             }
         }
       methods={
           sendData(){
            this.$emit(&#39;footerData&#39;,fData);//向父组件发送fData数据
          }
        }
       onLoad(){
     
        }
       onShow(){
     
        }
       FooterMethod(params){//params就是接收到的参数对象
           this.wantCdata=params.cDatas //这里的params.cData就是从childComponent组件里传过来的888
       }
      }
    </script>

props方法和vueJS中的props一樣,不過這裡分為靜態傳值與動態傳值

<child title="mytitle"></child>
 
// child.wpy,静态传值
props = {
    title: String
};
 
onLoad () {
    console.log(this.title); // mytitle
}

props动态传值是指父组件向子组件传递动态数据内容,父子组件数据完全独立互不干扰。但可以通过使用.sync修饰符来达到父组件数据绑定至子组件的效果,也可以通过设置子组件props的twoWay: true来达到子组件数据绑定至父组件的效果。那如果既使用.sync修饰符,同时子组件props中添加的twoWay: true时,就可以实现数据的双向绑定了。

注意:下文示例中的twoWay为true时,表示子组件向父组件单向动态传值,而twoWay为false(默认值,可不写)时,则表示子组件不向父组件传值。这是与Vue不一致的地方,而这里之所以仍然使用twoWay,只是为了尽可能保持与Vue在标识符命名上的一致性。

// parent.wpy
 <child :title="parentTitle" :syncTitle.sync="parentTitle" :twoWayTitle="parentTitle"></child>
 data = {
    parentTitle: &#39;p-title&#39;
 };
 
// child.wpy
props = {
    // 静态传值
    title: String,
    // 父向子单向动态传值
    syncTitle: {
        type: String,
        default: &#39;null&#39;
    },
    twoWayTitle: {
        type: String,
        default: &#39;nothing&#39;,
        twoWay: true
    }
};
 
onLoad () {
    console.log(this.title); // p-title
    console.log(this.syncTitle); // p-title
    console.log(this.twoWayTitle); // p-title
    this.title = &#39;c-title&#39;;
    console.log(this.$parent.parentTitle); // p-title.
    this.twoWayTitle = &#39;two-way-title&#39;;
    this.$apply();
    console.log(this.$parent.parentTitle); // two-way-title.  --- twoWay为true时,子组件props中的属性值改变时,会同时改变父组件对应的值
    this.$parent.parentTitle = &#39;p-title-changed&#39;;
    this.$parent.$apply();
    console.log(this.title); // &#39;c-title&#39;;
    console.log(this.syncTitle); // &#39;p-title-changed&#39; --- 有.sync修饰符的props属性值,当在父组件中改变时,会同时改变子组件对应的值。
}

OK,至此咱们的微信小程序的简单使用及了解算是分享完了apache php mysql

相关文章:

详解微信小程序框架详解及实例应用

微信小程序 框架详解及实例应用

相关视频:

微信小程序开发实战视频教程

以上是微信小程式與頁面wepy框架佈局應用案例分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn