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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解
" N2 a& o- [: L( V: w  ]" X( j8 S8 s/ Z+ {1 Z' o8 z9 O
本案例测试下Vuex的使用,创建一个新的web项目
) p9 u* j/ `' \' n6 tVue init webpack web' n' b7 l+ A7 y9 Z
安装vuex
9 L2 y/ R% C& f8 ]& Ynpm install vuex --save5 ~- c" j' a1 T- Z. m1 m: n
启动, npm run dev,打开localhost:8080  即可0 `, W7 K" D1 s% v8 H+ q$ x
( g9 O% T( I* B' R: w  U8 u
( O+ m% v  Z. A
(1)引入vuex! \$ C8 I! D: X: z9 ^3 J
创建一个src/store文件夹,创建index.js , 引入并导出store
( @( F9 l- ^1 O- dimport Vue from 'vue'
! ^" E' U  z. Fimport Vuex from 'vuex'+ \  z9 [7 Y, k
Vue.use(Vuex);" L; r/ A( z: z2 a4 o, Y* y
const store = new Vuex.Store({# f, l7 K1 J5 I& r" _- c
}); u# j% b; S: ?6 k5 z- R/ I( f& i
export default store;8 A# A6 {; u3 X) V; M2 ^/ j0 x

* V. X+ c' A+ J+ A! l) Y" T(2)引入store到main.js
# Y* y8 H0 v9 timport Vue from 'vue'3 f, `- b3 r. U- ^
import App from './App'
) W) m( g6 ~  \1 bimport store from './store'- X6 g2 T2 o# a/ {7 X

3 ^8 p) C6 S& w6 KVue.config.productionTip = false9 G; G/ [# M( f) \' O9 {/ f
2 i/ \, i* i8 W% `; h( U  O
/* eslint-disable no-new */
* T1 k  s( v; U  fnew Vue({
' O% g+ o$ O8 m% R$ O" l9 b5 O  el: '#app',% E. [$ I; i1 m# w7 V2 r/ ~& _  D) q
  store,
0 H& W3 R/ l, X" u0 F) X( h  components: { App },& }; z. z- M$ `! d
  template: '<App/>'# M+ ~% ~9 X3 ~
})6 D5 A2 e, M, @5 w$ j: n

  D5 G0 b) O2 r6 B, b9 s" M: {
6 g! S+ w7 k$ u# i7 E& d8 H

1 Y" W; o* T9 Q& ?(3) 修改 helloword.vue ,先使用state获取值进行测试( |/ ?" `% f$ Q- i( _; d
State: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;0 w) l; X3 i  A, N" {) `+ o
const store = new Vuex.Store({1 i/ L) o0 ^( M+ _# |5 l
  state: {8 R& D$ }3 O9 t0 g
      count:1  Q6 n" L0 k- [+ t6 B0 @) J
  }
: ]! e8 a/ ?; k& B})0 V& g- _2 ~$ y$ {" o

0 ]: U% n; I5 khelloword.vue----
0 f& f' J; i$ q! c6 W+ G<template>
6 {6 r; }2 y: ^& X  H/ I/ v# K  <div class="hello">7 y9 a- m& s+ u2 I2 [) E, f
. H! {' H) H; o8 y
    <h2>{{this.$store.state.count}}</h2>
; H) j7 p4 J/ D: ], ^# p" y  q9 Q8 |" }% p+ E
  </div>
2 u* X  D4 n5 V8 [+ i4 u$ ^4 f</template>
$ [# _9 e& l& s# [4 X3 M! i2 L2 l
: J/ w. U- J* q' {* s/ B1 j# \+ a

& a# |7 U$ m, ?# w) Y& Z: p: u+ o- U' v显示结果为: 1
% K0 ?- L) Z; o, r  W3 U- y0 M% s9 A+ ?. D. d
+ y7 F& x) b" l# j) D# ?6 E
(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
6 H; A6 F: |+ U% J" b5 w! S& y0 n
+ w* s& c! H- {5 n& S& oconst store = new Vuex.Store({" c5 k9 ~* S7 a; q# f! p
  state: {
1 o7 E9 J+ `: D      count:1; u6 d) j  D% ?* }) X
  },
. h  G9 ?. j6 |5 U6 Q1 n  getters:{$ R' i: K3 @2 m
      getStateCount:state=>{# {+ |5 u+ Q# e" W$ h: d
          return state.count + 1;- N  b) B7 c( O% A: k
      }
* ~( c8 K; N! u  }* l9 a  q6 Z5 ~" Y! Z0 c; K
})
  U  t  z% w  O9 ]4 Z8 P5 l  R8 f$ p3 [( v1 B
<template>
0 v) [* ^. n9 U3 E1 n5 G+ e9 p3 w  <div class="hello">
! S, l* I% `4 i$ f/ z: ]0 j8 G! |6 ?) H5 ~
    <h2>StateValue: {{this.$store.state.count}}</h2>. S. Y4 J- m+ n' D$ S. D
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
4 w7 ^0 n( ]9 {% T  </div>% U- l4 }& H4 H" @' }) ~
</template>
3 r& y/ X0 F7 f2 r3 @' u5 ]
  R- e5 F  z5 e, n1 n

2 s9 F: w! ]9 i) Q显示结果:% ^1 [: u6 Y/ c) r' ~, s3 Q* ^' e
StateValue: 1GettesVaule: 22 [) m0 u3 f) `
! d7 q) s$ ~1 W" {! x: C
(5)
4 ?/ K* j: X) o( [+ Y9 h! e

Mutations:

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

+ Y  {) D. M, |% r
修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:
& k' q/ V& _& @mutations:{
9 d2 O# K, N* N  j2 o      add(state){
) a8 ~2 d' T) T* x- y3 |# }$ g         state.count = state.count + 1;
3 v$ B6 R: u. @, f1 Z. r      },
# F# M: T' @! I* g      reduce(state){! R+ |: b' r* U8 }/ k8 Q
        state.count = state.count - 1;4 i7 O& w( j; ~
    }
. K3 [! k4 O$ L' a  }
, }" o& Y+ ^% g8 A<template>
* g, _3 l2 u. \/ l9 L9 u7 R; M  <div class="hello">
: Z1 ^  P0 Z. ]3 s9 N    <h1>Actions:</h1>& h- |' _' l1 l9 O
    <el-button type="primary" @click="addFunc()">Add</el-button>
( C( O: ?$ V4 c! X4 J8 l. l4 g    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>+ b3 D5 T2 j4 R1 ?7 q* `
    <h2>StateValue: {{this.$store.state.count}}</h2>
8 J* X+ ~, j8 l. ~) ^( h    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>6 j5 s4 }# W6 l2 O. i
  </div>/ N: s% S9 o* c# t7 b
</template>
- o" G  h0 k, G0 l
; g6 o% @4 K5 }/ M9 Q
4 g" w6 S" }5 p9 N! ]7 F9 i
结果:* S: |2 Z! [( f+ N- w6 `, z$ ]
$ D" e2 s5 N6 f  z  r6 w

9 C+ d& Y2 B, g6 SActions:Add
ReduceStateValue: 5GettesVaule: 6
4 X1 c: H+ r2 F; f$ w
5 o- v5 M: U, z% K* w
8 E" F7 |, u  ^' O( \
: x( K' ]4 z2 m  m

6 n" q9 R- E! |3 e& `
* f! }0 K( ]) ]4 a& Z% M3 B
" C% Y2 ~, y5 J: m' a

! z& i( x# y' |# d2 Y& l9 I3 u  t! b; \5 [6 h$ t8 ~2 u
(6)Actions:2 P- Y4 @$ O) Z. b0 c% A

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


/ ^1 B- c+ c1 o5 I2 f


( c$ \) y+ G9 A9 @0 e6 T( d" zmutations:{
0 Y9 s# s  y* [! B4 R' [      add(state){
0 p) n$ H1 E7 z8 b6 f% u         state.count = state.count + 1;. f2 t! b1 Y. d( g
      },+ f6 i0 ^: d9 C! r4 G. {6 _0 y
      reduce(state){& G; A/ C$ s+ `0 N
        state.count = state.count - 1;" |6 `8 O$ U$ `/ m6 m2 `
    }* }9 S) k, t! m
  },
% k8 i* @/ n; U2 u) S: o: f5 g  actions:{. T" m* e$ Y8 D/ C# ~3 T$ s8 a, Q
      addFunc(context){
! n7 s" G8 U+ @: K          context.commit("add");: v3 E. ~8 z% }! y
      },1 T9 g% E$ v4 Y7 W& Q
      reduceFunc(context){
5 B& f% m$ a- U/ d          context.commit("reduce");( ~; |. v- h% n! Z7 c1 ]
      }
2 F* F" \( Z9 D* I8 [  }& q% g2 a; t3 j0 i4 V; H+ D+ m
- w7 ]& Y; E3 T8 R7 j


  @$ c/ y4 o7 c' p4 S" D/ ]1 J( D


  O. d( u+ ]7 z# e8 {5 ^0 A; S6 A  methods:{7 d# J& L2 f: H4 o  J$ d# c
    addFunc(){& L% U5 c1 X1 h( j; U; @
      //this.$store.commit("add");
% Y) I4 M- M% k/ w6 }      this.$store.dispaTCh("addFunc");' d# D8 p- W+ `/ w, D. V: W; ^
    },$ m6 S. ]( ?7 N0 G2 l0 _- |
    reduceFunc(){
# Y) a, m' o  M/ o2 i% v6 f; q      //this.$store.commit("reduce");1 {5 K6 ~+ B, s. i( P
       this.$store.dispatch("reduceFunc");7 M4 O  }/ [* u4 Z4 u
    }
- K" N$ r  K6 P  }
; Z$ U( t9 }8 {& _! d

2 M0 J5 a" y- x这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的, l2 v2 I3 v" g2 o1 }+ F+ n) B
实现效果一样!!!!
8 r9 h, J+ a8 V2 L, W8 ?4 N0 P, |9 I9 F
8 p+ M( z" E  |: G4 T
3 X9 u& @/ V6 P0 i( ^

' M% e% a9 Y- F2 Y4 _' c


  P$ G1 T: ]! d% S  ?5 f3 z

9 Y) ]8 Q2 R. I- g" Z( ]
. T( O9 F4 K  B/ W/ F

  P/ m/ _! ]& a3 X9 r9 c- J1 y
5 ^  K& b+ g& O* g; f
! L9 Z, L) d  b
/ X% f& N1 Z3 {5 Q& [7 @. b
( ^% K6 h: A$ a$ i2 E  d) ~

6 G. z" e" j, {1 h
1 e9 T1 Q6 G3 Z, B: l# U$ n8 |: U" [$ g  \8 d, `2 r( p

. l  J# Q4 b( k/ H, X
上海点团信息科技有限公司,承接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文件如下:


! H; @% W( y5 ^$ _& ~- }


! ]; e* Q5 |8 L4 Q6 _7 r- |$ `

, [, p( R; q! I3 Q( a3 T

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。3 c5 p- c8 N$ U( o
" i2 d3 R4 C& m; o# o
import {mapState,mapGetters,mapMutations} from 'vuex';
+ D3 V0 }& ~4 K! N' |" y) H+ Eexport default {
, q' m7 X& @* j  name: 'HelloWorld',
; n' r# @. t& h3 B  data () {
! [& V! w, A( H5 Y8 N    return {" {% D; M, e9 X, I: l
      msg: 'Welcome to Your Vue.js App'7 M' \7 W0 Q* ?6 B" H! g3 u
    }; E( d( h# S: I% f$ e0 t
  },
9 p  y( t' k8 B4 Z; O  computed:{4 i4 w  \7 P1 @# o% N# T7 W% o
    ...mapState({
* G5 p' f2 S7 f6 q9 i6 u6 u      mapCount:state=>state.count. n& z, u( b: ~& h& |( S4 ~) m
    }): F; h1 l/ r, v. `) Y% w
  },
6 J8 y* @3 `! a5 v  methods:{& h5 G! X4 T5 ~0 L8 L/ W9 }* e
    addFunc(){0 v' S; V2 I; X7 z4 i! j/ {6 I
      //this.$store.commit("add");$ j1 h6 z$ T( q1 T! _
      this.$store.dispatch("addFunc");  }- R2 e& h/ ^2 q4 y1 g7 X  `* n) I" e
    },
; K1 D0 u! v  Y# g6 s    reduceFunc(){+ h) F/ f- a$ t& N: r* ?
      //this.$store.commit("reduce");
9 E. C3 b  h! Y  @) Q  I) A       this.$store.dispatch("reduceFunc");
5 F, K. W2 I% R1 q0 _/ H    }& ~; P, J& a! j, D
  }
  ~4 G/ G" s/ g/ ]. P; w}
1 r/ D' l1 d: d4 ?" j( e7 m, T) E# _6 E
6 }, q- I$ J" [& g0 Z; l+ S

8 w8 C. {& o, K. n: Q# M" K# P$ r3 s4 z, \7 w
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了