ホームページ WeChat アプレット ミニプログラム開発 ミニ プログラム フレームワークに基づいて開発された Todos アプリ、WeChat ミニ プログラムの使い方をすぐに理解する

ミニ プログラム フレームワークに基づいて開発された Todos アプリ、WeChat ミニ プログラムの使い方をすぐに理解する

Feb 11, 2017 am 10:28 AM
WeChat アプレット

WeChat は、WeChat ミニ プログラムの公式ドキュメントと開発者ツールを正式にオープンしました。過去 2 日間、私は小さなプログラムの開発方法を理解するために関連ニュースを読んでいました。公式ドキュメントが公開された後、すぐにそれらに目を通し、ドキュメントの 2 つの部分 (フレームワークとフレームワーク) を理解することに集中しました。コンポーネントを作成し、通常の ToDo アプリを作成するための簡単なチュートリアルに基づいています。このアプリは WeChat アプレット プラットフォームに基づいており、todo アプリの通常の機能を実装すると同時に、実際の作業シナリオに近づけるために、読み込みコンポーネントとトースト コンポーネントを使用して対話とフィードバックを完了します。いくつかの操作の。このプラットフォームについての私の直観的な印象は、技術レベルでは Vue に似ていますが、Vue よりもはるかに強力ではなく、開発アイデアは Vue とは異なり、バックボーンに似ているということです。したがって、backbone や vue などの mvc、mvvm フレームワークを使用したことがある人は、このプラットフォームを簡単に始めることができます。この記事では、このtodoアプリの実装のポイントを中心に紹介します。

まず、この記事に関連する情報を追加します:

公式ドキュメント: https://mp.weixin.qq.com/debug/wxadoc/dev/index.html

公式開発者ツールのダウンロード: https://mp. weixin.qq.com/debug/wxadoc/dev/devtools/download.html

この記事の todo アプリの機能デモ:

快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

注: todo テキストを直接編集するには、todo テキストを長押しする必要があります。携帯電話なのでダブルクリックイベントが編集に使えず、長押しイベントに変更しました。ミニ プログラム プラットフォームは、ダブルクリック イベントのバインドも提供しません。

関連ソースコード: https://github.com/liuyunzhuge/blog/tree/master/todos/wx

このプロジェクトをローカルで実行したい場合は、最初に開発者ツールをインストールする必要があり、ドキュメント内の簡単なチュートリアルでは、まずプロジェクトをビルドします。
構築が完了したら、開発者ツールがプロジェクトを開きます。次に、ディスク上でビルドされたプロジェクトのフォルダーを見つけ、その中のすべてのコンテンツを削除し、[すべて貼り付け]を削除します。
次に開発者ツールを再度開き、最初に編集タブに入り、次にコンパイルボタンをクリックすると、直接デバッグインターフェイスに入り、アプリの機能を表示します:

快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

これの開発を紹介しましょう。 app の要点:

1. このアプリのディレクトリ構造と構成については、「ドキュメント フレームワーク」セクションで詳しく説明しません。このプラットフォームには html と css はなく、wxml と wxss に置き換えられます。 wxss と css にはほとんど違いがありません。欠点は、css ほど強力ではなく、サポートされるセレクターが限られていることです。ただし、プラットフォームが WeChat 1 つだけであるため、互換性の問題がほとんどなく、標準および最新の CSS テクノロジーを使用できるという利点があります。 wxml では、プラットフォームによって提供されるコンポーネントのタグのみを使用できます。HTML タグを直接使用することはできません。wxml での各コンポーネントの使用方法の例は、「ドキュメント - コンポーネント」セクションにあります。したがって、実際には、wxml と wxss を記述することに問題はありません。

2. wxml は次の機能をサポートします:

快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

テンプレートと参照を除き、その他すべての機能は todo アプリで使用されます。ただし、各機能の詳細はアプリの適切な機能に基づいてのみ使用されます。選ばれる。数日前、WeChat アプレットは vue フレームワークに基づいて実装される可能性があるという記事を見たので、vue のドキュメントを調べてみました。データ バインディング、条件付きレンダリング、リスト レンダリング、およびイベントについて、vue の使用法を詳しく説明しました。それに比べて、wxml が提供する機能は vue の関連機能によく似ていますが、機能がそれほど多くないため、vue フレームワークの機能を小さなプログラムに直接使用するのは簡単ではありません。ベストプラクティスはやはり公式ドキュメントに記載されている手順に基づいています。公式ドキュメントに記載されていない機能を推測で使用すると、間違いなく動作しません。いくつかのオブジェクトのプロトタイプを印刷して確認しましたが、公式ドキュメントよりも多くのインスタンス メソッドは見つかりませんでした。これは、ミニ プログラムのフレームワーク機能が実際に制限されていることを示しています。

3. セレクターがフレームワークの要件を満たしている限り、Wxss は実際にはless または sass で書くことができます。時間の都合上、このアプリでは試しませんでした。

4. 双方向の拘束はありません。 Vue では、Vue インスタンスはビューモデルです。ビューレイヤー内のデータの更新はリアルタイムでモデルにフィードバックされ、モデルの更新もリアルタイムでビューにフィードバックされます。ミニ プログラムでは双方向のバインディングはなく、ビューの更新はモデルに直接同期されません。関連するイベント コールバックでビュー レイヤーからデータを直接取得して、モデルを更新する必要があります。ミニ プログラムは、ミニ プログラム内で setData を使用して、ページを再レンダリングします。たとえば、単一の Todo 項目の場合、切り替え操作は次のようになります。

toggleTodo: function( e ) {    var id = this.getTodoId( e, 'todo-item-chk-' );    var value = e.detail.value[ 0 ];    var complete = !!value;    var todo = this.getTodo( id );

    todo.complete = complete;    this.updateData( true );    this.updateStorage();
},
ログイン後にコピー

上記のコードでは、単一の Todo 項目のチェックボックスの値は e.detail.value[0] を通じて取得され、完全なステータスはこの値によってtodoの内容が判断されます。最後に、updateData 内で、setData メソッドを通じてモデルのコンテンツが更新されます。この方法でのみ、切り替え操作後にアプリの下部にある統計が更新されます。

5. イベントをバインドする場合、パラメーターを渡すことはできません。渡せるのは 1 つのイベントのみです。たとえば、上記のトグル操作では、実際には現在の Todo の ID をコールバックに渡したいと思っていましたが、あらゆる方法でそれを行うことはできず、最終的には ID メソッド、つまりバインドすることでしか処理できませんでした。 wxml で、イベントのコンポーネントに ID を追加します。この ID はページ全体で繰り返すことができないため、イベントがトリガーされるときに ID の最後に todo ID 値を追加する必要があります。 、e.currentTarget.id を通じて取得できます。コンポーネントの ID については、対応する ID プレフィックスを削除して、todo の ID 値を取得します。これは現在使用されている方法であり、あまりエレガントではないと思います。後で実装するより良い方法を見つけたいと思います。

快速了解微信小程序的使用,一个根据小程序的框架开发的todos app

6. アプリではローディング効果が考慮されており、ボタンコンポーネントのloading属性を使用して実現する必要があります。ただし、読み込みは単なるスタイル コントロールであり、ボタンを繰り返しクリックできるかどうかは制御しません。したがって、ボタンの disabled 属性も使用して、繰り返しクリックされないようにする必要があります。

残りの実装の詳細は、次の 2 つのファイルのソース コードにあります。問題点を指摘してください。

index.wxml ソース コード:

<!--list.wxml--><view class="container">
    <view class="app-hd">
        <view class="fx1">
            <input class="new-todo-input" value="{{newTodoText}}" auto-focus  bindinput="newTodoTextInput"/>    
        </view>
        <button type="primary" size="mini" bindtap="addOne" loading="{{addOneLoading}}" disabled="{{addOneLoading}}"> 
        + Add        </button>
    </view>
    <view class="todos-list" >
        <view class="todo-item {{index == 0 ? &#39;&#39; : &#39;todo-item-not-first&#39;}} {{todo.complete ? &#39;todo-item-complete&#39; : &#39;&#39;}}" wx:for="{{todos}}" wx:for-item="todo">
            <view wx-if="{{!todo.editing}}">
                <checkbox-group id="todo-item-chk-{{todo.id}}" bindchange="toggleTodo">
                    <label class="checkbox">
                        <checkbox value="1" checked="{{todo.complete}}"/>
                    </label>
                </checkbox-group>
            </view>
            <view id="todo-item-txt-{{todo.id}}" class="todo-text" wx-if="{{!todo.editing}}" bindlongtap="startEdit">
                <text>{{todo.text}}</text>
            </view>
            <view wx-if="{{!todo.editing}}">
                <button id="btn-del-item-{{todo.id}}" bindtap="clearSingle" type="warn" size="mini" loading="{{todo.loading}}"  disabled="{{todo.loading}}"> 
                    Clear                </button>
            </view>
            <input id="todo-item-edit-{{todo.id}}" class="todo-text-input" value="{{todo.text}}" auto-focus bindblur="endEditTodo" wx-if="{{todo.editing}}"/>    
        </view>
    </view>
    <view class="app-ft" wx:if="{{todos.length > 0}}">
        <view class="fx1">
            <checkbox-group bindchange="toggleAll">
                <label class="checkbox">
                    <checkbox value="1" checked="{{todosOfUncomplted.length == 0}}"/>
                </label>
            </checkbox-group>
            <text>{{todosOfUncomplted.length}} left.</text>
        </view>
        <view wx:if="{{todosOfComplted.length > 0}}">
            <button type="warn" size="mini" bindtap="clearAll" loading="{{clearAllLoading}}" disabled="{{clearAllLoading}}"> 
                Clear {{todosOfComplted.length}} of done.            </button>
        </view>
    </view>
    <loading hidden="{{loadingHidden}}" bindchange="loadingChange">
        {{loadingText}}    </loading>
    <toast hidden="{{toastHidden}}" bindchange="toastChange">
        {{toastText}}    </toast></view>
ログイン後にコピー

index.js ソース コード:

var app = getApp();

Page( {
    data: {
        todos: [],
        todosOfUncomplted: [],
        todosOfComplted: [],
        newTodoText: '',
        addOneLoading: false,
        loadingHidden: true,
        loadingText: '',
        toastHidden: true,
        toastText: '',
        clearAllLoading: false
    },
    updateData: function( resetTodos ) {        var data = {};        if( resetTodos ) {
            data.todos = this.data.todos;
        }

        data.todosOfUncomplted = this.data.todos.filter( function( t ) {            return !t.complete;
        });

        data.todosOfComplted = this.data.todos.filter( function( t ) {            return t.complete;
        });        this.setData( data );
    },
    updateStorage: function() {        var storage = [];        this.data.todos.forEach( function( t ) {
            storage.push( {
                id: t.id,
                text: t.text,
                complete: t.complete
            })
        });

        wx.setStorageSync( 'todos', storage );
    },
    onLoad: function() {        this.setData( {
            todos: wx.getStorageSync( 'todos' ) || []
        });        this.updateData( false );
    },
    getTodo: function( id ) {        return this.data.todos.filter( function( t ) {            return id == t.id;
        })[ 0 ];
    },
    getTodoId: function( e, prefix ) {        return e.currentTarget.id.substring( prefix.length );
    },
    toggleTodo: function( e ) {        var id = this.getTodoId( e, 'todo-item-chk-' );        var value = e.detail.value[ 0 ];        var complete = !!value;        var todo = this.getTodo( id );

        todo.complete = complete;        this.updateData( true );        this.updateStorage();
    },
    toggleAll: function( e ) {        var value = e.detail.value[ 0 ];        var complete = !!value;        this.data.todos.forEach( function( t ) {
            t.complete = complete;
        });        this.updateData( true );        this.updateStorage();

    },
    clearTodo: function( id ) {        var targetIndex;        this.data.todos.forEach( function( t, i ) {            if( targetIndex !== undefined ) return;            if( t.id == id ) {
                targetIndex = i;
            }
        });        this.data.todos.splice( targetIndex, 1 );
    },
    clearSingle: function( e ) {        var id = this.getTodoId( e, 'btn-del-item-' );        var todo = this.getTodo( id );

        todo.loading = true;        this.updateData( true );        var that = this;
        setTimeout( function() {
            that.clearTodo( id );
            that.updateData( true );
            that.updateStorage();
        }, 500 );
    },
    clearAll: function() {        this.setData( {
            clearAllLoading: true
        });        var that = this;
        setTimeout( function() {
            that.data.todosOfComplted.forEach( function( t ) {
                that.clearTodo( t.id );
            });
            that.setData( {
                clearAllLoading: false
            });
            that.updateData( true );
            that.updateStorage();

            that.setData( {
                toastHidden: false,
                toastText: 'Success'
            });
        }, 500 );

    },
    startEdit: function( e ) {        var id = this.getTodoId( e, 'todo-item-txt-' );        var todo = this.getTodo( id );
        todo.editing = true;        this.updateData( true );        this.updateStorage();
    },
    newTodoTextInput: function( e ) {        this.setData( {
            newTodoText: e.detail.value
        });
    },
    endEditTodo: function( e ) {        var id = this.getTodoId( e, 'todo-item-edit-' );        var todo = this.getTodo( id );

        todo.editing = false;
        todo.text = e.detail.value;        this.updateData( true );        this.updateStorage();
    },
    addOne: function( e ) {        if( !this.data.newTodoText ) return;        this.setData( {
            addOneLoading: true
        });        //open loading
        this.setData( {
            loadingHidden: false,
            loadingText: 'Waiting...'
        });        var that = this;
        setTimeout( function() {            //close loading and toggle button loading status            that.setData( {
                loadingHidden: true,
                addOneLoading: false,
                loadingText: ''
            });

            that.data.todos.push( {
                id: app.getId(),
                text: that.data.newTodoText,
                compelte: false
            });

            that.setData( {
                newTodoText: ''
            });

            that.updateData( true );
            that.updateStorage();
        }, 500 );
    },
    loadingChange: function() {        this.setData( {
            loadingHidden: true,
            loadingText: ''
        });
    },
    toastChange: function() {        this.setData( {
            toastHidden: true,
            toastText: ''
        });
    }
});
ログイン後にコピー

最後に追加する必要があるのは、このアプリは限られた時間内で WeChat の公式ドキュメントに従って開発されたということです。ここでの実装が合理的かどうかはわかりません。このアプリは、ミニ プログラム プラットフォームの使用法を理解するためにのみ使用します。 WeChat関係者がより包括的な、できればプロジェクトベースのデモを立ち上げて、私たち開発者にコードレベルでのベストプラクティス仕様を提供できることを願っています。他の開発アイデアを持つ友人は、上記の実装の問題点を指摘するのを手伝ってくれるでしょう。

WeChat ミニ プログラムの使用法について詳しく知りたい場合は、PHP 中国語 Web サイトにあるミニ プログラム フレームワークに基づいて開発された Todos アプリに関する関連記事に注目してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xianyu WeChat ミニプログラムが正式に開始 Xianyu WeChat ミニプログラムが正式に開始 Feb 10, 2024 pm 10:39 PM

Xianyu の公式 WeChat ミニ プログラムが静かに開始されました。ミニ プログラムでは、プライベート メッセージを投稿して購入者/販売者とコミュニケーションしたり、個人情報や注文を表示したり、商品を検索したりすることができます。プログラム、見てみましょう。 Xianyu WeChat アプレットの名前は何ですか? 回答: Xianyu、アイドル取引、中古品販売、評価、リサイクル。 1. ミニ プログラムでは、アイドル メッセージの投稿、プライベート メッセージを介した購入者/販売者とのコミュニケーション、個人情報と注文の表示、指定された商品の検索などができます。 2. ミニ プログラム ページには、ホームページ、近くに、アイドル投稿、メッセージ投稿、私の投稿 5つの機能; 3. 使用したい場合は、購入する前に WeChat 支払いを有効にする必要があります。

WeChatアプレットは画像アップロード機能を実装 WeChatアプレットは画像アップロード機能を実装 Nov 21, 2023 am 09:08 AM

WeChat アプレットが画像アップロード機能を実装 モバイル インターネットの発展に伴い、WeChat アプレットは人々の生活に欠かせないものになりました。 WeChat ミニ プログラムは、豊富なアプリケーション シナリオを提供するだけでなく、画像アップロード機能などの開発者定義の機能もサポートします。この記事では、WeChat アプレットに画像アップロード機能を実装する方法と具体的なコード例を紹介します。 1. 準備作業 コードを書き始める前に、WeChat 開発者ツールをダウンロードしてインストールし、WeChat 開発者として登録する必要があります。同時に、WeChat についても理解する必要があります。

WeChat アプレットにドロップダウン メニュー効果を実装する WeChat アプレットにドロップダウン メニュー効果を実装する Nov 21, 2023 pm 03:03 PM

WeChat ミニ プログラムでドロップダウン メニュー効果を実装するには、特定のコード サンプルが必要です。モバイル インターネットの普及に伴い、WeChat ミニ プログラムはインターネット開発の重要な部分となり、ますます多くの人が注目し始めています。 WeChat ミニ プログラムを使用します。 WeChat ミニ プログラムの開発は、従来の APP 開発よりも簡単かつ迅速ですが、特定の開発スキルを習得する必要もあります。 WeChat ミニ プログラムの開発では、ドロップダウン メニューが一般的な UI コンポーネントであり、より良いユーザー エクスペリエンスを実現します。この記事では、WeChat アプレットにドロップダウン メニュー効果を実装し、実用的な機能を提供する方法を詳しく紹介します。

WeChat アプレットを使用してカルーセル切り替え効果を実現する WeChat アプレットを使用してカルーセル切り替え効果を実現する Nov 21, 2023 pm 05:59 PM

WeChat アプレットを使用してカルーセル スイッチング効果を実現する WeChat アプレットは、シンプルで効率的な開発と使用特性を備えた軽量のアプリケーションです。 WeChat ミニ プログラムでは、カルーセル スイッチング効果を実現することが一般的な要件です。この記事では、WeChat アプレットを使用してカルーセル切り替え効果を実現する方法と、具体的なコード例を紹介します。まず、カルーセル コンポーネントを WeChat アプレットのページ ファイルに追加します。たとえば、&lt;swiper&gt; タグを使用すると、カルーセルの切り替え効果を実現できます。このコンポーネントでは、 b を渡すことができます。

WeChat ミニ プログラムに画像フィルター効果を実装する WeChat ミニ プログラムに画像フィルター効果を実装する Nov 21, 2023 pm 06:22 PM

WeChat ミニ プログラムでの画像フィルター効果の実装 ソーシャル メディア アプリケーションの人気に伴い、人々は写真にフィルター効果を適用して、写真の芸術的効果や魅力を高めることがますます好まれています。画像フィルター効果は WeChat ミニ プログラムにも実装でき、より興味深く創造的な写真編集機能をユーザーに提供します。この記事では、WeChat ミニ プログラムに画像フィルター効果を実装する方法を紹介し、具体的なコード例を示します。まず、WeChat アプレットのキャンバス コンポーネントを使用して画像を読み込み、編集する必要があります。 Canvasコンポーネントはページ上で使用できます

Xianyu WeChat アプレットの名前は何ですか? Xianyu WeChat アプレットの名前は何ですか? Feb 27, 2024 pm 01:11 PM

Xianyu の公式 WeChat ミニ プログラムが静かに開始され、アイドルアイテムを簡単に公開および交換できる便利なプラットフォームをユーザーに提供します。ミニ プログラムでは、プライベート メッセージを介して購入者または販売者とコミュニケーションしたり、個人情報や注文を表示したり、欲しい商品を検索したりできます。では、WeChat ミニ プログラムでは Xianyu とはいったい何と呼ばれているのでしょうか? このチュートリアル ガイドで詳しくご紹介しますので、知りたいユーザーは、この記事に従って読み続けてください。 Xianyu WeChat アプレットの名前は何ですか? 回答: Xianyu、アイドル取引、中古品販売、評価、リサイクル。 1. ミニ プログラムでは、アイドル メッセージの投稿、プライベート メッセージを介した購入者/販売者とのコミュニケーション、個人情報と注文の表示、指定された商品の検索などができます。 2. ミニ プログラム ページには、ホームページ、近くに、アイドル投稿、メッセージ投稿、マイ投稿の5つの機能、3.

WeChatミニプログラムにスライディング削除機能を実装する WeChatミニプログラムにスライディング削除機能を実装する Nov 21, 2023 pm 06:22 PM

WeChat ミニ プログラムにスライディング削除機能を実装するには、特定のコード サンプルが必要です。WeChat ミニ プログラムの人気に伴い、開発者は開発プロセス中にいくつかの一般的な機能を実装する際に問題に遭遇することがよくあります。中でも、スライド削除機能は、よく使われる一般的な機能要件です。この記事では、WeChat アプレットにスライディング削除機能を実装する方法と具体的なコード例を詳しく紹介します。 1. 要件分析 WeChat ミニ プログラムでは、スライド削除機能の実装には次の点が含まれます。 リスト表示: スライドして削除できるリストを表示するには、各リスト項目に次の要素が含まれている必要があります。

WeChat アプレットに画像回転効果を実装する WeChat アプレットに画像回転効果を実装する Nov 21, 2023 am 08:26 AM

WeChat ミニ プログラムで画像回転効果を実装するには、特定のコード サンプルが必要です。WeChat ミニ プログラムは、ユーザーに豊富な機能と優れたユーザー エクスペリエンスを提供する軽量のアプリケーションです。ミニ プログラムでは、開発者はさまざまなコンポーネントと API を使用して、さまざまな効果を実現できます。その中で、画像回転効果は、ミニプログラムに興味と視覚効果を加えることができる一般的なアニメーション効果です。 WeChat ミニ プログラムで画像の回転効果を実現するには、ミニ プログラムが提供するアニメーション API を使用する必要があります。以下は、その方法を示す具体的なコード例です。

See all articles