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 1944 1

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解& c5 p3 s# M$ ^6 S, z8 b: ]$ z" p
9 X: D6 q$ E! o2 A; _  m
本案例测试下Vuex的使用,创建一个新的web项目' a- c6 j8 w8 x; {) p3 d
Vue init webpack web
( E1 X- z4 B' l0 N$ [) \% F* B6 e' H安装vuex. T- h$ L4 s# |& t; m( B
npm install vuex --save
) \8 L  V  A. ]启动, npm run dev,打开localhost:8080  即可
9 }( J, t0 ?8 w% \6 c" A/ h
( ]6 `% d( }# j, j0 a. X' f5 m4 T
8 k, n$ W/ h, t, H( _9 f( T- V+ ?(1)引入vuex
* ~8 ^+ F; J( x$ n: N2 e创建一个src/store文件夹,创建index.js , 引入并导出store
6 E/ ]) n, x  a9 j, I( ?' Uimport Vue from 'vue'' i9 S- i# W4 O1 B* }- C. i8 N
import Vuex from 'vuex'
& d( n6 u2 C0 B$ R& d; ?Vue.use(Vuex);' o2 u5 a) I* G6 E9 h  }  S% f; w
const store = new Vuex.Store({
' U5 T, b. f# S" a' p+ h) D5 J% i})
0 d' \# c  J$ k( wexport default store;$ z! ?4 z$ d* l$ V

7 ]; f. |+ O3 ^/ W(2)引入store到main.js
7 m- c4 T3 t+ Wimport Vue from 'vue'+ g. V9 A+ z' Y8 n  j# n
import App from './App'
3 S, D: C2 D5 T0 Pimport store from './store'. k! u" Z8 t8 V0 {: z7 ?. o
* |1 C* Z/ r" n  s
Vue.config.productionTip = false
, x3 ]! q. h& t. A. v2 A
/ T2 f, }+ |8 Q  D+ ?/* eslint-disable no-new */
* n* L  O) g6 ?9 {- z. U2 P2 A' Inew Vue({% Z2 t* w9 J$ L4 |4 S5 s. R: D
  el: '#app',$ x) i1 Y8 K; s! a8 R" l
  store,' Z0 g, [0 Y( I% X8 J
  components: { App },, w3 p2 n1 X7 U- _6 m' M( t8 I/ `
  template: '<App/>'% l9 D( x" K8 a8 x- P; L1 p
})
' [% ?5 `) y" _9 x
9 c3 r3 _! U$ _* t" A8 n. k

; |7 _3 H0 O0 J. F

, x: }, R# a& c4 _. y- Y. t9 _4 h(3) 修改 helloword.vue ,先使用state获取值进行测试
( M! Y' ]2 s, m1 y2 `! j7 ZState: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;
: O3 x" |! G4 Aconst store = new Vuex.Store({
) Z' H1 v- ?* n! H5 j  state: {6 e( ^6 b8 j6 Q, J9 [
      count:1" X# Z! B1 v8 ?1 m7 ?
  }
( q, ]1 F/ n; D7 `" [})
8 c6 e2 T& D( S5 C
0 r* t  m, @: J2 u; |  I- i+ i3 Khelloword.vue----( [( `$ y( ]; p
<template>
" b. \# O5 u' ]  D  <div class="hello">" w* k" ]3 a- O% R

1 R% v9 g1 _1 B; M6 `( `8 S4 x    <h2>{{this.$store.state.count}}</h2>2 {# j. y# E* L; [; c

4 g! |. w! _2 D2 t* C6 l' l+ n  </div>; X8 `) I7 \4 U, E7 y  s
</template>
( w! M' e9 o9 N9 ^/ V
& m; j# d& r) r( i
3 f: M5 B6 _% o& D
显示结果为: 1   H9 }# }! T8 D# E( A

5 a, l# H. |4 V" Z0 V
8 G! B  h6 h/ H. j
(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
! p2 d4 p# |: n! v; V% q3 M" F, p2 D' C; r9 a* c% p" b% m
const store = new Vuex.Store({; I& U; E' p2 E' [
  state: {, c" S8 @% ?0 M0 |; _. s9 Z
      count:1
8 H1 z8 F: m7 G  },
8 e/ E7 n5 s+ P4 f  getters:{
% G$ G. K4 f: F0 x      getStateCount:state=>{
7 q% ]/ V  d9 I# t          return state.count + 1;
" i1 g+ z8 a- z1 s9 m  \" D- Y" e      }2 ]0 l: H  n0 g) l, u- }' X
  }! Q8 Y* [, k% |
})8 R3 ]$ C$ u3 O6 u- ~$ L

2 _$ t2 b3 i+ @<template>
9 T3 b, Q8 {+ `% r. S; w+ S  <div class="hello">
$ v8 n- G1 q; Q' y- s% X7 m- ]8 o6 D% ]: z+ o  d4 Y- x; |/ L
    <h2>StateValue: {{this.$store.state.count}}</h2>$ D4 b5 U4 D  }+ B  q1 C0 Y
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>8 c& `! Q/ N% o5 w6 a
  </div># F" S  T$ S/ \  k7 k
</template>
& s* P  o) r# O4 N5 @, q9 B% u7 Y" K7 b

4 Y# J) T7 |: S+ R8 m, a显示结果:
8 h; a: F# ]) E9 [# x; w" ~$ @1 |StateValue: 1GettesVaule: 2$ `. {9 w1 \; {( g* o8 Q

% x9 P8 t$ L7 H) }/ @1 S(5)
# F) X* o9 ~- I3 j" I

Mutations:

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

1 d& _7 j2 \5 T% {. O' a4 ]6 D
修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:
- @# l( j) u- Q+ lmutations:{* p$ K: g  n. i9 v! D9 z
      add(state){( ]  {0 b3 o0 k2 F8 k% F# t7 H
         state.count = state.count + 1;
# h4 _( c9 s9 U      },& o& m& N/ t8 a4 u6 I. }* z
      reduce(state){% K) k1 c6 k- C1 P
        state.count = state.count - 1;7 f! ]4 Y! ^6 w9 _7 X: i. L) v' a$ _. x
    }
2 s3 p  ]4 c3 g: i6 A  }$ i  }' Z4 X7 U& Y$ c8 C4 P- O
<template>& r. x/ J- I' Q
  <div class="hello">3 M8 `" M5 g3 q6 y$ F
    <h1>Actions:</h1>- `$ n! O  B% o
    <el-button type="primary" @click="addFunc()">Add</el-button>6 {+ f1 S* ]8 s4 A- l9 y4 g5 s' e8 O
    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>* n- b% f) ?  j- X/ u) a
    <h2>StateValue: {{this.$store.state.count}}</h2>1 p% F/ t( Q+ j$ V# b/ t
    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>1 u" T% }* J4 f- z2 v
  </div>% v& n& C: l* _3 M+ }9 m0 p
</template>
# ]( x9 W- P$ d  J3 v
! C4 f( O/ ?; A% o6 a: Y' h- K
  ~: v# d1 J' x" j9 h/ ~
结果:
) z( t0 k8 p) n2 ?: T8 U( h( ]; C  W& U

% ?* @0 n. ~3 h: v  hActions:Add
ReduceStateValue: 5GettesVaule: 66 F. D' q  U8 y! v
$ Z; P1 q+ D: p

0 `& m& q" m8 @0 Y" x& T+ K

4 u# E7 N2 X* U! x1 q
8 G) N: t: X1 Q5 i2 W7 x6 f; G
5 X5 h1 w9 A) s* S" t" v

, ^- [  o2 o. t
9 @; c1 X/ }: w

  n5 Z+ M, F0 l9 F, F: M(6)Actions:
! s2 o' d1 L. p9 R

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

9 a; p; \, U% s: [

: }; }# Y" j3 H5 F+ w' D- S0 w" ~
mutations:{
- J1 F0 i* E5 `. f9 N/ {4 I* z      add(state){# K3 D% O$ ~3 ~* t1 P( T& N$ k
         state.count = state.count + 1;
$ S9 e  V' P( ?) Z$ F; ]. Z8 W      },
4 r% V& Q5 V8 w' R# B& t. p      reduce(state){& M! |, y" K8 e4 j7 }& F
        state.count = state.count - 1;
) i+ A* A7 \& e    }& G. _3 D# v( E# V
  },
1 O1 j* s: H- S) D& G2 G/ P5 l  actions:{
. `; q3 }7 Y% \1 M  K4 |      addFunc(context){6 D. P- F, Z4 e# J9 Z/ K! u$ i
          context.commit("add");! x' x/ Q0 Y0 y0 ?
      },
( G% C* q+ n" Q8 ?+ y+ I( R- y      reduceFunc(context){
, c* O1 k% E% n6 B  J          context.commit("reduce");0 l' n+ `* d- e/ ?& M) e, V
      }
& i. H$ k- p' q  }' ~3 }7 I- D  ]0 _5 i
' W4 {" D% \/ v' [- x( S: W6 d


( E5 E  D& b, G3 Y8 O, b8 H& u' T


4 S3 V+ a( x. P( i8 D6 r  methods:{
9 L- C2 n. p/ |- h1 c    addFunc(){
# d# A9 G7 c9 ?3 C7 j  q* W5 S      //this.$store.commit("add");
( c0 X: z; @9 L* U- b% i      this.$store.dispaTCh("addFunc");; @! z% g( s; B+ E  ~
    },6 o- Q% c& [( I' t8 M% n; h$ Y
    reduceFunc(){7 k3 k- N; n  ^" \
      //this.$store.commit("reduce");4 U4 c% N6 R9 N7 g/ s2 q
       this.$store.dispatch("reduceFunc");, ]& f! w/ w& C: Q2 @: m
    }4 f+ q; T- I$ l4 \1 `
  }

, m$ K% Y4 {  A7 g6 {

7 ~: B$ L4 s" ?7 G. K+ G# n这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的
  W) v, k' v# e* b. O实现效果一样!!!!
) s3 L, S4 K/ `+ x0 |4 f" ]/ p; h  ~2 q8 }# v1 o! I1 D& A

3 ]+ J  C. i0 R; @. A
2 z* I, P. O" t7 k  ^. B6 J# H

1 i* Q( t  X: j# p


" ]5 }, ^  Z7 B7 t( K) X8 Y# N

4 F% r" ^. p/ S" K
2 @0 i- \8 x, G  y; \; f8 M
4 f. U# l) u" F/ j0 u7 e
* r1 `+ s+ Y* L3 `# p9 ?
- ^) {7 A- ]3 w1 Z

! \2 b0 J# F( [2 p; K# s4 ]! `/ a9 w
/ A' K6 L# h0 L. u1 N4 @6 U: `
0 h4 O. m  G2 v$ S+ U0 y3 }. _* q
$ v# i  B: V" U' F& Q! ?9 Z9 S4 h) I7 o' t* \/ z! C/ n

9 @( D) M( T( e, {) M7 @% q* s
上海点团信息科技有限公司,承接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文件如下:


; X6 x2 {8 e* m- y


& J7 a& d: T5 E' U9 u


$ s9 j8 B0 Y7 G6 d: T

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。& u% x7 ]/ I8 Y/ l/ V& T+ i
9 {( T9 ~; n+ K- G; |+ v5 s
import {mapState,mapGetters,mapMutations} from 'vuex';9 l% `7 f, P, c
export default {
* V9 Y/ ^$ i0 b  Y' T" n  name: 'HelloWorld',/ I2 i  ~9 t' m2 V' g
  data () {
0 ~9 d: L( f* S' |3 i/ }    return {! D+ F; ^5 M+ l/ B3 i0 I1 j
      msg: 'Welcome to Your Vue.js App'
: n4 {$ q  N! y+ t* ]    }! I* w5 r% a3 Z! y4 P" J: F, I
  },
! u. i  m- C! v: P) r- [% r: Z  computed:{% n, t3 n0 {( l$ P2 [
    ...mapState({0 G8 U# {, W8 d2 N, w& i
      mapCount:state=>state.count- s% b; O* h2 T: g7 f
    })
5 Z0 `2 D! R0 |1 @  },
4 A- W) E8 v. W; v  methods:{& f. L; W" Z% ^) j" V7 C) z
    addFunc(){
' B: j* t, S: b7 c, a      //this.$store.commit("add");+ [. O  M9 c5 ~: b" K7 A) w
      this.$store.dispatch("addFunc");
" ?# K+ X# ?, C    },
9 E4 d+ G$ h/ I" s% n9 X0 f    reduceFunc(){  P4 ]: e! D/ |
      //this.$store.commit("reduce");$ |, H; j9 _) M( Q" y$ a; s7 K
       this.$store.dispatch("reduceFunc");
! M/ a9 x+ ?1 N0 D    }2 n; K6 g* E3 M/ l! Q' z/ D/ k
  }
) W5 _0 H. \1 R5 a' D& _/ K}
3 x* R4 J0 v# Q  [3 u5 s9 I* A
" W+ n; h6 {3 ]# ~- a& Z. x/ z( ?, k! g1 g# ~

* W8 f1 v% |/ M
# K' t, @7 {. {+ B" O2 [
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了