Maison > interface Web > Questions et réponses frontales > Quelles sont les différences entre les mini-programmes vue et WeChat ?

Quelles sont les différences entre les mini-programmes vue et WeChat ?

青灯夜游
Libérer: 2022-01-04 11:07:04
original
2789 Les gens l'ont consulté

Différence : 1. "v-if" et "v-show" sont utilisés dans vue pour contrôler l'affichage et le masquage des éléments, tandis que "wx-if" et "hidden" sont utilisés dans les mini-programmes. 2. "v ; " est utilisé dans vue -on:event" pour lier des événements, tandis que le mini-programme utilise "bindtap(bind+event)" pour lier des événements.

Quelles sont les différences entre les mini-programmes vue et WeChat ?

L'environnement d'exploitation de ce tutoriel : système Windows 7, vue version 2.9.6, ordinateur DELL G3.

1. Cycle de vie

Premier post deux photos :

cycle de vie vue

cycle de vie du mini programme

En revanche, celui du mini programme la fonction hook est beaucoup plus simple. La fonction hook de 小程序的钩子函数要简单得多。

vue的钩子函数在跳转新页面时,钩子函数都会触发,但是小程序的钩子函数,页面不同的跳转方式,触发的钩子并不一样。

  • onLoad: 页面加载
    一个页面只会调用一次,可以在 onLoad 中获取打开当前页面所调用的 query 参数。
  • onShow: 页面显示
    每次打开页面都会调用一次。
  • onReady: 页面初次渲染完成
    一个页面只会调用一次,代表页面已经准备妥当,可以和视图层进行交互。
    对界面的设置如wx.setNavigationBarTitle请在onReady之后设置。详见生命周期
  • onHide: 页面隐藏
    navigateTo或底部tab切换时调用。
  • onUnload: 页面卸载
    redirectTonavigateBack的时候调用。

数据请求

在页面加载请求数据时,两者钩子的使用有些类似,vue一般会在created或者mounted中请求数据,而在小程序,会在onLoad或者onShow中请求数据。

二、数据绑定

VUE:vue动态绑定一个变量的值为元素的某个属性的时候,会在变量前面加上冒号:,例:

<img :src="imgSrc"/>
Copier après la connexion

小程序:绑定某个变量的值为元素属性时,会用两个大括号括起来,如果不加括号,为被认为是字符串。例:

<image src="{{imgSrc}}"></image>
Copier après la connexion

三、列表渲染

直接贴代码,两者还是有些相似

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; }
    ]
  }
})
Copier après la connexion

小程序:

Page({
  data: {
    items: [
      { message: &#39;Foo&#39; },
      { message: &#39;Bar&#39; }
    ]
  }
})<text wx:for="{{items}}">{{item}}</text>
Copier après la connexion

四、显示与隐藏元素

vue中,使用v-ifv-show控制元素的显示和隐藏

小程序中,使用wx-ifhidden控制元素的显示和隐藏

五、事件处理

vue:使用v-on:event绑定事件,或者使用@event绑定事件,例如:

<button v-on:click="counter += 1">Add 1</button>
<button v-on:click.stop="counter+=1">Add1</button>  //阻止事件冒泡
Copier après la connexion

小程序中,全用bindtap(bind+event),或者catchtap(catch+event)绑定事件,例如:

<button bindtap="noWork">明天不上班</button>
<button catchtap="noWork">明天不上班</button>  //阻止事件冒泡
Copier après la connexion

六、数据双向绑定

1.设置值

vue中,只需要再表单元素上加上v-model,然后再绑定data中对应的一个值,当表单元素内容发生变化时,data中对应的值也会相应改变,这是vue非常nice的一点。

<div id="app">
    <input v-model="reason" placeholder="填写理由" class=&#39;reason&#39;/>
</div>

new Vue({
  el: &#39;#app&#39;,
  data: {
   reason:&#39;&#39;
  }
})
Copier après la connexion

但是在小程序中,却没有这个功能。那怎么办呢?
当表单内容发生变化时,会触发表单元素上绑定的方法,然后在该方法中,通过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
    })
  }
})
Copier après la connexion

当页面表单元素很多的时候,更改值就是一件体力活了。和小程序一比较,vuev-model简直爽的不要不要的。

2.取值

vue中,通过this.reason取值

小程序中,通过this.data.reason取值

七、绑定事件传参

vue中,绑定事件传参挺简单,只需要在触发事件的方法中,把需要传递的数据作为形参传入就可以了,例如:

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

new Vue({
  el: &#39;#app&#39;,
  methods:{
    say(arg){
    consloe.log(arg)
    }
  }
})
Copier après la connexion

小程序中,不能直接在绑定事件的方法中传入参数,需要将参数作为属性值,绑定到元素上的data-属性上,然后在方法中,通过e.currentTarget.dataset.*

vue sera déclenchée lors du passage à une nouvelle page, mais la fonction hook du mini programme ne déclenchera pas le hook dans différentes méthodes de saut de page, non. le même. 🎜
  • onLoad : Chargement de la page
    Une page ne sera appelée qu'une seule fois. Vous pouvez appeler le pour ouvrir la page actuelle dans <code>onLoad. paramètre code> requête.
  • onShow : Affichage de la page
    Appelé une fois à chaque ouverture de la page.
  • onReady : Le rendu initial de la page est terminé
    Une page ne sera appelée qu'une seule fois, ce qui signifie qu'elle est prête et peut interagir avec la couche de vue .
    Les paramètres d'interface tels que wx.setNavigationBarTitle doivent être définis après onReady. Pour plus de détails, consultez Cycle de vie
  • onHide : Page Hide
    Appelé lorsque navigateTo ou l'onglet inférieur est basculé.
  • onUnload : Déchargement de page
    Appelé lorsque redirectTo ou navigateBack.
🎜🎜Demande de données🎜🎜🎜Lorsque la page charge et demande des données, l'utilisation des deux hooks est quelque peu similaire à vue qui est généralement utilisée dans created. ou les données sont demandées dans monté, et dans Mini Programme, les données seront demandées dans onLoad ou onShow</ code>. 🎜🎜2. Liaison de données🎜🎜<code>VUE : Lorsque vue lie dynamiquement la valeur d'une variable à un attribut d'un élément, un deux-points sera ajouté devant la variable :, par exemple : 🎜
<view class=&#39;tr&#39; bindtap=&#39;toApprove&#39; data-id="{{item.id}}"></view>
Page({
data:{
    reason:&#39;&#39;
},
toApprove(e) {
    let id = e.currentTarget.dataset.id;
  }
})
Copier après la connexion
Copier après la connexion
🎜< code>Mini Programme : Lorsque la valeur d'une variable est liée à un attribut d'élément, elle sera entourée de deux accolades. S'il n'y a pas de parenthèses, elle sera considérée comme une chaîne. Exemple : 🎜
//子组件 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>
Copier après la connexion
Copier après la connexion
🎜🎜 3. Rendu de liste 🎜🎜🎜 Collez directement le code, les deux sont quand même un peu similaires 🎜🎜🎜vue : 🎜🎜
{
  "component": true
}
Copier après la connexion
Copier après la connexion
🎜🎜Mini programme : 🎜🎜
"usingComponents": {
    "tab-bar": "../../components/tabBar/tabBar"
  }
Copier après la connexion
Copier après la connexion
🎜🎜 4. Afficher et masquer des éléments 🎜 🎜 🎜< Dans code>vue, utilisez v-if et v-show pour contrôler l'affichage et le masquage des éléments🎜🎜Dans Mini Programme< /code>, utilisez <code>wx-if et hidden pour contrôler l'affichage et le masquage des éléments🎜🎜5 Traitement des événements🎜🎜vue : utilisez. v-on :event pour lier des événements, ou utilisez @event pour lier des événements, par exemple : 🎜
<tab-bar currentpage="index"></tab-bar>
Copier après la connexion
Copier après la connexion
🎜Mini Programme, tous utilisent < code>bindtap(bind+ event), ou catchtap(catch+event) pour lier des événements, par exemple : 🎜
// 子组件
<!--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>
Copier après la connexion
Copier après la connexion
🎜🎜 6. Liaison de données bidirectionnelle🎜🎜🎜🎜1. Définissez la valeur🎜🎜🎜 dans < In code>vue, il vous suffit d'ajouter v-model à l'élément form, puis de lier l'élément correspondant in data Une valeur. Lorsque le contenu de l'élément de formulaire change, la valeur correspondante dans data changera également en conséquence. C'est une très bonne chose à propos de vue<. /code>. 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">// 父组件 foo.vue &lt;template&gt; &lt;div class=&quot;container&quot;&gt; &lt;bar :title=&quot;title&quot;&gt;&lt;/bar&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; import Bar from &amp;#39;./bar.vue&amp;#39; export default{ data:{ title:&quot;我是标题&quot; }, components:{ Bar } &lt;/script&gt; // 子组件bar.vue &lt;template&gt; &lt;div class=&quot;search-box&quot;&gt; &lt;div :title=&quot;title&quot; &gt;&lt;/div&gt; &lt;/div&gt; &lt;/template&gt; &lt;script&gt; export default{ props:{ title:{ type:String, default:&amp;#39;&amp;#39; } } } &lt;/script&gt;</pre><div class="contentsignin">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</div></div>🎜Mais dans <code>Mini Programme, une telle fonction n'existe pas. Ce qu'il faut faire?
Lorsque le contenu du formulaire change, la méthode liée à l'élément du formulaire sera déclenchée, puis dans cette méthode, this.setData({key:value}) sera utilisé pour définir les données sur le formulaire. La valeur est affectée à la valeur correspondante dans data.
Ce qui suit est le code, vous pouvez le sentir : 🎜
<tab-bar currentpage="index"></tab-bar>
此处, “index”就是要向子组件传递的值
Copier après la connexion
Copier après la connexion
🎜Lorsqu'il y a de nombreux éléments de formulaire sur la page, changer les valeurs est un travail physique. Comparé au Mini Program, le v-model de vue est tout simplement trop beau pour être manqué. 🎜🎜🎜2. Obtenez la valeur🎜🎜🎜Dans vue, passez this.reason pour obtenir la valeur🎜🎜Dans mini programme, passez Valeur this.data.reason 🎜🎜🎜 7. Liaison des paramètres de transmission d'événements 🎜🎜🎜 Dans vue, la liaison des paramètres de transmission d'événements est assez simple. Il vous suffit d'utiliser la méthode. qui déclenche l'événement. , transmettez simplement les données qui doivent être transmises en tant que paramètres formels, par exemple : 🎜
properties: {
    // 弹窗标题
    currentpage: {            // 属性名
      type: String,     // 类型(必填),目前接受的类型包括:String, Number, Boolean, Object, Array, null(表示任意类型)
      value: &#39;index&#39;     // 属性初始值(可选),如果未指定则会根据类型选择一个
    }
  }
Copier après la connexion
Copier après la connexion
🎜Dans Mini Programme, vous ne pouvez pas transmettre directement les paramètres dans la méthode de liaison des événements. Vous devez transmettre les paramètres comme La valeur de l'attribut est liée à l'attribut data- sur l'élément, puis dans la méthode, elle est obtenue via e.currentTarget.dataset.*</ code> pour terminer le transfert des paramètres, c'est très gênant, n'est-ce pas...🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><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">Copier après la connexion</div></div><div class="contentsignin">Copier après la connexion</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>
Copier après la connexion
Copier après la connexion

小程序中,需要:

  • 编写子组件

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

    {
      "component": true
    }
    Copier après la connexion
    Copier après la connexion
  • 在需要引入的父组件的json文件中,在usingComponents填写引入组件的组件名以及路径

    "usingComponents": {
        "tab-bar": "../../components/tabBar/tabBar"
      }
    Copier après la connexion
    Copier après la connexion
  • 在父组件中,直接引入即可

    <tab-bar currentpage="index"></tab-bar>
    Copier après la connexion
    Copier après la connexion

    具体代码:

    // 子组件
    <!--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>
    Copier après la connexion
    Copier après la connexion

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>
Copier après la connexion
Copier après la connexion

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

小程序

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

<tab-bar currentpage="index"></tab-bar>
此处, “index”就是要向子组件传递的值
Copier après la connexion
Copier après la connexion

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

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

子组件向父组件通信和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)
}
Copier après la connexion

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

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

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

//父组件
this.$ref.bar.子组件的方法
Copier après la connexion

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

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

// 父组件
this.selectComponent(&#39;#id&#39;).syaHello()
Copier après la connexion

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal