inter18099

inter18099 查看完整档案

邢台编辑四川外语学院成都学院  |  日语 编辑  |  填写所在公司/组织 xiaozhangzaici.com 编辑
编辑

Java & Python coder.
Looking for a remote job.

个人动态

inter18099 提出了问题 · 2020-03-29

微服务架构下的事件驱动的主从复制具体应该如何做?

我看了

https://microservices.io/patterns/data/event-driven-architecture.html

https://medium.com/trendyol-tech/event-driven-microservice-architecture-91f80ceaa21e

https://medium.com/@john_freeman/querying-data-across-microservices-8d7a4667668a

等等,

搜索了 how to do data replication in mysql microservices,microservice data replication which is master which is slave 。

等等

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

只看出来事件驱动能解决不同服务的耦合问题,能实现松耦合,然后事件驱动的数据最终一致性问题可以由主从复制来实现。我以前不知道什么是主从复制,我搜了下,发现就是一个 master 库一个 slave 库,配好了,自从从 master 库同步到 slave 库。

现在问题来了,假如我有 4 个微服务,1 个 order,1 个 product,1 个 shipment,1 个 pay,那么假如,order 微服务需要 product 微服务的数据库数据,那么我就在 order 微服务下创建一个 product 微服务数据库的 slave 库?如果这样,order服务就有2个数据库,查起来也不方便啊。怎么办啊?

关注 2 回答 1

inter18099 回答了问题 · 2020-01-30

jsp页面部分中文乱码

我在google上找的,你看看能行不?

修改web.xml文件,增加以下行:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <page-encoding>UTF-8</page-encoding>
  </jsp-property-group>
</jsp-config>

第二次回答:

不好意思,我新建了一个java web项目,想重现你的问题,引入了Kendo UI for jQuery,但运行起来,在我那里是好的。我什么utf-8都没设置,一切默认,就能显示中文列名。我把整个项目上传到github了,你可以看看,希望有用。

参考demo:https://demos.telerik.com/ken...
项目本地运行效果:image.png
Github仓库:https://github.com/inter18099...

关注 3 回答 2

inter18099 关注了问题 · 2020-01-30

jsp页面部分中文乱码

概述

Java SSM 项目,jsp页面中使用了 kendo ui 的表格组件 grid。表格的内容中有中文是正常显示的,但是列头上的中文就乱码了。列头是jsp 页面引用了一个 js 文件,该js 文件中定义了每个列的字段、中文,同时该文件的字符集是 utf8。效果如下:
部分中文乱码.png

我做的努力

jsp 页面中引用该 js 文件时,一开始是这样的:<script type="text/javascript" data-original="myjs/Chro.js"\></script>,后来网上搜索了下说要制定字符集,那么我就修改为:<script charset="utf-8" type="text/javascript" data-original="myjs/Chro.js"\></script>,即显式的指定了字符集是 utf8。运行起来后仍然是这样。

额外

由于项目代码太多,不知道如何贴出来,索性就不贴了。这种情况可能是哪些地方的问题,要如何解决,非常感谢您的回复。

补充资料

现在能想到的几个地方都设置了字符集,仍然是这样
所有字符集.png
使用notepad++打开js 文件查看字符集:
js文件编码.png
使用chrome打开js 文件:
浏览器打开JS文件.png

尝试

第一次尝试:

  1. web.xml 中设置字符集
    webxml中设置字符集.png
  2. jsp 页面中通过 include 包含 js 文件
    include.png
  3. 结果:
    结果.png
    整个页面都是这种乱码了。。include是在jsp页面的最后

解决

重新安装了比较新的版本的IDEA(2019.3)项目导入后运行就正常的。回想了下,应该是之前在IDEA中设置字符集时将原始文件的编码修改了,后来即使调整回原来的编码问题依然存在,安装新的IDEA后没有做任何配置直接运行项目就OK的,感谢 @inter18099 还专门做了项目上传到GIT演示,感谢 @zonxin ,一直到凌晨还在帮我看。

关注 3 回答 2

inter18099 赞了回答 · 2020-01-30

为啥我的Visual studio code SSH Remote 颜色不是绿色

这里的颜色显示与你选择的VSCode颜色主题有关,官方默认的颜色主题显示为绿色。
可以在菜单中的颜色主题进行更改

关注 2 回答 1

inter18099 赞了问题 · 2019-08-15

怎么透彻理解编程里的嵌套?

想请教大家一个问题:

  • 在循环里面, 单个循环好理解.
  • 一个循环里嵌套另一个循环, 测试输出结果, 能理解.
  • 一个循环里嵌套两个循环, 一共三层循环, 就蒙了.
  • 对于多层循环嵌套, 怎么才能达到: 一看代码, 就知道不同层级的变量是什么内容?

  1. 这里面有什么"思维技巧, 某个相关的概念" 能让人理解多层循环嵌套吗? 或者某种思维训练?
  2. 还是说相关代码写的多了就自然理解了?
  3. 对于循环和嵌套, 大家有什么独特的见解吗?

一直发现存在一个问题: php框架, 类库, 环境配置, php函数, 这些都相对容易理解. 反而对于一些基础东西不懂或懂得浅. 比如匿名函数, 闭包, 嵌套循环等等, 很慌.

关注 7 回答 5

inter18099 回答了问题 · 2019-08-14

解决flask + gunicorn 更新文件后,必须要重启gunicorn之后,浏览器才会显示新内容

启动Gunicorn时加参数:--reload

官方文档
http://docs.gunicorn.org/en/1...

相关讨论;
https://stackoverflow.com/que...

关注 2 回答 2

inter18099 赞了文章 · 2019-08-13

一步步教你编写不可维护的 PHP 代码

file

译者注:这是一篇很棒文章,使用有趣的叙述方式,从反面讲解了作为一个优秀的 PHP 工程师,有哪些事情是你不能做的。请注意哦,此篇文章罗列的行为,都是你要尽量避免的。

随着失业率越来越高,很多人意识到保全自己的工作是多么的重要。那么,什么是保住自己工作,并让自己无可替代的好方法呢?一个很简单的事实是只要你的代码没有人能够维护,那么你就成功保住了工作。编写不可维护的代码是一个特殊的技能,但奇怪的是,似乎对某些开发者来说是很自然的。不过对于剩下的开发者来说,这里有一些技巧和提示来让你开始写不可维护的代码。

首先要做的事情

第一步,从找工作开始。你应该寻找合适的公司,在那里你可以尽情发挥并实现你那不可维护的潜力。 你不一定需要成为公司的 PHP 大牛如果是那更好。找工作时,如果工作描述提到需要从其它的迁移到 PHP (所以你知道你会做主),或者也可以搜索那种需要10年 PHP5 工作经验的误导性工作,再加上熟练使用 FrontPage 和 Netscape Composer 。

一旦你获得这种千载难逢的机会,从第一天开始就要采取措施。在会议上发言,让你的意见被听到。大胆谈论面向对象的架构设计,企业,改革方案,怎样让够好变得更好,当然你也得做出相应的承诺。确保每个人在重要的编码环节都咨询你的意见。

不可维护的核心

灵感来源于优秀的文章 “Writing unmaintainable code” (想要保住工作的人一定会看的), 以下是你需要掌握和精通的两个重要概念:

  1. 你应该让别人无法轻易地修改任何东西,除非他破坏另外一些东西。

    维护人员没有时间去理解你的代码。 可维护的代码意味着能够在堆积如山的代码中快速定位到特定的部分,能够快速明白它是如何工作的并且在不破坏一些东西的情况下进行修改。你不能这样做。 不能让别人能轻易地搜索到某些东西或者在他们期待的地方找到。

  2. 你的代码不能“看起来”不可维护(因为别人会怀疑的), 它必须“是”不可维护。

    代码在维护人员看起来应该是正常的,但要在他们最意想不到的时候给他们一个惊喜。

最佳实践

  1. 禁止代码约定。 关于编码和命名约定的对骂无穷无尽。这样的情况绝不能在你优秀的组织中出现。你有牛逼的项目要做,你不可能花上无数的时间来讨论用 tab 还是还是空格。再说了,约定就是限制。如果一个新人入职,并且他不习惯你的约定,他会很痛苦。不快乐的程序员是没有效率的程序员。谁问你你就向他们解释。让每个人都用他们自己喜欢的风格写代码。至于你自己的代码 - 变换你的约定。周一用 camelCase 小驼峰命名,周二用 all_lowercase 全小写命名,周五混合着用,在每个 2 月 29 日 使用匈牙利命名法。
  2. 不写注释。 你的代码很优美,它不需要注释。如果有人不理解你的代码,那么很有可能他们不是那么好的程序员。如果,有这个可能的话,你被强迫要求写注释,那么直接夸张的写。详细描述最明显和最不重要的代码,跳过其它的。

        // 下面这一块代码
        // 我们增加两个变量:
        // 命名为变量 a 和变量 b
        // 两个都是整数
    
        // 声明变量 a
        // 并给它赋值整数 1
        $a = 1;
        // 声明变量 b
        $b = 2;
        // 给变量 a 和 b 求和
        // 声明和初始化见上面
        // 并且将结果赋值给
        // 一个新的变量 c
        $c = $a + $b;
    
  3. 使用记事本编码。 或者使用其他没有代码缩进展示的编辑器。使得其他人忍受痛苦最终离开团队。这样你就不用总是听他们的抱怨了。如果有人问你为什么使用记事本,准备好解释:因为它来自于 Windows (当今唯一一个,为富有创造性的程序员准备的操作系统),无需任何必要的培训,也不需要花费任何代价。我相信你能在网上找到你可以使用任何程序的参考文献,甚至包括 Word,来编写你的网页代码,但是只有记事本才是真正的权威,毕竟,你们公司雇佣的人只有你才是权威。
  4. 拒绝单元测试。 向任何质疑你的人解释,你是被雇佣过来编写高质量并且没有漏洞的代码的(因此,无需测试)。为什么会有头脑正常的人会花时间来写无关紧要的测试来证实代码能否正常运行?有些事情在生活中就像-天空是蓝色的,太阳从东方升起,你的代码是能够正常运行的,因此非常感谢。继续(就像评论一样,如果被迫接受测试,那么准备好测试那些显而易见的内容然后跳过其他的部分)
  5. 不使用模板引擎。 模板引擎能够帮助你区分业务逻辑层与展示层。它可以保证代码的可维护性所以你不能遵守这个规定。PHP 之父 Rasmus Lerdorf 说过:“PHP 就是模板引擎”。即使你迫不得已使用模板引擎,也要找到对应的方法滥用它,例如放一些业务代码在模板中,或者是小心的将HTML(和 CSS 和 JavaScript)代码混合在数据库访问层中。

一般来说,尽可能在同一行代码中的将你的 PHP,HTML,CSS 和 JavaScript 代码理直气壮地混合在一起。在 PHP 代码中创建 JavaScript 和带内联样式的 HTML 代码。如果别人问到,告诉他们这种模式叫做“封装”,你会对你的代码负全部责任。

  1. 版本控制。 虽然这很难避免,但是使自己摆脱任何形式或版本控制很值得尝试。你可以在讨论的时候向大家证明这样做提高了团队成员之间的沟通,而不是去依赖冷血的版本控制软件。如果你没有说服任何人,请不要绝望。 你提交的时候可以不 commit all 。 在本地保留一些自己的代码。这样如果你以外的人试图构建和部署的话,这些小而致命的代码片段将会破坏这个项目。 如果被抓了,就辩解说这些代码还不适合展示,毕竟,你提交了能够教育初级团队的高质量的代码和优秀的解决方案。这些小男孩和小女孩将会仰望着你并充满期待!
  2. 构建一个框架。 然后你不可避免地成为架构师,你的权威毋庸置疑。这样你就可以添加一些秘密约定(当然其中大多数有时是自相矛盾的),即使是最有经验的维护人员也察觉不出。 你的框架将负责所有的事情,不需要任何人费心地去理解它,大家会很开心因为你一个人让开发变得更容易而且提高了整个公司的产能。不要以开源的方式发布你的框架,因为 a) 这个框架是公司的资产而且公司投入了人大量的资金, b) 开源社区会嘲笑你,而且这将成为你虚张声势的结局。

命名相关

你的变量名应该起的神秘一些,最好只有一个字母。 这样谁都无法通过简单的搜索找到需要的内容。

类名和方法最好也使用一个字母来定义。如果你确实想定义一个正常点的名字,那就一直使用它吧 —— 记住,隐藏信息的最好方法就是频繁的使用它。 当重复使用相同名称(称为“面向对象的编程”)时,如果将圆括号和花括号放在新的一行,这将有助于提高代码的可读性,并且让队友在你的代码中寻找任何东西时,都得重温一下正则表达式。考虑一下吧:

    $noodles = 1;
    class
    noodles
    {
        var $noodles = 2;
        function
            noodles
            ()
        {
            $noodles['noodles'] = 'noodles';
        }
    }
    function
        noodles() {
            return new noodles;
        }
    $noodles = noodles();
    var_dump($noodles);

你也可以使用奇特的字符集来命名变量。西里尔字母就非常合适,因为有些字母看起来跟罗马字母一样, 但其实不是(所有这些:xopekacMEBCTAKXOPH)。那么下面的输出是:

    $alert = 1;
    $аlert = 2;
    echo $alert;

2?如果第二个 alert以西里尔字母"a"开头,则不可以!

引用相关

即使你非常正常的定义来一些东西,但并不意味着你不能以有趣的方式来使用它。主要的武器有:

  • eval()
  • 可变变量
  • 可变类,比如$strudels = "noodles"; $noo = new $strudels;
  • call_user_func()

基本上任何将代码视为字符串的语言结构都是你的好朋友。

    // calling abc();
    $z = 'A';
    call_user_func($z .'bC');

大写

字母例子,函数方法名不区分大小写,滥用这个特点。

function abc(){
    echo "abc";
}
AbC();

另一方面,数组的健(key) 对大小写敏感,也滥用这个特点。

$a['UseConvetionsOnlyTobreakThem'] = 1;
if (isset($a['UseConvetionsOnlyToBreakThem'])) {
    // ?? 大写 B !!1!
}

重写

在不期望的情况下重写全局变量,尤其是超全局变量。尽早重写$_GET数组中的属性,多次重写,$_POST亦是如此。在$_REQUEST上做一些不起眼的重写作为点缀。如果是在WTF-ed上,你可以解释是在防止用户输入的 XSS 攻击、注入攻击以及其他的病毒攻击。

控制结构

使用、混合、匹配所有备选的ifwhileforforeachswitch语法。如果被问起来,所有的这些,请解释说你正在培训新员工学习真正的语言。

if ($a > 5):
  if ($a > 4) {
      while ($a > 0):
        echo --$a;
      endwhile;
  }
endif;

嵌套三元运算符,没有比这个更好、更简洁的代码了。

// 猜猜这里输出什么
echo true ? 'true' : false ? 't' : 'f';

for的循环体内,再次增加$i以保持所有人的注意。或者,通过不使用$i来实现循环增量的惊喜。从不。

嵌套循环、深入,然后突然跳出它们(循环)。像 break 2break 3 这样的代码存粹是为了娱乐,尤其是当混合了奇怪的缩进代码时。

这是一个开始!

这就是今天的全部。我希望你相信你自己也能做到,你也可以编写不可维护的代码。现在你的未来就在你的手中!当然,你也可以编写可读性比较高的代码,但是冒着被替代的风险。

更多现代化 PHP 知识,请前往 Laravel / PHP 知识社区
查看原文

赞 68 收藏 50 评论 30

inter18099 赞了回答 · 2019-07-31

解决怎样取后台返回值

更加推荐使用 -1 即最后一个,像上面那个直接使用 1 的话,如果文件名中有多个或者0个 . 就会不准确。

// 当没有合适条件的 就会返回原字符串 ,比如文件名中没有 .
'账户关系.xls'.split('.').slice(-1)[0]

关注 5 回答 4

inter18099 赞了回答 · 2019-07-31

解决怎样取后台返回值

可以试试正则匹配

let reg = /[^.]\w+$/
name.macth(reg)

关注 5 回答 4

inter18099 收藏了文章 · 2019-07-31

vuex最简单、最详细的入门文档

如果你在使用 vue.js , 那么我想你可能会对 vue 组件之间的通信感到崩溃 。

我在使用基于 vue.js 2.0 的UI框架 ElementUI 开发网站的时候 , 就遇到了这种问题 : 一个页面有很多表单 , 我试图将表单写成一个单文件组件 , 但是表单 ( 子组件 ) 里的数据和页面 ( 父组件 ) 按钮交互的时候 , 它们之间的通讯很麻烦 :

<!--父组件中引入子组件-->
<template>
  <div>
    <a href="javascript:;" @click="show = true">点击</a>
    <t-dialog :show.sync="show"></t-dialog>
  </div>
</template>

<script>
import dialog from './components/dialog.vue'
export default {
  data(){
    return {
      show:false
    }
  },
  components:{
    "t-dialog":dialog
  }
}
</script>


<!--子组件-->
<template>
  <el-dialog :visible.sync="currentShow"></el-dialog>
</template>

<script>
export default {
  props:['show'],
  computed:{
      currentShow:{
          get(){
              return this.show
          },
          set(val){
              this.$emit("update:show",val)
          }
      }
  }
}
</script>

之所以这么麻烦 , 是因为父组件可以通过 props 给子组件传递参数 , 但子组件内却不能直接修改父组件传过来的参数。

这时候 , 使用 vuex 就可以比较方便的解决这种问题了 :

<!--父组件中引入子组件-->
<template>
  <div>
    <a href="javascript:;" @click="$store.state.show = true">点击</a>
    <t-dialog></t-dialog>
  </div>
</template>

<script>
import dialog from './components/dialog.vue'
export default {
  components:{
    "t-dialog":dialog
  }
}
</script>


<!--子组件-->
<template>
  <el-dialog :visible.sync="$store.state.show"></el-dialog>
</template>

<script>
export default {}
</script>

是不是方便了许多 , 这就是 vuex 最简单的应用 , 不要被网上其他教程吓到 , vuex 原来可以这么简单 !

安装、使用 vuex

首先我们在 vue.js 2.0 开发环境中安装 vuex :

npm install vuex --save

然后 , 在 main.js 中加入 :

import vuex from 'vuex'
Vue.use(vuex);
var store = new vuex.Store({//store对象
    state:{
        show:false
    }
})

再然后 , 在实例化 Vue对象时加入 store 对象 :

new Vue({
  el: '#app',
  router,
  store,//使用store
  template: '<App/>',
  components: { App }
})

完成到这一步 , 上述例子中的 $store.state.show 就可以使用了。

modules

前面为了方便 , 我们把 store 对象写在了 main.js 里面 , 但实际上为了便于日后的维护 , 我们分开写更好 , 我们在 src 目录下 , 新建一个 store 文件夹 , 然后在里面新建一个 index.js :

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);

export default new vuex.Store({
    state:{
        show:false
    }
})

那么相应的 , 在 main.js 里的代码应该改成 :

//vuex
import store from './store'

new Vue({
  el: '#app',
  router,
  store,//使用store
  template: '<App/>',
  components: { App }
})

这样就把 store 分离出去了 , 那么还有一个问题是 : 这里 $store.state.show 无论哪个组件都可以使用 , 那组件多了之后 , 状态也多了 , 这么多状态都堆在 store 文件夹下的 index.js 不好维护怎么办 ?

我们可以使用 vuex 的 modules , 把 store 文件夹下的 index.js 改成 :

import Vue from 'vue'
import vuex from 'vuex'
Vue.use(vuex);

import dialog_store from '../components/dialog_store.js';//引入某个store对象

export default new vuex.Store({
    modules: {
        dialog: dialog_store
    }
})

这里我们引用了一个 dialog_store.js , 在这个 js 文件里我们就可以单独写 dialog 组件的状态了 :

export default {
    state:{
        show:false
    }
}

做出这样的修改之后 , 我们将之前我们使用的 $store.state.show 统统改为 $store.state.dialog.show 即可。

如果还有其他的组件需要使用 vuex , 就新建一个对应的状态文件 , 然后将他们加入 store 文件夹下的 index.js 文件中的 modules 中。

modules: {
    dialog: dialog_store,
    other: other,//其他组件
}

mutations

前面我们提到的对话框例子 , 我们对vuex 的依赖仅仅只有一个 $store.state.dialog.show 一个状态 , 但是如果我们要进行一个操作 , 需要依赖很多很多个状态 , 那管理起来又麻烦了 !

mutations 登场 , 问题迎刃而解 :

export default {
    state:{//state
        show:false
    },
    mutations:{
        switch_dialog(state){//这里的state对应着上面这个state
            state.show = state.show?false:true;
            //你还可以在这里执行其他的操作改变state
        }
    }
}

使用 mutations 后 , 原先我们的父组件可以改为 :

<template>
  <div id="app">
    <a href="javascript:;" @click="$store.commit('switch_dialog')">点击</a>
    <t-dialog></t-dialog>
  </div>
</template>

<script>
import dialog from './components/dialog.vue'
export default {
  components:{
    "t-dialog":dialog
  }
}
</script>

使用 $store.commit('switch_dialog') 来触发 mutations 中的 switch_dialog 方法。

这里需要注意的是:

  1. mutations 中的方法是不分组件的 , 假如你在 dialog_stroe.js 文件中的定义了
    switch_dialog 方法 , 在其他文件中的一个 switch_dialog 方法 , 那么
    $store.commit('switch_dialog') 会执行所有的 switch_dialog 方法。
  2. mutations里的操作必须是同步的。

你一定好奇 , 如果在 mutations 里执行异步操作会发生什么事情 , 实际上并不会发生什么奇怪的事情 , 只是官方推荐 , 不要在 mutationss 里执行异步操作而已。

actions

多个 state 的操作 , 使用 mutations 会来触发会比较好维护 , 那么需要执行多个 mutations 就需要用 action 了:

export default {
    state:{//state
        show:false
    },
    mutations:{
        switch_dialog(state){//这里的state对应着上面这个state
            state.show = state.show?false:true;
            //你还可以在这里执行其他的操作改变state
        }
    },
    actions:{
        switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法
            context.commit('switch_dialog');
            //你还可以在这里触发其他的mutations方法
        },
    }
}

那么 , 在之前的父组件中 , 我们需要做修改 , 来触发 action 里的 switch_dialog 方法:

<template>
  <div id="app">
    <a href="javascript:;" @click="$store.dispatch('switch_dialog')">点击</a>
    <t-dialog></t-dialog>
  </div>
</template>

<script>
import dialog from './components/dialog.vue'
export default {
  components:{
    "t-dialog":dialog
  }
}
</script>

使用 $store.dispatch('switch_dialog') 来触发 action 中的 switch_dialog 方法。

官方推荐 , 将异步操作放在 action 中。

getters

getters 和 vue 中的 computed 类似 , 都是用来计算 state 然后生成新的数据 ( 状态 ) 的。

还是前面的例子 , 假如我们需要一个与状态 show 刚好相反的状态 , 使用 vue 中的 computed 可以这样算出来 :

computed(){
    not_show(){
        return !this.$store.state.dialog.show;
    }
}

那么 , 如果很多很多个组件中都需要用到这个与 show 刚好相反的状态 , 那么我们需要写很多很多个 not_show , 使用 getters 就可以解决这种问题 :

export default {
    state:{//state
        show:false
    },
    getters:{
        not_show(state){//这里的state对应着上面这个state
            return !state.show;
        }
    },
    mutations:{
        switch_dialog(state){//这里的state对应着上面这个state
            state.show = state.show?false:true;
            //你还可以在这里执行其他的操作改变state
        }
    },
    actions:{
        switch_dialog(context){//这里的context和我们使用的$store拥有相同的对象和方法
            context.commit('switch_dialog');
            //你还可以在这里触发其他的mutations方法
        },
    }
}

我们在组件中使用 $store.state.dialog.show 来获得状态 show , 类似的 , 我们可以使用 $store.getters.not_show 来获得状态 not_show

注意 : $store.getters.not_show 的值是不能直接修改的 , 需要对应的 state 发生变化才能修改。

mapState、mapGetters、mapActions

很多时候 , $store.state.dialog.show$store.dispatch('switch_dialog') 这种写法又长又臭 , 很不方便 , 我们没使用 vuex 的时候 , 获取一个状态只需要 this.show , 执行一个方法只需要 this.switch_dialog 就行了 , 使用 vuex 使写法变复杂了 ?

使用 mapState、mapGetters、mapActions 就不会这么复杂了。

以 mapState 为例 :

<template>
  <el-dialog :visible.sync="show"></el-dialog>
</template>

<script>
import {mapState} from 'vuex';
export default {
  computed:{

    //这里的三点叫做 : 扩展运算符
    ...mapState({
      show:state=>state.dialog.show
    }),
  }
}
</script>

相当于 :

<template>
  <el-dialog :visible.sync="show"></el-dialog>
</template>

<script>
import {mapState} from 'vuex';
export default {
  computed:{
    show(){
        return this.$store.state.dialog.show;
    }
  }
}
</script>

mapGetters、mapActions 和 mapState 类似 , mapGetters 一般也写在 computed 中 , mapActions 一般写在 methods 中。

弄懂上面这些 , 你可以去看vuex文档了 , 应该能看懂了。

查看原文

认证与成就

  • 获得 12 次点赞
  • 获得 23 枚徽章 获得 1 枚金徽章, 获得 4 枚银徽章, 获得 18 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

(゚∀゚ )
暂时没有

注册于 2015-04-03
个人主页被 1.6k 人浏览