webpack + vue 实现 弹窗功能

对于刚入门webpack + vue 不久的新人来说,这技术,确实有些不太友好,相比较于直接操纵dom元素的jQuery,直接操纵数据的 vue 在webpack框架下实现多级弹窗的效果,要麻烦很多。

需求背景:点击地图撒点,会有一个回调函数返回数据,然后需要根据返回的数据打开弹窗,显示详细内容。

一开始我是设置了一些全局的变量和方法,通过全局方法获得回调函数返回的数据,然后再将此数据赋值给全局变量,以供所有页面使用。

但是这里有两个问题:

1.全局变量无法在Mustache(双花括号)和 vue指令 里面使用,即:

v-if="popCon.show"       //控制弹窗显示和隐藏          popCon为popupController的缩写,此变量用来控制弹窗的显示隐藏

{{globalResult.name}}    //使用回调函数返回的数据在弹窗中显示  globalResult为回调函数返回的数据,在页面中展示

2.即使通过在data中使用 中间变量 来赋值使用,但是当全局变量的更新时,本地变量无法同步

data: {

  localCon: popCon,

  localResult: globalResult

}

v-if="localCon.show"

{{localCon.name}}      //这种情况,当 popCon 和 globalResult 发生变化时,localCon 和 localResult 无法同步

在无法绕开这两个问题的情况下,使用全局变量这种方式已经无法实现当前的需求。

所以,这里推荐使用 vuex 的全局变量来实现效果。

========================================

解决方案:

首先,在 vuex 的state中设置两个全局变量

const state = {

  popCon: {

    controller1: false,    //第一个弹窗显示控制,可以通过给弹窗的 X ,添加点击事件,赋值,来关闭窗口

    controller2: false     //第二个弹窗显示控制

  },

  globalResult: {          //此变量为回调函数返回的数据

    name: "名称"    

  }

}

然后,在相应的弹窗组件中使用这两个全局变量来达到效果

v-if="$store.state.popCon.controller1"  //显示效果,控制组件的显示效果,这里就不写组件的代码了

{{$store.state.globalResult.name}}     //数据效果

现在这里都是默认的数据,然后需要在回调函数中给全局变量赋值

一般来说,我们都是直接给变量赋值,也就是 $store.state.globalResult = result

但是 vue 官方不推荐直接修改state的属性

推荐我们使用mutations来修改state的属性

function callback (result) {

  vueObj.$store.commit('globalResult',result)  //这里就不解释 vuex 的 mutations的写法了

  vueObj.$store.commit('popCon',true)      //设置弹窗显示为 true,打开弹窗  这里的 popCon 是 mutations里面的一个方法名为 popCon 的函数,上一行 globalResult 同理

}

到这里,就已经实现了 通过vuex 来达到打开弹窗详情界面的功能。

通过点击某个地方,获取数据,然后打开详情页面,显示数据内容,点击关闭按钮关闭弹窗

如果需要实现多级详情弹窗,可以在弹窗界面中嵌套使用。

vue实现多级弹窗的更多相关文章

  1. 从零开始徒手撸一个vue的toast弹窗组件

    相信普通的vue组件大家都会写,定义 -> 引入 -> 注册 -> 使用,行云流水,一气呵成,但是如果我们今天是要自定义一个弹窗组件呢? 首先,我们来分析一下弹窗组件的特性(需求): ...

  2. vue 阻止冒泡弹窗小案例( 知识点:@click.stop=''")

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  3. vue中前端弹窗队列展示

    在前端写一个弹窗可能很简单,那如果同时有多个弹窗呢 这样的话就要考虑弹窗的展示问题,肯定是不能叠加在一起的,这时候就要通过队列(先进先出)来展示 思路就是根据队列来实现,至于具体的实现方式,可以在项目 ...

  4. Vue自定义Popup弹窗组件|vue仿ios、微信弹窗|vue右键弹层

    基于vue.js构建的轻量级Vue移动端弹出框组件Vpopup vpopup 汇聚了有赞Vant.京东NutUI等Vue组件库的Msg消息框.Popup弹层.Dialog对话框.Toast弱提示.Ac ...

  5. vue项目|在弹窗中引入uchart图表子组件不显示

    为了解决uchart作为子组件在主组件里引用但不显示的情况,(同样适用于弹窗之中)目前有三种方法. 1-解决方式 1>如果你使用的uchart子组件是从官方拿的例子:进入到uchart子组件将o ...

  6. vue在多级联动时,一些情况不用watch而用onchange会更好

    onchange事件在内容改变且失去焦点时触发,因此在一些多级联动需要清空次级内容的时候,用onchange就非常有用了,尤其是浏览器会提前加载数据的情况下.有篇文章可以看一下,链接. PS:路漫漫其 ...

  7. vue使用sweetalert2弹窗插件

    1). 安装 sweetalert2 npm install sweetalert2@7.15.1 --save 2). 封装 sweetalert2 在 src 新建 plugins 文件夹,然后新 ...

  8. vue+vue-video-player实现弹窗播放视频

    将视频播放器标签放在对话框标签中,实现弹窗 template 中 <el-dialog :visible.sync="dialogVisible" width='680px' ...

  9. vue 点击弹窗外框关闭弹框

    https://blog.csdn.net/zjw0742/article/details/77822777 ready() { document.addEventListener('click', ...

随机推荐

  1. 浅谈回归(二)——Regression 之历史错误翻译

    我很好奇这个问题,于是搜了一下.我发现 Regression 这个词 本意里有"衰退"的意思. 词根词缀: re- 回 , 向后 + -gress- 步 , 级 + -ion 名词 ...

  2. Mac系统丢失管理员

    今天把osx变成平行用户,提示说要重启,但是一进来,我靠,自己的管理员用户变成了普通用户.我靠,有这么搞的嘛? 不能安装软件,不能https,不能保存密码,什么也不能做了. 网上一查,找到了几个解决方 ...

  3. java自增(自减)运算符

    自增(自减)运算符: ++ --就是可以将当前变量自我增加(减少)1 的运算符. i++, 后++, 先将 i 的值作为整个表达的值, 然后将 i 增加 1. ++i, 先++, 先将 i 增加 ...

  4. mongodb 3.4复制搭建

    mongodb数据库主从复制的原理:在主从结构中,主节点的操作记录称为oplog(operation log).oplog存储在一个系统数据库local的集合oplog.$main中,这个集合的每个文 ...

  5. linux系统开机突然黑屏,只有光标

    以前系统都是好好的,今天开机黑屏了,只有一个光标可以看见其他东西都看不见了. 经过检查发现是磁盘满了,将不用的文件删除之后可以正常开机了.特此记录一下!!! 有人问黑屏了怎么删文件? 我采用的方法是W ...

  6. MVC 接收参数时会自动解码

    MVC在接收传递过来的参数时,会自动对参数进行解码,无需手动解码 例: public ActionResult SendMsg2(string name) { return Content(name) ...

  7. sql2005 和 mysql 定时备份批处理

    保存为sqlbak.bat  目录我直接放winrar 的根目录了 或者拷贝一个winrar.exe 具体目录随意. 然后添加计划任务个人的话建议一周或者一天 虚拟主机等 建议每周或者每月 @echo ...

  8. PostgreSQL的generate_series函数应用

    一.简介 PostgreSQL 中有一个很有用处的内置函数generate_series,可以按不同的规则产生一系列的填充数据. 二.语法 函数 参数类型 返回类型 描述 generate_serie ...

  9. PhoneGap API 之多媒体

    一. MediaApi 简单介绍 PhoneGap API Media 对象提供录制和回放设备上的音频文件的能力 参数: var media = new Media(src, mediaSuccess ...

  10. bzoj4600 [Sdoi2016]硬币游戏

    Description Alice和Bob现在在玩的游戏,主角是依次编号为1到n的n枚硬币.每一枚硬币都有两面,我们分别称之为正面和反面.一开始的时候,有些硬币是正面向上的,有些是反面朝上的.Alic ...