PLM之家精品课程培训

PLM之家精品课程培训

联系电话:18301858168   |   QQ咨询:939801026
NX二次开发培训

NX二次开发培训

UFUN/NXOpen C++和实战案例

适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术。
公众号二维码

关注公众号

点击扫描二维码免费在线高清教程

课程详情
Catia二次开发培训

Catia二次开发培训

市场需求大,掌握核心技术前景广阔

Catia二次开发的市场需求大,人才稀缺。掌握开发技能潜力巨大,随着经验积累将在汽车、航空等领域有所作为。
B站二维码

在线原创B站视频

点击关注工业软件传道士主页

课程详情
Teamcenter培训

Teamcenter培训

全方位培训,从基础应用到高级开发全覆盖

涵盖用户应用基础培训、管理员基础培训、管理员高级培训及二次开发培训等全方位内容,由多年经验讲师打造。
QQ群二维码

加入同行交流

点击扫描二维码加入QQ群

课程详情
×

PLM之家plmhome公众号

课程涵盖: PLM之家所有原创视频

×

关注B站视频

所有高清视频一览无余,全部在线播放学习

×

加入PLM之家QQ群

同行交流,疑问解答,更多互助

PLM之家PLMHome-国产软件践行者

[前端框架] Vuex 的用法详解

[复制链接]

2019-6-12 15:28:01 1922 1

admin 发表于 2019-6-12 15:24:50 |阅读模式

admin 楼主

2019-6-12 15:24:50

请使用QQ关联注册PLM之家,学习更多关于内容,更多精彩原创视频供你学习!

您需要 登录 才可以下载或查看,没有账号?注册

x
Vuex 的用法详解
2 _: w/ u* G$ n' U! p
2 {4 K- p& X" n0 x9 e) ^7 \7 w) @+ E本案例测试下Vuex的使用,创建一个新的web项目& P* V8 a3 t7 b! `5 T1 L3 P
Vue init webpack web  g4 s8 Y' {9 _
安装vuex
, t$ g6 m* A5 pnpm install vuex --save) s4 O3 I  }' @; T- ]
启动, npm run dev,打开localhost:8080  即可
$ L7 }, U  a2 X  b4 s6 i2 }  H. s  h' |3 H# |& S7 e7 l

" _9 r3 M/ \3 s(1)引入vuex
# c, m3 T7 t# _/ b2 p创建一个src/store文件夹,创建index.js , 引入并导出store( m" a6 N6 @9 c% q7 q( l* I
import Vue from 'vue'1 }% d, I  v1 A; ]0 {5 h! ]
import Vuex from 'vuex'
1 ~8 w; T- i& S4 T$ {: QVue.use(Vuex);
1 s. ^! f2 @, C6 U/ _const store = new Vuex.Store({: _2 R' G8 j; O1 ^+ F  u
})4 f) g% i/ g+ o, r% n3 j0 ^
export default store;' o% `; U6 G: Y% J

: b, n, C8 m( U% @, Z- e9 H; l(2)引入store到main.js+ U- `3 p- ^/ F, P) Q
import Vue from 'vue'
* b4 c1 W: k- j" `import App from './App'; ]# e5 n* j  C+ ]8 h/ p  W
import store from './store'- I) {' v* Z/ b
- c3 B" u3 h" e( v/ t# }( O
Vue.config.productionTip = false+ O7 {3 c& N* H" j- [: F
; _" p7 T7 W! w5 D  x
/* eslint-disable no-new */
& p" D3 K& J( Gnew Vue({
: P1 v- u' g" I9 n. z" g  el: '#app',' U# A7 X. v1 I& o3 ?( d% O* s$ r! K
  store,! j9 @9 J" l- B- u2 z+ s& f7 f+ n
  components: { App },
4 q# j8 z% K8 l) ?5 `! U* k( R  template: '<App/>': E4 I2 I7 q* i5 k8 T" h9 l# |5 s
}). t  E# q2 X( N& [# \8 r

4 J( \4 ?9 \, {& x

: m" I2 U+ q/ {

$ }( {/ E/ X3 w1 c. k& H: b(3) 修改 helloword.vue ,先使用state获取值进行测试
3 q, o6 X4 [. x* i& _State: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;0 f7 D4 x( ^% ^. G6 I/ ]
const store = new Vuex.Store({$ A4 @/ A  ~$ ]
  state: {
. q) O# a" x/ |  \3 P# }      count:1% ?. s: H$ G! R, k
  }
2 W6 Z1 n9 |" H( W  e})9 i4 Y& t: }  V' Q+ c1 p

$ Z/ ~% i1 t( Xhelloword.vue----9 x  q. \* @8 Q3 \; m
<template>6 o4 K8 z( X8 h  ]4 ?
  <div class="hello">
4 }9 I) @% K3 y/ [( Q- @+ ~- v$ p' K7 R8 m' d" L9 x5 `
    <h2>{{this.$store.state.count}}</h2>3 \: E1 X6 ^. e2 W- v
) X' r8 r' D2 K$ M
  </div>
: m4 `/ s1 k: K, u, D( W! L$ N</template>% v0 T5 d$ Z* p! Y" Z2 C% y$ V

2 s" X; y$ Z, l9 Z& [1 E: V
1 G# V- \6 S# V/ N1 {0 S& W
显示结果为: 1
8 k9 J7 m7 S: H$ n! F. [( G7 m- P/ G0 w7 V+ \

* v" G% X! F+ j' ]7 `(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
1 ^) q1 ^& r, B( J6 E3 ^( _6 [* r
+ P2 q0 p' W/ z/ _$ w8 O* qconst store = new Vuex.Store({
' i5 @; c" ^. f* R/ c, H+ R  state: {
, w! l& t- C+ X/ D5 p( w( M      count:1
* s  D. Y6 W9 s2 v0 t! n$ N  },; o; Y. t8 @8 K% |3 L
  getters:{7 w3 k4 c# l- ?9 f
      getStateCount:state=>{; [$ M* e( _3 z: o
          return state.count + 1;
" K" N* E! w+ }  K3 [4 M- s- i      }2 V9 Y' X5 M; e( ^
  }9 ^+ C! P/ u+ F# C2 f8 Q* i" l( t
})# [6 K7 n$ G- i; G2 P* d3 W; u
) }+ v1 M- R+ y- O* ]6 @
<template>
  \. i0 y; ?) Y9 C; f; d4 w  <div class="hello">; K2 i/ C) c0 U) T- q+ T
% W# E8 t& K$ e, f5 j0 K
    <h2>StateValue: {{this.$store.state.count}}</h2>0 \' R9 r" A7 j, e
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
* [& `% s8 P- n  J$ B  </div>
4 F1 r% P* E0 Q: e: t$ p</template>5 R6 C1 |2 F6 [) W6 L; t
) z7 V2 y0 ~2 D" j) `: @6 w3 @# z

. h4 I5 v; h( J- g; w5 ^" [5 ?显示结果:
. F6 c0 j6 t+ n! N2 hStateValue: 1GettesVaule: 2/ w; r/ _: v% z9 G6 Q
$ i0 g% T9 t# D4 Y4 D8 N% f
(5)
6 f, p, L* X9 A) {$ {4 `

Mutations:

数据我们在页面是获取到了,但是如果我们需要修改count值怎么办?如果需要修改store中的值唯一的方法就是提交mutation来修改,我们现在Hello World.vue文件中添加两个按钮,一个加1,一个减1;这里我们点击按钮调用addFun(执行加的方法)和reductionFun(执行减法的方法),然后在里面直接提交mutations中的方法修改值:


, Z5 G3 F7 \; k  f修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:
+ N! I8 {5 O" ~0 e. W, d% G+ jmutations:{
1 z* R& g9 f& j& ~4 W3 v      add(state){
/ c7 @& b7 H  U- z/ W& O3 U  p4 \         state.count = state.count + 1;1 f; D5 Y: F  F' H4 E; {' d6 _
      },
3 X/ J5 i2 {! Q0 Z      reduce(state){: x; a1 c& Z0 w5 R# O
        state.count = state.count - 1;9 k) q& R6 a2 \  S& y
    }
8 k; }$ i" |3 o" z" c6 P& d" Y  }& j# z" A" R; ~
<template>* Q4 K& p4 c& b0 V. L+ T/ q
  <div class="hello">( f5 ~# p; y- k* K5 J6 T
    <h1>Actions:</h1>
& E6 ]5 v, n+ \7 T8 u    <el-button type="primary" @click="addFunc()">Add</el-button>+ x! _# ]* V# l9 A- a# u8 M" y
    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>4 v% N. g; D# \3 ~
    <h2>StateValue: {{this.$store.state.count}}</h2>
' m+ v  P, D* s& ~  X/ h    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>5 N0 x. m! J. \" |
  </div>
! J$ x% W+ X- |  m0 ^</template>
# b* p0 K, `  H& ?) O7 h; z4 W
6 }* @! _8 r* F% @6 ]
+ q1 {) X, f6 n; x( x. I) C7 }
结果:
/ R# X1 R- I7 Y( s& M9 y
% E: j) W$ c' ~
. Y, P7 W1 `$ z6 ^% _
Actions:Add
ReduceStateValue: 5GettesVaule: 6; ^/ u: Y" f/ c

) c5 K% K+ O7 P- m% n- t) ?7 f* ^
' h+ o8 R2 u. D1 Q% Q% b
1 l$ c+ t9 p9 ^6 _& ~" ~2 T
, p$ w& ?1 j! G+ d" U1 U: ^# i

  d7 ?7 \: R  ?" P4 ^; M1 Q! V% U# s: K$ Z. \9 Y

. N" i$ Y9 ^- l
" K& j' e; X% F% E* Q6 V0 s(6)Actions:; t& P* F9 L+ r; j5 ]  s& R

我们看到,当点击三次后值从2变成了-1;页面上的值是改变了;我们达到了修改store中状态值的目的,但是,官方并不介意我们这样直接去修改store里面的值,而是让我们去提交一个actions,在actions中提交mutation再去修改状态值,接下来我们修改index.js文件,先定义actions提交mutation的函数:

7 B9 U; K, w6 h, u8 q6 Q, ~4 B" l


+ B5 U' H6 I. w& z6 \mutations:{
- u; f( S: ~& w1 F      add(state){
/ @8 X  g" j( P$ i         state.count = state.count + 1;
, k, f! x/ W% y, a  d      },
0 U2 @  Z3 U( \) a3 U) n      reduce(state){
( I2 d! u" ^7 [        state.count = state.count - 1;& ?  f' ?3 m/ K0 u  v
    }" X- v/ ?- U2 E; _/ r
  },
8 f4 I, C) U7 e/ b  actions:{% w: i- s" t2 ~+ b: D) @5 r9 C
      addFunc(context){- [7 B- y4 z& h. D4 t
          context.commit("add");
. ?2 M  E) B% I- N% g0 m) H8 S      },
) k3 I) j1 l2 @+ {' i      reduceFunc(context){$ W0 C$ u% Q6 c! D0 \
          context.commit("reduce");
5 S# \8 I9 i2 b) \8 C, {( a- v      }/ C- X, p% M3 m& g* i2 R
  }$ z: `: O8 c5 n1 `& ]
1 v! L0 g2 O! d, W; ?3 z- C


- u$ B* c2 @, \9 i' t* x

2 K% w; a$ t7 q( N2 f9 e
  methods:{7 v& A, r$ Y* [& q# {8 G
    addFunc(){) L" I7 u* D/ w- c0 u1 {0 A
      //this.$store.commit("add");
. y  F" q1 b7 p; R+ s1 K      this.$store.dispaTCh("addFunc");- ~( j1 C3 p! }; e
    },
( [5 h; W$ d4 k7 O- q    reduceFunc(){3 b  O+ |9 Q" M; N( V+ ^4 b( W) J
      //this.$store.commit("reduce");: z4 \9 Z( d4 a+ I. H
       this.$store.dispatch("reduceFunc");
. q: L9 b8 w, K    }/ a( q; [3 ^1 {" i+ C5 C) Y
  }
  g" z5 o" `5 H' |
. s' W( w$ P+ d0 a3 J
这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的
  `& Y% d& Z/ l  X实现效果一样!!!!8 ~3 I1 b- @3 Y3 E8 F- j2 t; a

: r4 E, V% j8 f% |1 H, E0 S- h; Y0 `4 e
2 y, `" |0 b4 D' a5 _- ~& g5 Y
. a. {; a; T: ?5 h- I5 \

1 C! b: {7 K. d9 J& p2 v1 U7 B


! o! Y" x  ]3 U5 d8 U7 Q5 f2 A7 l& g* f7 P( @

0 Y$ z! b* z! x9 Z
5 y0 k  V. c0 a9 H) ]# \6 U3 n

# H7 ^1 c$ r* ]7 k0 w  n

* ^; F% J9 \- q1 o7 W& b6 W1 m2 g" l6 f1 N6 m  a* d8 c
% P2 m# r& L5 C/ L1 d) }
( y, v  X/ R) x$ H- O  k0 s$ I
( T" a1 w: H1 g8 ~) J" y/ z
0 x/ c0 L9 J! i) ]+ o
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复

使用道具 举报

全部回复1

admin 发表于 2019-6-12 15:28:01

admin 沙发

2019-6-12 15:28:01

mapState、mapGetters、mapActions

如果我们不喜欢这种在页面上使用“this.$stroe.state.count”和“this.$store.dispatch('funName')”这种很长的写法,那么我们可以使用mapState、mapGetters、mapActions就不会这么麻烦了;

我们修改Hello World.vue文件如下:


( s, L- l- H8 c

( Q$ D: o) x9 R- l) m  B

* M8 O6 b9 s% n7 Z& d8 l, M. o- S+ _

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
1 n7 c! r! q  r$ h, h& E- F$ `; P
2 h4 |. \3 a# J8 k1 C
import {mapState,mapGetters,mapMutations} from 'vuex';
$ \, I) A# M" S/ m- m6 vexport default {
' f) Y, K' \( }" r6 a& {  name: 'HelloWorld',
3 P7 z2 C! R6 q, f4 G" U/ ?; Y; k2 ~. v( {  data () {
9 y9 K! d/ ]+ B  D& o) ?    return {
& p6 h% j. _8 Y; z      msg: 'Welcome to Your Vue.js App'
) @6 s( @/ g7 |4 Q: {    }/ J2 r. E% r# X& C1 d- N
  },2 ^3 s8 ~& R+ w) q/ Z0 g
  computed:{
9 ]; v: \- Q/ Q5 q6 H6 G6 r  _: N' k    ...mapState({0 N; z% l' ?. Q1 y
      mapCount:state=>state.count
; u$ B# z7 \, G) [9 q    })
5 y+ }  a# j  H7 O* n  },5 f1 \' i. G7 Y- l  @2 j
  methods:{
9 C3 M9 c# ?: C" w, X3 `! K& [) a  P3 H    addFunc(){) D6 e% ?, W6 B! ]% S
      //this.$store.commit("add");. W; h+ x; \/ i- i, \; v; \: W# b0 o5 U4 c% T
      this.$store.dispatch("addFunc");
* C/ s8 A+ V# p8 a8 A, B, q1 ^, `1 |    },( l  m; I+ h  H% h; |2 y7 P
    reduceFunc(){' X5 |9 g; j! _
      //this.$store.commit("reduce");
- `) e( L5 j; V( N6 Q       this.$store.dispatch("reduceFunc");* ^- l. R+ Y" x  ~3 i% j; D8 R( K
    }
* [  l+ O) S- E  }
: D+ d5 }& G3 _: s/ q4 [}" u8 _8 E/ q; R/ z' N: i0 F! A4 j
" U) {+ i% M8 a2 ~/ @

. X- q9 A1 _9 P5 V- n
: V3 p# Z" ]% W( P
9 K3 c: E# k2 H) p2 \# w" I
上海点团信息科技有限公司,承接UG NX,CATIA,CREO,Solidworks 等CAx软件,Teamcenter,3D Experience等PLM软件,工业4.0数字化软件的实施\二次开发\培训相关业务,详情QQ 939801026 Tel 18301858168 网址 www.diantuankj.com/ doTeam.tech
回复 支持 反对

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 注册

返回列表 本版积分规则

  • 发布新帖

  • 在线客服

  • 微信

  • 客户端

  • 返回顶部

  • x
    温馨提示

    本网站(plmhome.com)为PLM之家工业软件学习官网站

    展示的视频材料全部免费,需要高清和特殊技术支持请联系 QQ: 939801026

    PLM之家NX CAM二次开发专题模块培训报名开始啦

    我知道了