ホームページ  >  記事  >  WeChat アプレット  >  WeChatミニプログラムの追加、削除、変更、動作確認のコード実装

WeChatミニプログラムの追加、削除、変更、動作確認のコード実装

不言
不言オリジナル
2018-06-23 15:39:586895ブラウズ

この記事では、WeChatミニプログラムの追加、削除、変更、確認の操作例の詳細な説明に関する関連情報を主に紹介します。必要な友達はそれを参照してください

。 WeChat ミニプログラムの変更と確認操作 例の詳細な説明

1. 配送先アドレスの追加、削除、変更、確認を例に挙げます

2. ファイルディレクトリ

    ファイルは論理コントロール。主にリクエストの送信とデータの受信を行います。
  1. json このページのローカル設定に使用され、グローバルな app.json 設定をオーバーライドします。
  2. wxss はページのスタイル設定に使用されます。
  3. wxml は html に相当するページです
<form bindsubmit="addSubmit">

<view class="consignee">

<text class="consignee-tit">收货人信息</text>

<view class="consignee-main">

<view class="flex flex-align-center flex-pack-justify">

<text>姓名</text>

<input class="flex-1" name="name" type="number" maxlength="11" placeholder="请输入收货人姓名" />

</view>

<view class="flex flex-align-center flex-pack-justify">

<text>电话</text>

<input class="flex-1" name="mobile" type="number" maxlength="11" placeholder="请输入手机号" />

</view>

<view class="flex flex-align-center flex-pack-justify">

<text>地址</text>

<input class="flex-1" name="address" type="text" maxlength="11" placeholder="请输入地址" />

</view>

</view>

</view>

<view class="delivery-time flex flex-align-center flex-pack-justify">

<text>送货时间</text>

<picker mode="date"></picker>

</view>

<view class="receipt-address">

<view class="receipt-address-tit">收货地址信息</view>

<view wx:for="{{addressInfo}}" wx:key="unique">

<view class="receipt-address-list clearfix">

<image src="../../images/address-icon.png"></image>

<view class="address-list-main">

<view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view>

<view class="address-info">收货人{{item.name}}</view>

<view class="address-time">收货人电话{{item.mobile}}</view>

<view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view>

<view data-editid="{{item.id}}" bindtap="editClick">编辑</view>

</view>

</view>

</view>

</view>

<view class="receipt-true">

<button class="btn_login" formType="submit">保存</button>

</view>

</form>

フロントエンドページのメイン表示フォームと既存の荷受人情報

1. a.フォームフォームは送信イベントにバインドされる必要があります。ミニプログラムでは、属性はbindsubmit,

bindsubmit=”formSubmit "

ここでの属性値formSubmitには、仕様に準拠する任意の値を指定できます。は、前の HTML の

onsubmit="formSubmit()" に相当します。

は、送信されると、formSubmit 関数イベントがトリガーされます。この関数は、js で記述されています。 b. 他の属性は前の HTML と同様です。フォームには name="value" が必要であり、バックエンド処理は以前と同じであることに注意してください。たとえば、PHP は $_POST を使用できます。 ['ユーザー名'] を受信します。 c. ミニ プログラムには入力送信ボタンがないため、各フォームに送信ボタンが必要です

3993c6f6226c20b67508b2f5faca1f97Register65281c5ac262bf6d81768915a4a77ac0。このボタンは有効にするために使用されます。提出イベント。

ループに関しては、分解して解決します

d. アプレットは、カプセル化されたメソッド onLoad: function() を提供します。ページがロードされると、このメソッドが呼び出されます。

var app = getApp()

Page({

data:{},

 onLoad: function() {

  var that = this;

  //收货地址首页

  wx.request({

   //缺少用户唯一标识,现在的在服务器的控制器里有一个假id = 2

   url: &#39;https://shop.yunapply.com/home/shipping/index&#39;,

   method: &#39;GET&#39;,

   data: {},

   header: {

     &#39;Accept&#39;: &#39;application/json&#39;

   },

   success: function(res) {

    that.setData({

      "addressInfo": res.data.info,

    })

    console.log(res.data.info);

   },

   fail:function(){

       wx.showToast({

        title: &#39;服务器网络错误!&#39;,

        icon: &#39;loading&#39;,

        duration: 1500

       })

      }

  })

 }

})

Check

現在のユーザーがすでに持っている配送先住所を取得するために使用される配送先住所のホームページ

var that = this;

なぜこれをしたいのか分かりません、おそらくこの競合を避けるため、またはセマンティクスが不明瞭な場合は、現在のオブジェクトを変数 that

wx.request({}) に代入して https リクエストを開始します

url: 'https://shop.com/home/shipping/ Index'、リクエストされたリクエスト URL インターフェース

メソッド: 'GET'、リクエスト メソッド、デフォルトは GET、POST の場合、

data: {}、リクエストされた送信データ

header: {}、を宣言する必要があります送信されるヘッダー情報、

GETメソッドのヘッダー情報は: 'Accept': 'application/json'

POSTメソッドのヘッダー情報は: "Content-Type": "application/x-www-form-urlencoded"

success:function() リクエストが成功したときに呼び出されるメソッド

Fail:function() リクエストが失敗したときに呼び出されるメソッド

success: function(res) {

    that.setData({

      "addressInfo": res.data.info,

    })

   },

resは、呼び出しが成功した後にサーバーから返されるデータです。

that.setData({"addressInfo": res.data.info,}) 現在のページのデータ オブジェクトにデータを追加します。キー名は addressInfo です。必要なのは、返されたデータです。 res data オブジェクトの info オブジェクトの情報

fail:function(){

       wx.showToast({

        title: &#39;服务器网络错误!&#39;,

        icon: &#39;loading&#39;,

        duration: 1500

       })

      }

ネットワークリクエストの呼び出しに失敗しました。メソッド

showToastはJSのアラートに似ています。ポップアップボックス、タイトルはポップアップに表示される情報です。ボックス、icon はポップアップ ボックスのアイコンの状態です。現在、状態は読み込みと成功の 2 つだけです。期間は、ポップアップ ボックスが画面に表示される時間です。

a.url はリクエストした URL です。たとえば、フロントエンドでは、action='index.php' が POST フォームで使用され、ここでの Index.php はミニによってリクエストされた URL です。プログラムは絶対ネットワーク パスである必要があります。

b.「https://shop.yunapply.com/home/shipping/index」

、GETメソッドのHOMEモジュール配下のShiping controlにあるindexメソッドをリクエストします

c. 取得した値をデータに追加します HOME モジュールの Shipping control にあるインデックス メソッドを見てください

public function index()
{
  //$id 为用户名id 等以后可以通过token获取或者session(id)什么的
  $use_id = 2;
  $res = D(&#39;Shipping&#39;)->getAddress($use_id);
  if ($res == false){
    $this->error(&#39;暂无收货地址&#39;,&#39;&#39;,true);
  }else{
    $this->success($res,&#39;&#39;,true);
  }

}

Shipping モデルの getAddress() メソッドを確認してください

/**
 * 获取收货地址信息
 * @param $id 当前用户id
 * @return 属于用户的所有地址
 */
public function getAddress($id)
{
  $address_list = $this->where(array(&#39;user_id&#39;=>$id))->select();
  if ($address_list == false){
    return false;
  }
  return $address_list;
}

このように、対応する JSON データが次のいずれかに応じて返されます。ユーザーはアドレスを持っています

この例の JSON データは

{"info":[{"id":"4","user_id":"2","name":"addTest","mobile":"15162550544","province":"",
"city":"","district":"","address":"44563","createtime":"2017-01-10 18:45:27"
,"modifytime":"2017-01-10 18:45:27","default":"0"}],"status":1,"url":""}

リクエストが成功したら、JSON を data に追加し、キー値を addressInfo に設定します

次に、次のステップで表示します。この情報はフロントエンド ページにあります

<view wx:for="{{addressInfo}}" wx:key="unique">

<view class="receipt-address-list clearfix">

<image src="../../images/address-icon.png"></image>

<view class="address-list-main">

<view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view>

<view class="address-info">收货人{{item.name}}</view>

<view class="address-time">收货人电话{{item.mobile}}</view>

<view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view>

<view data-editid="{{item.id}}" bindtap="editClick">编辑</view>

</view>

</view>

</view>

コントロール属性 wx:for は、JS の addressInfo 配列である配列をバインドします。デフォルトでは、配列内の現在の項目の添え字変数名はデフォルトでインデックスになります。 、配列内の現在の項目の変数名はデフォルトで item になります。現在のデータの住所、荷受人、電話番号、情報は、{{item.address}}、{{item.name}}、{{item.mobile}}、{{item.id}} に基づいて取得できます。 id

をループすると、TPテンプレートのforeach

delete

と同等の形式で全てのアドレス情報を表示できます

在前台模板的循环数据里可以看到这样一条标签

event.currentTarget.dataset.deleteid;表示事件对象的目标的data-*的值

bindtap属性是微信在模板页中绑定点击事件,deleteClick为触发时间的方法名

在index.js中,删除代码如下:

//删除地址

 deleteClick:function(event){

  var id = event.currentTarget.dataset.deleteid;

  wx.request({

   url: 'https://shop.yunapply.com/home/shipping/delAddress?id='+id,

   data: {},

   method: 'GET',

   success: function(res){

    if(res.data.status == 0){

     wx.showToast({

      title: res.data.info,

      icon: 'loading',

      duration: 1500

     })

    }else{

     wx.showToast({

      title: res.data.info,

      icon: 'success',

      duration: 1000

     })

     //删除之后应该有一个刷新页面的效果,等和其他页面刷新跳转一起做

    }

   },

   fail:function(){

       wx.showToast({

        title: &#39;服务器网络错误!&#39;,

        icon: &#39;loading&#39;,

        duration: 1500

       })

      }

  })

 }

点击前端删除按钮的时候,触发deleteClick事件,可以传入一个参数,代表事件对象。

event.currentTarget.dataset.deleteid;表示事件对象的目标的data-*的值

然后通过GET方式传入url,在服务器端删除功能如下

public function delAddress($id)
{
  $res = D(&#39;Shipping&#39;)->where(array(&#39;id&#39;=>$id))->delete();
  if ($res){
    $this->success(&#39;删除成功&#39;,&#39;&#39;,true);
  }else{
    $this->error(&#39;删除失败&#39;,&#39;&#39;,true);
  }
}

根据返回的JSON值就可以提示删除成功与否

增、改

之前觉得增加和修改会和表单提交一样简单,但是做了一些还是觉得不一样,好好在写一遍。

首先查看前台表单

<form bindsubmit="addSubmit">

<view class="consignee">

<text class="consignee-tit">收货人信息</text>

<view class="consignee-main">

<input name="id" type="hidden" value="{{addressEdit.id}}" />

<view class="flex flex-align-center flex-pack-justify">

<text>姓名</text>

<input class="flex-1" name="name" type="number" value="{{addressEdit.name}}" maxlength="11" placeholder="请输入收货人姓名" />

</view>

<view class="flex flex-align-center flex-pack-justify">

<text>电话</text>

<input class="flex-1" name="mobile" type="number" value="{{addressEdit.mobile}}" maxlength="11" placeholder="请输入手机号" />

</view>

<view class="flex flex-align-center flex-pack-justify">

<text>地址</text>

<input class="flex-1" name="address" type="text" value="{{addressEdit.address}}" maxlength="-1" placeholder="请输入地址" />

</view>

</view>

</view>

<view wx:for="{{addressInfo}}" wx:key="unique">

<view class="receipt-address-list clearfix">

<image src="../../images/address-icon.png"></image>

<view class="address-list-main">

<view class="clearfix"><text>收货地址{{item.address}}</text><text>1km</text></view>

<view class="address-info">收货人{{item.name}}</view>

<view class="address-time">收货人电话{{item.mobile}}</view>

  <view data-deleteid="{{item.id}}" bindtap="deleteClick">删除</view>

<view data-editid="{{item.id}}" bindtap="editClick">编辑</view>  <view class="receipt-true">

<button class="btn_login" formType="submit">保存</button>

</view>

</form>

a.Form表单,需要绑定一个submit事件,在小程序中,属性为bindsubmit,

bindsubmit=”formSubmit”   这里的属性值formSubmit,命名可以为符合规范的任意值,相当于以前html中的  onsubmit=”formSubmit()”,是一个函数名,当提交的时候触发formSubmit这个函数事件,这个函数写在js中。

b.其他的属性和之前的HTML差不多,注意的是,表单一定要有name=“value”,后端处理和以前一样,比如name=”username” PHP可以用 $_POST[‘username']来接收。

c.由于小程序没有input submit这个按钮,所以在每个form表单中都要有一个提交按钮,

cbc47cc7c46af5112c7354a7ad9ae6ad注册65281c5ac262bf6d81768915a4a77ac0,这个按钮就是用来开启提交事件的。

d.由于添加地址和编辑地址都是在一个页面的,所以我需要在每个表单中,加一个默认值变量,当点击修改的时候,默认值就显示在输入框中。

e.表单中有一个编辑,绑定了事件editClick,当点击这个按钮的时候,就会进入编辑模式

添加和修改的放在一个函数里面,但是修改数据的显示是另外一个函数

先说修改,点点击编辑的时候,触发editClick事件

JS如下:

editClick:function(event){

  var that = this;

  var id = event.currentTarget.dataset.editid;

  wx.request({

   url: 'https://shop.yunapply.com/home/shipping/edit?id='+id,

   data: {},

   method: 'GET',

   success: function(res){

    if(res.data.status == 0){

     wx.showToast({

      title: res.data.info,

      icon: 'loading',

      duration: 1500

     })

    }else{

     that.setData({

       "addressEdit": res.data.info,

     })

    }

   },

   fail:function(){

       wx.showToast({

        title: &#39;服务器网络错误!&#39;,

        icon: &#39;loading&#39;,

        duration: 1500

       })

      }

  })

 },

为了更好理解,贴个图

 最下面有一个保存按钮,当点击编辑的时候,触发editClick:function(event),这个event是当前触发事件的对象,

var id = event.currentTarget.dataset.editid;  就是获取当前事件对象的dataset中的editid的值,这里id是当前地址的id

url: 'https://shop.com/home/shipping/edit?id='+id

Wx.request  的url,将id值放在url上,作为GET参数,传递到服务器。

data: {},是需要额外传递的数据

method: 'GET', 是数据传递方式  默认是“GET”,保持大写

data:{mobile:e.detail.value.mobile,password:e.detail.value.password},

这里的data就是POST给服务器端的数据 以{name:value}的形式传送

success:function()是请求状态成功触发是事件,也就是200的时候,注意,请求成功不是操作成功,请求只是这个程序到服务器端这条线的通的。

fail:function()就是网络请求不成功,触发的事件。

这里的一段代码是和PHP后端程序有关系的,具体流程是这样的,

1.GET通过数据到https://shop.com/home/Shipping/edit这个接口,用过THINKPHP的就会知道是HOME模块下的Shipping控制下的edit方法

2.后端PHP代码如下:

控制器 ShippingController.class.php

public function edit($id)
{
  $res = D(&#39;Shipping&#39;)->find($id);
  $this->success($res,&#39;&#39;,true);
}

也就是说将这条数据取出来,没什么好说的。

 that.setData({

       "addressEdit": res.data.info,

     })

    }

这里请求成功以后,调用小程序 setData方法,将服务器端返回的信息放到addressEdit[]中,然后在前端页面调用{{addressEdit.id}}、{addressEdit.name}}、{addressEdit.mobile}}、{addressEdit.address}}将数据展示出来,这就是修改时候的操作。

接下来是提交表单的操作

Js代码如下

addSubmit:function(e){

  if(e.detail.value.mobile.length==0||e.detail.value.name.length==0 ||e.detail.value.address.length==0){

   wx.showToast({

    title: '收货人所有信息不得为空!',

    icon: 'loading',

    duration: 1500

   })

  }else if(e.detail.value.mobile.length != 11){

    wx.showToast({

    title: '请输入11位手机号码!',

    icon: 'loading',

    duration: 1500

   })

  }else{

   wx.request({ 

      url: &#39;https://shop.yunapply.com/home/shipping/save&#39;, 

      header: { 

       "Content-Type": "application/x-www-form-urlencoded" 

      },

      method: "POST",

      data:{id:e.detail.value.id,mobile:e.detail.value.mobile,name:e.detail.value.name,address:e.detail.value.address},

      success: function(res) {

       if(res.data.status == 0){

         wx.showToast({

          title: res.data.info,

          icon: 'loading',

          duration: 1500

         })

       }else{

         wx.showToast({

          title: res.data.info,

          icon: 'success',

          duration: 1000

         })

         setTimeout(function(){

          wx.navigateTo({

           url:'../address/index'

          })

         },1000)

       }

      },

      fail:function(){

       wx.showToast({

        title: &#39;服务器网络错误!&#39;,

        icon: &#39;loading&#39;,

        duration: 1500

       })

      }  

     })

  }

 }

在前端的FORM表单中,当点击formtype=“submit”这个按钮的时候,触发addSubmit事件,前面的if都是JS验证,防止用户不填写信息。

1.其他的request请求差不多,找几个不一样的

url: &#39;https://shop.yunapply.com/home/shipping/save&#39;,

调用服务器端的save方法

  header: { 

    "Content-Type": "application/x-www-form-urlencoded" 

   },

由于POST和GET传送数据的方式不一样,POST的header必须是

"Content-Type": "application/x-www-form-urlencoded"

GET的header可以是 'Accept': 'application/json'

 data:{id:e.detail.value.id,mobile:e.detail.value.mobile,name:e.detail.value.name,address:e.detail.value.address},

这里是需要POST到服务器端的数据

Save方法代码

public function save()
{
  //$user_id
  $user_id = 2;
  if (IS_POST){
    $shipping = D(&#39;Shipping&#39;);
    if (!$shipping->create()){
      $this->error($shipping->getError(),&#39;&#39;,true);
    }else{
      if (is_numeric($_POST[&#39;id&#39;])){
        if ($shipping->editAddress($_POST[&#39;id&#39;])){
          $this->success(&#39;地址修改成功&#39;,&#39;&#39;,true);
        }else{
          $this->error(&#39;地址修改失败&#39;,&#39;&#39;,true);
        }
      }else{
        if ($shipping->addAddress($user_id)){
          $this->success(&#39;添加地址成功&#39;,&#39;&#39;,true);
        }else{
          $this->error(&#39;添加地址失败&#39;,&#39;&#39;,true);
        }
      }
    }
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

微信小程序 向左滑动删除功能的实现

微信小程序button组件的使用介绍

以上がWeChatミニプログラムの追加、削除、変更、動作確認のコード実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。