当前位置: 移动技术网 > IT编程>脚本编程>vue.js > Vue.js 实现微信公众号菜单编辑器功能(一)

Vue.js 实现微信公众号菜单编辑器功能(一)

2019年06月06日  | 移动技术网IT编程  | 我要评论

江苏公路信息网,rstray,sql server2000教程

学习一段时间vue.js,于是想尝试着做一个像微信平台里那样的菜单编辑器,在这里分享下

具体样式代码查看项目

创建一个vue实例

<!doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title></title>
 <script src="https://cdn.bootcss.com/vue/2.5.9/vue.js"></script>
</head>
<body>
 <div class="content" style="width:900px;margin:0 auto;">
 <!-- vue实例挂载的dom元素 -->
 <div id="app-menu">
 <!-- 菜单预览界面 -->
 <div class="weixin-preview"></div>
 <!-- 菜单编辑界面 -->
 <div class="weixin-menu-detail"></div>
 </div>
 </div>
 <script>
 var app = new vue({
 el: '#app-menu',//挂载到对应的dom元素
 data: {
 weixintitle: 'vue.js公众号菜单',
 //菜单对象
 menu: {
  "button": [
  {
  "name": "主菜单1",
  "sub_button": []
  },
  {
  "name": "主菜单2",
  "sub_button": []
  },
  {
  "name": "主菜单3",
  "sub_button": [
  {
  "name": "子菜单1"
  }]
  }]
 },
 selectedmenuindex:'',//当前选中菜单索引
 selectedsubmenuindex:'',//当前选中子菜单索引
 },
 methods: {
 }
 })
 </script>
</body>
</html>

将菜单数据渲染到模版上

这里使用v-if和v-for将数据渲染到模版上,最多会有3个主菜单以及每个主菜单最多会有5个子菜单。

<div class="weixin-preview">
 <div class="weixin-hd">
 <div class="weixin-title">{{weixintitle}}</div>
 </div>
 <div class="weixin-bd">
 <ul class="weixin-menu">
 <!-- 这里使用v-for开始循环主菜单 -->
 <li v-for="(btn,i) in menu.button" class="menu-item">
 <div class="menu-item-title">
  <span>{{ btn.name }}</span>
 </div>
 <ul class="weixin-sub-menu">
  <!-- 这里使用v-for开始循环主菜单下的子菜单 -->
  <li v-for="(sub,i2) in btn.sub_button" class="menu-sub-item">
  <div class="menu-item-title">
  <span>{{sub.name}}</span>
  </div>
  </li>
  <!-- 这里使用v-if 判断子菜单小于5个,则添加按钮来添加子菜单 -->
  <li v-if="btn.sub_button.length<5" class="menu-sub-item">
  <div class="menu-item-title">
  <i class="icon14_menu_add"></i>
  </div>
  </li>
 </ul>
 </li>
 <!-- 这里使用v-if 判断主菜单小于3个,则添加按钮来添加主菜单 -->
 <li class="menu-item" v-if="menu.button.length<3"> <i class="icon14_menu_add"></i></li>
 </ul>
 </div>
</div>

给vue实例添加方法

在vue实例中给methods对象中添加我们自定义的方法

methods: {
 //选中主菜单
 selectedmenu:function (i) {
 this.selectedsubmenuindex = ''
 this.selectedmenuindex = i
 },
 //选中子菜单
 selectedsubmenu:function (i) {
 this.selectedsubmenuindex = i
 },
 //选中菜单级别
 selectedmenulevel: function () {
 if (this.selectedmenuindex !== '' && this.selectedsubmenuindex === '') {
 //主菜单
 return 1;
 } else if (this.selectedmenuindex !== '' && this.selectedsubmenuindex !== '') {
 //子菜单
 return 2;
 } else {
 //未选中任何菜单
 return 0;
 }
 },
 //添加菜单 
 //参数level为菜单级别,1为主菜单、2为子菜单
 addmenu:function (level) {
 if (level == 1 && this.menu.button.length < 3) {
 this.menu.button.push({"name": "菜单名称",
 "sub_button": []
 })
 this.selectedmenuindex = this.menu.button.length - 1
 this.selectedsubmenuindex = ''
 }
 if (level == 2 && this.menu.button[this.selectedmenuindex].sub_button.length < 5) {
 this.menu.button[this.selectedmenuindex].sub_button.push({
 "name": "子菜单名称"
 })
 this.selectedsubmenuindex = this.menu.button[this.selectedmenuindex].sub_button.length - 1
 }
 }
}

给菜单绑定方法

当点击菜单触发selectedmenu方法,点击添加按钮触发添加addmenu方法。使用v-on来监听事件,它的缩写是@

监听点击事件@click ,为了防止子菜单点击事件冒泡的主菜单,则使用.stop事件修饰符来阻止冒泡@click.stop

使用v-bind:class来添加切换菜单选中时的class。:class为缩写

<ul class="weixin-menu" id="weixin-menu" >
 <!-- 判断如果selectedmenuindex是当前点击的主菜单索引则添加current样式 -->
 <li v-for="(btn,i) in menu.button" class="menu-item" :class="{current:selectedmenuindex===i&&selectedmenulevel()==1}" @click="selectedmenu(i)">
 <div class="menu-item-title">
 <span>{{ btn.name }}</span>
 </div>
 <!-- v-show来切换是否显示 这里如果选中了主菜单则子菜单弹出 -->
 <ul class="weixin-sub-menu" v-show="selectedmenuindex===i">
 <li v-for="(sub,i2) in btn.sub_button" class="menu-sub-item" :class="{current:selectedsubmenuindex===i2&&selectedmenulevel()==2}" @click.stop="selectedsubmenu(i2)">
 <div class="menu-item-title">
  <span>{{sub.name}}</span>
 </div>
 </li>
 <li v-if="btn.sub_button.length<5" class="menu-sub-item" @click.stop="addmenu(2)">
  <div class="menu-item-title">
  <i class="icon14_menu_add"></i>
  </div>
 </li>
 </ul>
 </li>
 <li class="menu-item" v-if="menu.button.length<3" @click="addmenu(1)">
 <i class="icon14_menu_add"></i>
 </li>
</ul>

下篇给大家介绍  vue.js 实现微信公众号菜单编辑器功能(二)    

总结

以上所述是小编给大家介绍的vue.js 实现微信公众号菜单编辑器功能,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网