ホームページ > ウェブフロントエンド > フロントエンドQ&A > vue と WeChat ミニ プログラムの違いは何ですか?

vue と WeChat ミニ プログラムの違いは何ですか?

青灯夜游
リリース: 2022-01-04 11:07:04
オリジナル
2789 人が閲覧しました

違い: 1. 「v-if」と「v-show」は要素の表示と非表示を制御するために vue で使用されますが、「wx-if」と「hidden」はミニ プログラムで使用されます。 2. vue 「v-on:event」を使用してイベントをバインドしますが、ミニ プログラムは「bindtap(bind event)」を使用してイベントをバインドします。

vue と WeChat ミニ プログラムの違いは何ですか?

このチュートリアルの動作環境: Windows7 システム、vue2.9.6 バージョン、DELL G3 コンピューター。

1. ライフ サイクル

最初に 2 つの写真を投稿します:

vue ライフ サイクル

ミニ プログラムのライフ サイクル

#これに比べて、ミニ プログラムのフック関数ははるかに単純です。

vue のフック関数は新しいページにジャンプするときにトリガーされますが、小プログラム のフック関数はページの別のジャンプ方法でトリガーされます。 . フックは同じではありません。

  • onLoad: ページの読み込み
    ページは 1 回だけ呼び出されます。onLoad# で現在のページを開くために呼び出される クエリを取得できます。 ## ### パラメーター。
  • onShow
  • : ページ表示は、ページが開かれるたびに呼び出されます。
  • onReady
  • : ページの最初のレンダリングが完了しましたページは 1 回だけ呼び出されます。これは、ページの準備ができており、ビュー レイヤーと対話できることを意味します。
    onReady
    の後に wx.setNavigationBarTitle などのインターフェース設定を設定してください。詳細については、「ライフ サイクル」を参照してください。
  • onHide
  • : ページ非表示 navigateTo
    または下部タブが切り替えられたときに呼び出されます。
  • onUnload
  • : ページのアンロード redirectTo
    または navigateBack のときに呼び出されます。
データ リクエスト

データをリクエストするためにページが読み込まれるとき、2 つのフックの使用方法は似ています。

vue

は通常は ## にあります。データは #created または mounted で要求されますが、miniprogram では、データは onLoad または onShow で要求されます。 2. データ バインディング

VUE

: Vue が、値が要素の属性である変数を動的にバインドするとき、変数の前にコロンを追加します。 , 例:

<img :src="imgSrc"/>
ログイン後にコピー
小プログラム

: 変数の値が要素の属性にバインドされている場合、変数の値は 2 つの中括弧で囲まれます。括弧がない場合は、文字列とみなされます。例:

<image src="{{imgSrc}}"></image>
ログイン後にコピー
3. リストのレンダリング

コードを直接投稿しますが、この 2 つはまだ多少似ています

vue:

<ul id="example-1">
  <li v-for="item in items">
    {{ item.message }}  </li></ul>var example1 = new Vue({
  el: &#39;#example-1&#39;,
  data: {
    items: [
      { message: &#39;Foo&#39; },
      { message: &#39;Bar&#39; }
    ]
  }
})
ログイン後にコピー
ミニ プログラム:

Page({
  data: {
    items: [
      { message: &#39;Foo&#39; },
      { message: &#39;Bar&#39; }
    ]
  }
})<text wx:for="{{items}}">{{item}}</text>
ログイン後にコピー
4. 要素の表示と非表示

vue

を使用します。

v-ifv-show は要素の表示と非表示を制御します アプレット

では、

wx-if## を使用します# andhidden要素の表示と非表示を制御します5. イベント処理

vue

:

v-on:event# を使用します## イベントをバインドするか、

@event を使用してイベントをバインドします。例:

<button v-on:click="counter += 1">Add 1</button>
<button v-on:click.stop="counter+=1">Add1</button>  //阻止事件冒泡
ログイン後にコピー
アプレットでは、bindtap(bind event) を使用します。

、または

catchtap(catch イベント)バインディング イベント (例:

<button bindtap="noWork">明天不上班</button>
<button catchtap="noWork">明天不上班</button>  //阻止事件冒泡
ログイン後にコピー
6)。双方向データ バインディング

1. 設定

vueに値

がある場合、form要素に

v-model

を追加するだけです。 data の対応する値をバインドすると、フォーム要素の内容が変更されると、それに応じて data の対応する値も変更されます。これは の非常に優れた点です。ビュー<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&lt;div id=&quot;app&quot;&gt; &lt;input v-model=&quot;reason&quot; placeholder=&quot;填写理由&quot; class=&amp;#39;reason&amp;#39;/&gt; &lt;/div&gt; new Vue({ el: &amp;#39;#app&amp;#39;, data: { reason:&amp;#39;&amp;#39; } })</pre><div class="contentsignin">ログイン後にコピー</div></div>しかし、小プログラムには、そのような機能はありません。それではどうすればいいでしょうか? フォームのコンテンツが変更されると、フォーム要素にバインドされたメソッドがトリガーされ、このメソッドで、フォーム上の値が this.setData({key:value}) を通じて割り当てられます。

data に対応する値を指定します。 次のコードは、それがわかると思います:

<input bindinput="bindReason" placeholder="填写理由" class=&#39;reason&#39; value=&#39;{{reason}}&#39; name="reason" />

Page({
data:{
    reason:&#39;&#39;
},
bindReason(e) {
    this.setData({
      reason: e.detail.value
    })
  }
})
ログイン後にコピー
ページ上に多くのフォーム要素がある場合、値を変更するのは物理的な作業です。 smallprogram と比較すると、vue

v-model

はとてもクールです。 #2. 値 vue

で、

this.reason を使用して値 ## を取得します。

#アプレット

で、this.data.reasonを渡して値

7を取得します。イベントパラメータをバインドして

#を渡します。 ##invue では、イベント パラメーターのバインドは非常に簡単です。必要なのは、イベントをトリガーするメソッドで仮パラメーターとして渡されるデータを渡すことだけです (例:

<button @click="say(&#39;明天不上班&#39;)"></button>

new Vue({
  el: &#39;#app&#39;,
  methods:{
    say(arg){
    consloe.log(arg)
    }
  }
})
ログイン後にコピー
##)。 #In

アプレット

では、イベントをバインドするメソッドにパラメータを直接渡すことはできません。パラメータは、要素の data- 属性にバインドされた属性値として使用する必要があります。そして、

e.currentTarget.dataset.*

で取得したメソッドで、パラメータの転送を完了します。非常に面倒です。何か...はありますか?<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">&lt;view class=&amp;#39;tr&amp;#39; bindtap=&amp;#39;toApprove&amp;#39; data-id=&quot;{{item.id}}&quot;&gt;&lt;/view&gt; Page({ data:{ reason:&amp;#39;&amp;#39; }, toApprove(e) { let id = e.currentTarget.dataset.id; } })</pre><div class="contentsignin">ログイン後にコピー</div></div><h2><strong>八、父子组件通信</strong></h2><p><strong><span style="font-size: 16px;">1.子组件的使用</span></strong></p><p>在<code>vue中,需要:

  • 编写子组件

  • 在需要使用的父组件中通过import引入

  • vuecomponents中注册

  • 在模板中使用

//子组件 bar.vue
<template>
  <div class="search-box">
    <div @click="say" :title="title" class="icon-dismiss"></div>
  </div>
</template>
<script>
export default{
props:{
    title:{
       type:String,
       default:&#39;&#39;
      }
    }
},
methods:{
    say(){
       console.log(&#39;明天不上班&#39;);
       this.$emit(&#39;helloWorld&#39;)
    }
}
</script>

// 父组件 foo.vue
<template>
  <div class="container">
    <bar :title="title" @helloWorld="helloWorld"></bar>
  </div>
</template>

<script>
import Bar from &#39;./bar.vue&#39;
export default{
data:{
    title:"我是标题"
},
methods:{
    helloWorld(){
        console.log(&#39;我接收到子组件传递的事件了&#39;)
    }
},
components:{
    Bar
}
</script>
ログイン後にコピー

小程序中,需要:

  • 编写子组件

  • 在子组件的json文件中,将该文件声明为组件

    {
      "component": true
    }
    ログイン後にコピー
  • 在需要引入的父组件的json文件中,在usingComponents填写引入组件的组件名以及路径

    "usingComponents": {
        "tab-bar": "../../components/tabBar/tabBar"
      }
    ログイン後にコピー
  • 在父组件中,直接引入即可

    <tab-bar currentpage="index"></tab-bar>
    ログイン後にコピー

    具体代码:

    // 子组件
    <!--components/tabBar/tabBar.wxml-->
    <view class=&#39;tabbar-wrapper&#39;>
      <view class=&#39;left-bar {{currentpage==="index"?"active":""}}&#39; bindtap=&#39;jumpToIndex&#39;>
        <text class=&#39;iconfont icon-shouye&#39;></text>
        <view>首页</view>
      </view>
      <view class=&#39;right-bar {{currentpage==="setting"?"active":""}}&#39; bindtap=&#39;jumpToSetting&#39;>
        <text class=&#39;iconfont icon-shezhi&#39;></text>
        <view>设置</view>
      </view>
    </view>
    ログイン後にコピー

2.父子组件间通信

vue

父组件向子组件传递数据,只需要在子组件通过v-bind传入一个值,在子组件中,通过props接收,即可完成数据的传递,示例:

// 父组件 foo.vue
<template>
  <div class="container">
    <bar :title="title"></bar>
  </div>
</template>
<script>
import Bar from &#39;./bar.vue&#39;
export default{
data:{
    title:"我是标题"
},
components:{
    Bar
}
</script>

// 子组件bar.vue
<template>
  <div class="search-box">
    <div :title="title" ></div>
  </div>
</template>
<script>
export default{
props:{
    title:{
       type:String,
       default:&#39;&#39;
      }
    }
}
</script>
ログイン後にコピー

子组件和父组件通信可以通过this.$emit将方法和数据传递给父组件。

小程序

父组件向子组件通信和vue类似,但是小程序没有通过v-bind,而是直接将值赋值给一个变量,如下:

<tab-bar currentpage="index"></tab-bar>
此处, “index”就是要向子组件传递的值
ログイン後にコピー

在子组件properties中,接收传递的值

properties: {
    // 弹窗标题
    currentpage: {            // 属性名
      type: String,     // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
      value: &#39;index&#39;     // 属性初始值(可选),如果未指定则会根据类型选择一个
    }
  }
ログイン後にコピー

子组件向父组件通信和vue也很类似,代码如下:

//子组件中
methods: {   
    // 传递给父组件
    cancelBut: function (e) {
      var that = this;
      var myEventDetail = { pickerShow: false, type: &#39;cancel&#39; } // detail对象,提供给事件监听函数
      this.triggerEvent(&#39;myevent&#39;, myEventDetail) //myevent自定义名称事件,父组件中使用
    },
}

//父组件中
<bar bind:myevent="toggleToast"></bar>

// 获取子组件信息
toggleToast(e){
    console.log(e.detail)
}
ログイン後にコピー

如果父组件想要调用子组件的方法

vue会给子组件添加一个ref属性,通过this.$refs.ref的值便可以获取到该子组件,然后便可以调用子组件中的任意方法,例如:

//子组件
<bar ref="bar"></bar>

//父组件
this.$ref.bar.子组件的方法
ログイン後にコピー

小程序是给子组件添加id或者class,然后通过this.selectComponent找到子组件,然后再调用子组件的方法,示例:

//子组件
<bar id="bar"></bar>

// 父组件
this.selectComponent(&#39;#id&#39;).syaHello()
ログイン後にコピー

【相关推荐:《vue.js教程》】

以上がvue と WeChat ミニ プログラムの違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
関連するチュートリアル
人気のおすすめ
最新のコース
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート