PLM之家精品课程培训,联系电话:18301858168 QQ: 939801026

  • NX二次开培训

    NX二次开培训

    适合初级入门或想深入了解二次开发的工程师,本培训结合ufun,NXOpen C++,大量的实例及官方内部的开发技术对于老鸟也值得借鉴!.

    NX CAM二次开发培训报名 NX二次开发基础培训报名
  • PLM之家Catia CAA二次开发培训

    Catia二次开发培训

    Catia二次开发的市场大,这方面开发人才少,难度大。所以只要你掌握了开发,那么潜力巨大,随着时间的积累,你必将有所用武之地!

  • PLM之Teamcenter最佳学习方案

    Teamcenter培训

    用户应用基础培训,管理员基础培训,管理员高级培训,二次开发培训应有尽有,只要你感兴趣肯学习,专业多年经验大师级打造!

  • PLM之Tecnomatix制造领域培训

    Tecnomatix培训

    想了解制造领域数字化吗?想了解工厂,生产线设计吗?数字化双胞胎,工业4.0吗?我们的课程虚位以待!

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

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

[复制链接]

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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解
! T1 V7 B+ c( p- @* s, O) R, k- h1 @
本案例测试下Vuex的使用,创建一个新的web项目
( `+ j- k  G' Y8 `" Y0 t  [5 ]5 ]Vue init webpack web8 T6 B9 z) ?+ p. @" b# ~* C" g
安装vuex* b& N$ Y8 ?7 m4 n
npm install vuex --save0 P" v$ u* h4 s8 |! V
启动, npm run dev,打开localhost:8080  即可2 b0 z" o# N) M9 u. x
! Z1 m2 f5 L5 I$ Q& H0 ?- h

0 t% W0 ^! \: K+ A6 c: g(1)引入vuex" \7 k  i" e9 M* W3 H
创建一个src/store文件夹,创建index.js , 引入并导出store+ u0 v0 E) o- S& j: s, p: [4 n' ^) S
import Vue from 'vue'3 `9 R0 \& M* {
import Vuex from 'vuex'* y2 R8 A, s; g: u2 B, V& _" s
Vue.use(Vuex);
" e' R6 x/ M, s! o: \  Yconst store = new Vuex.Store({7 U, [) b" {6 L5 N, J' V* ]/ a
})9 V+ y8 O& d4 E1 M1 `
export default store;
8 ?! e, P# ^2 F; B4 ?
. L0 X6 T" m3 `- B2 d6 y(2)引入store到main.js% N2 v% r( a* V) }/ A8 n5 k
import Vue from 'vue'
- Y6 x0 P. U6 H' g* ^" y1 ?import App from './App'
! G; B4 S: n- gimport store from './store'
% n" i% H/ M& t! s( A! l# C, M7 I- _! u# u. V: O1 I: _
Vue.config.productionTip = false$ f6 N, P' \- K3 I/ R
2 _5 a, l+ ?2 c; Q( [8 D4 R% s7 ?. T1 h
/* eslint-disable no-new */
! D; [( a2 M& E' I2 `3 Dnew Vue({
2 _  N! B1 o4 z# Z9 a* v  el: '#app',
- [1 P% V5 C8 r! t- a, x" j  d# U3 n  store,
% s' e4 z5 m3 U3 `/ ?& M% j0 v( Q2 T. n  components: { App },
4 B4 [' }. M3 u* V  template: '<App/>'
% S+ z) C- \* `0 K# }5 O; ^( V: {6 H7 S})0 P6 z8 i, }% o5 x1 Z3 p

1 ?" g* I% B) j9 z& H6 |
6 k- M4 m7 b! S- i* I

& L" O4 y4 A! m0 W(3) 修改 helloword.vue ,先使用state获取值进行测试
9 `4 e. c/ I" T" l1 VState: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;8 p. s2 y' w( |/ E/ g9 w
const store = new Vuex.Store({
, k: h7 M6 Y) `6 M" r  `2 J3 s  state: {, ?8 z. L! Q/ P% `* S
      count:1: n( S" Y5 A3 A
  }1 V: ]6 x' m$ y6 j
})
; l. e1 R1 k3 _. ?7 d' u; e  X. \% a" L4 h. L* K! [
helloword.vue----
7 q& E' h+ w6 n: U<template>7 q8 b7 G' }1 U' Y2 C7 Y6 V0 e
  <div class="hello">
" q+ @- J8 J: F* f- @3 X
8 M/ f0 M& N8 J, |: Y  P8 s1 U    <h2>{{this.$store.state.count}}</h2>. g1 `: Y' u& U: ~1 F6 U1 E
+ V* f7 Y! H) H* j, {$ Y
  </div>1 N" N  s3 l* s4 |8 T
</template>4 H0 P1 g& i" N& E0 |) [" D) z, n. s
3 I( Q( y5 [4 b5 t# h2 x
, F$ W7 B- a% Z. b* M' G! T& }
显示结果为: 1 ) F9 a$ n# p: `1 c+ [  [: B; k  v
7 j. `  U7 d) `) ~8 D

+ \7 u8 o! {' ?0 s, k0 V" \(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
, d) Y8 O1 y) y2 i# f7 F3 k5 m+ T0 s# `
const store = new Vuex.Store({
( I0 ?$ m  M  \& n8 e, _9 B  state: {5 x. `) S' c6 D% H& ~6 b: `% O
      count:1
! h& V/ {& Y# F" R0 m5 S# x  },1 x  O, J: N3 C3 k# Y( C# D, h
  getters:{/ h: {* M$ Q  C; U! D
      getStateCount:state=>{$ Q5 F) j" `+ @" ?
          return state.count + 1;
  ], @2 \; m# Z; ]5 |  n& k      }& w8 B1 P6 k9 S4 a  u& [1 ]
  }9 u3 f' C, b0 f
})! m7 c& m8 w$ B) Y
# W, V7 w' y, N% V
<template>8 n' o/ `2 A( @8 i3 `
  <div class="hello">. {# B" l7 ~( v
  @2 R0 D: y% q6 Y" y/ q& G
    <h2>StateValue: {{this.$store.state.count}}</h2>8 J' w/ Q7 N& i
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
! W/ D, S% r( _% K2 F/ Q  </div>; u; a+ X1 X% X( z, d1 B: E( P8 u
</template>/ p' H1 w2 e. T) Q8 Q

( C3 g( q% b& }. |5 y4 b

" B; g! x5 {* D$ B4 i7 z: H显示结果:7 s% P% {2 E9 X4 E' z/ `
StateValue: 1GettesVaule: 2
) p: w. f! t# ^( k& [4 B0 ^' _; P2 q, `( j
(5)
0 d4 M& s* v* k  j

Mutations:

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


) j8 a9 z- h5 V. j% o修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:5 i' w3 |) k) `# G6 k
mutations:{
% F( G# Y$ }& _7 e      add(state){* Z' |, {/ \9 I# x
         state.count = state.count + 1;4 J/ l/ Y2 {/ B4 m7 E- E
      },
& Q& l) `* w9 f& P: j: N* S8 o      reduce(state){
; l2 b5 P/ h5 G, W; c        state.count = state.count - 1;) t- A* \8 D$ }% L2 \, I
    }1 B/ s6 w3 I, Q! x
  }
2 Z% P- `7 `+ ]% G# |<template>9 F5 p: W+ b& z( S9 L
  <div class="hello">
$ @4 _/ o! P7 l, Z0 Y" I  n    <h1>Actions:</h1>
6 ^. i- E  H* B* X1 a    <el-button type="primary" @click="addFunc()">Add</el-button>
. u5 D5 t3 x- [1 p    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>3 q$ ^2 P! O4 @* ^. f
    <h2>StateValue: {{this.$store.state.count}}</h2>
) G4 [' _! s% U, x    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>1 s  B: L( M- n& z) Q! r/ y
  </div>
% q' H/ @8 t* m; w1 k  R</template>
: ?3 C- f  n7 _* e& X" R  W% D* s6 x; t
- B6 o" m0 o8 X2 ~- ^3 w
结果:
4 ?9 L# W# R/ |" ~! Z. p
! b3 y8 n7 ?( s5 k, c5 P3 Q4 W
6 c! `2 \9 u9 q! E' @: I! G
Actions:Add
ReduceStateValue: 5GettesVaule: 6- N; u0 E( ?; Q8 o+ P; j
0 e. u# U$ H4 E5 |' @
4 o6 c: Q3 ^. X

) P/ I6 k1 m4 j9 P/ M4 E$ }. b2 B& ]7 D9 R& a( R* m

% a3 _1 S6 o: g: t
) H% S/ f8 e# O/ |% L4 Y7 R7 Y

4 b" S; r) x; @0 k' T* N. Z$ W% ?5 a- W/ A
(6)Actions:
$ n$ y4 i+ Q0 Z. @( A. }5 a

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

( K1 u/ C0 x3 p  v( D( l0 s5 V6 y( H# f

% C( f: |1 A4 I) d& z
mutations:{. [! @) R$ ]" Q
      add(state){3 T" g9 ~& S$ Y6 s
         state.count = state.count + 1;
* A6 o8 p; m. Y( K, l( Z      },
- w. g9 K: B: `! P      reduce(state){/ p! o! c/ a$ m
        state.count = state.count - 1;
9 N- L9 v' T! e( {) V' y    }
  K* u7 m9 @+ Y0 w2 l3 p$ m  },
1 }7 Y' [/ r" u2 m3 @) a1 @1 [  actions:{# g: }  T: d- o+ h& p
      addFunc(context){
6 J8 R2 d5 \! L" J4 V          context.commit("add");+ e+ H* S: h$ [5 M( z$ c
      },
/ U& n, k* }$ x9 e4 T- a      reduceFunc(context){
* `! A! P2 k# P& h* z, {# z! `          context.commit("reduce");
! o3 l" n7 s2 ?$ K# E& E      }
% ~0 z' O3 V, J( Z  }- Z9 v3 ?/ w# @
( g$ s/ v: I/ h& ?5 Q* O4 z

5 U8 ~: R$ E. m, Y

! Q4 s  _: U8 K9 [
  methods:{
/ i7 P% k3 x$ e# J    addFunc(){+ Y5 h% ?* o2 O  `6 W$ p
      //this.$store.commit("add");: d& y6 B* T+ p$ ~* j
      this.$store.dispaTCh("addFunc");8 u1 V9 P; x7 D* A$ b5 N
    },* y/ l) ^- v% ^5 x  W+ v7 B
    reduceFunc(){) B/ K$ ^% h% K% r2 `. S- u
      //this.$store.commit("reduce");% Q, ?5 e0 U9 N% T9 G
       this.$store.dispatch("reduceFunc");
% @& R  }" S& b' t6 e/ e  Z5 W    }
' e3 `; P6 Q3 e. |  }
$ u0 `# S6 T  K! K0 _3 t
3 A! |8 O1 X& q7 M: F
这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的
5 @" ?" @1 F6 y/ S实现效果一样!!!!4 A9 b$ R9 C5 G

) O7 W% q* G/ x$ V6 `8 s6 @" u' s$ P6 @8 ^" {$ A
* p8 _* k( z; q0 `

9 k! }) V! _* v7 R


4 j5 Z- U  E% u( T


& k& o  M6 V3 @) C' d1 ?. n! M8 C0 q( M0 B! h
1 [3 @/ c  l7 F5 _9 ]+ e

4 ^3 M( D+ V! X$ W# C2 B/ [

& k; W1 ~7 I  n9 j9 \
, m; S) s/ K( t* Z3 X# D6 [$ v4 E
0 h) T% n0 V2 P' }, y; W
# e7 K8 R* C- c5 `
* f3 c6 n7 T/ r6 m5 ~8 D$ F

! w/ g7 L. }, s# B7 S9 A" d( Z$ j
上海点团信息科技有限公司,承接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文件如下:


! ?4 K+ Z6 w1 [8 e9 w" a& `2 i( m

  W! e! Y/ c3 e' y9 j, J$ _2 K


4 _8 D8 q. w; a& v. O

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。' V! q2 s/ i, M1 F% w

8 Y, F7 h( E# k7 d% E+ V( Uimport {mapState,mapGetters,mapMutations} from 'vuex';+ \  v3 i3 }) m$ g  b9 }5 v
export default {
# j) e$ C: o! O# C) q7 D/ }; i9 x" y  name: 'HelloWorld',: T3 b7 ~# I2 f* K( d' c
  data () {0 k7 p2 F, U1 W, J
    return {( I% J- D8 |6 X$ a& f2 S
      msg: 'Welcome to Your Vue.js App'- W' `, ^  K$ K
    }
% {  _3 l, Y" N  },
+ M, K) y6 P6 n6 T  computed:{0 L7 ]3 Y+ B9 a4 [: u+ |1 m
    ...mapState({- K5 I! d( X/ M
      mapCount:state=>state.count
4 `2 v, y. t6 D: k' s2 [5 a    })
+ a: R( H2 o8 ^' N- W3 m( s8 f  },
4 Z7 C" B6 q# q  F4 B$ S: n  methods:{
. R2 L% X# x0 z    addFunc(){
! \% v. k8 x3 S3 ^      //this.$store.commit("add");4 ]+ m8 q' o6 [- e! E# F1 O' F$ W5 `
      this.$store.dispatch("addFunc");/ x' B9 y0 Y- n/ b2 L5 s5 Q8 s
    },
# g! L) M" x3 D) @7 Q    reduceFunc(){. W4 {  m- o9 Y# {  E9 c4 R7 t
      //this.$store.commit("reduce");
, ]. [( T5 X; @- [, ]+ x1 t0 O. M1 e       this.$store.dispatch("reduceFunc");
, _! z* Z4 X5 F    }/ f3 y. D' g. g: T- H  \
  }
& }) `- L" d/ G5 y4 d1 V}
" H4 d( w9 X0 ]  d
; _" f( J6 x4 T- T5 X! \, a: e0 _5 F' F6 r' J9 r

2 X3 Z6 ?- i: a0 A/ c* g
" F! G" X& X. ]0 L
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了