uni-app 打包发行微信小程序时 v-if不识别

uni-app 打包发行微信小程序时 v-if不识别

示例代码:

<u-grid-item class="menuitem" v-if="userInfo.roleIds != null && userInfo.roleIds.length>0 && (userInfo.roleIds.indexOf(102)>-1 || userInfo.roleIds.indexOf(104)>-1)">
<navigator open-type="navigate" hover-class="none" @click="toVisit">
<i class="iconfont iconjihua" style="color:#ff6600;"></i>
<view class="grid-text">客户</view>
</navigator>
</u-grid-item>

操作步骤:

本地正常可识别v-if判断,发行微信小程序后,无法识别v-if="userInfo.roleIds != null && userInfo.roleIds.length>0 && (userInfo.roleIds.indexOf(102)>-1 || userInfo.roleIds.indexOf(104)>-1)"

预期结果:

发行到小程序,应该和本地一样可以识别

实际结果:

不可识别,生成的代码为

wxml:

<block wx:if="{{$root.g4}}">
<u-grid-item class="menuitem" vue-id="{{$root.g8dd740cc-15}},{{$root.g8dd740cc-2}}" bind:l="l" vue-slots="{{['default']}}" >
<navigator open-type="navigate" hover-class="none" data-event-opts="{{[['tap',[['toVisit',['$event']]]]]}}" bindtap="__e">
<view class="iconfont iconjihua _i" style="color:#ff6600;"></view>
<view class="grid-text">客户拜访</view>
</navigator>
</u-grid-item>
</block>

js:

t = function() {
var e = this,
n = e.$createElement,
o = (e._self._c, {
background: "#F5B53A"
}),
r = e.userInfo.roleIds.indexOf(102) > -1 || e.userInfo.roleIds.indexOf(104) > -1,
t = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.$root.g0,
u = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.userInfo.roleIds.indexOf(101) > -1,
s = -1 != e.userInfo.roleIds.indexOf("102") || -1 != e.userInfo.roleIds.indexOf("104"),
i = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.$root.g3,
l = e.userInfo.roleIds.indexOf(102) > -1 || e.userInfo.roleIds.indexOf(104) > -1,
d = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.$root.g5,
a = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.userInfo.roleIds.indexOf(101) > -1,
f = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.userInfo.roleIds.indexOf(104) > -1,
c = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.userInfo.roleIds.indexOf(101) > -1,
I = e.userInfo.roleIds.indexOf(102) > -1 || e.userInfo.roleIds.indexOf(104) > -1,
g = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.$root.g10,
h = null != e.userInfo.roleIds && e.userInfo.roleIds.length > 0 && e.userInfo.roleIds.indexOf(101) > -1;
e.$mp.data = Object.assign({}, {
$root: {
a0: o,
g0: r,
g1: t,
g2: u,
g3: s,
g4: i,
g5: l,
g6: d,
g7: a,
g8: f,
g9: c,
g10: I,
g11: g,
g12: h
}
})
},

bug描述:

在本地可以识别判断,但发行到小程序-微信,就无法识别,查看了打包后的微信文件,有问题

Image Image Image


更多关于uni-app 打包发行微信小程序时 v-if不识别的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

demo发一下

更多关于uni-app 打包发行微信小程序时 v-if不识别的实战教程也可以访问 https://www.itying.com/category-93-b0.html


<u-grid-item class="menuitem" v-if="userInfo.roleIds != null && userInfo.roleIds.length>0 && (userInfo.roleIds.indexOf(102)>-1 || userInfo.roleIds.indexOf(104)>-1)"> <navigator open-type="navigate" hover-class="none" [@click](/user/click)="toVisit"> <view class="grid-text">客户拜访</view> </navigator> </u-grid-item>

你这个写法 有点生猛

哪有生猛?只是条件有点多,这很正常啊,这个编译到微信小程序,就不行,把hbuilderX版本换成3.3.11这个版本后就可以了,这肯定是版本问题

好的,我看下

uni-app 中打包发行微信小程序时,如果遇到 v-if 不识别的问题,可能是由于以下几个原因导致的。以下是一些常见的排查和解决方法:


1. 检查语法是否正确

确保 v-if 的语法是正确的,并且绑定的变量或表达式是有效的。例如:

<view v-if="isShow">显示内容</view>

确保 isShowdata 中已定义,并且是一个布尔值。


2. 检查微信小程序版本

uni-appv-if 是基于微信小程序的 wx:if 实现的。确保你的微信开发者工具和基础库版本是最新的,避免因版本问题导致的不兼容。


3. 检查编译模式

uni-app 支持两种编译模式:

  • Vue 编译模式:默认模式,使用 Vue 的语法(如 v-if)。
  • 小程序原生模式:将 Vue 语法转换为小程序原生语法(如 wx:if)。

如果 v-if 不生效,可以尝试切换到小程序原生模式。在 manifest.json 中配置:

{
  "mp-weixin": {
    "usingComponents": true,
    "optimization": {
      "subPackages": true
    },
    "vueCompiler": false // 关闭 Vue 编译模式,使用小程序原生模式
  }
}

4. 检查代码作用域

确保 v-if 绑定的变量在当前组件的作用域内。如果变量是父组件传递的 props,确保 props 已正确声明和传递。


5. 检查样式或布局问题

有时 v-if 生效了,但由于样式或布局问题,内容没有正确显示。可以通过调试工具检查元素是否存在。


6. 检查条件表达式

如果 v-if 的条件表达式过于复杂,可能会导致解析失败。尝试简化表达式,或者将复杂逻辑放到 computedmethods 中。


7. 检查 uni-app 版本

确保 uni-app 的版本是最新的,旧版本可能存在兼容性问题。可以通过以下命令更新:

npm install @dcloudio/uni-app@latest

8. 调试工具

使用微信开发者工具的调试功能,检查是否有报错信息。如果有报错,根据提示进行修复。


9. 示例代码

以下是一个完整的示例,确保 v-if 正常工作:

<template>
  <view>
    <button @click="toggleShow">切换显示</button>
    <view v-if="isShow">显示内容</view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      isShow: false,
    };
  },
  methods: {
    toggleShow() {
      this.isShow = !this.isShow;
    },
  },
};
</script>
回到顶部