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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解8 ~+ x  a0 Z, T- U9 ~1 a

5 n0 H6 V; c( c! ?; S+ c本案例测试下Vuex的使用,创建一个新的web项目  o: R* {2 o# u6 ~
Vue init webpack web& S" `. G3 c( _& s7 z0 Q- |
安装vuex
: t' a9 F6 I; \% q4 Rnpm install vuex --save( ^/ G3 J) K8 Y5 \
启动, npm run dev,打开localhost:8080  即可
" {9 [9 |/ }& g
. b5 I4 V; @. a, g) K0 n. l. Z, D
(1)引入vuex" S/ _: T' |# m8 k7 H/ q
创建一个src/store文件夹,创建index.js , 引入并导出store' U; }1 r, V) R7 c3 R; b* R) }
import Vue from 'vue'% r# p$ e2 A: U3 |$ j2 _* G
import Vuex from 'vuex'
6 x+ t/ B; t1 QVue.use(Vuex);/ Z; v) Z/ K7 f
const store = new Vuex.Store({) u  j; ~- T  @
}); W4 M8 z6 o- n( a! I
export default store;4 N% U  }3 P8 ?6 e$ A9 h
) [$ |8 I4 u8 t4 O
(2)引入store到main.js
: \) e# h- W4 L4 z, |' Bimport Vue from 'vue'0 J( r; U3 ~6 f6 Q: K. @
import App from './App'
% P) d6 V8 |7 F! g6 Fimport store from './store'* `8 m  C2 q4 B
4 S& l' m6 P) g9 s8 _& ~, w
Vue.config.productionTip = false
8 r3 s$ S7 B8 R) v
; o$ c, Z% q; ~/ Q4 r- ~/* eslint-disable no-new */
: F5 V. f4 Y1 a4 Onew Vue({' I; z$ H3 r  U, |# o; q8 _! ~
  el: '#app',7 W) q" Y7 |) P
  store,2 t$ ?2 o: R0 l6 W0 c
  components: { App },- s( U+ z, b% I* E
  template: '<App/>'
; c6 z( t- z4 m* M7 C' H})' O' G1 Q3 A5 D
# m6 H7 P# ^3 |: q. G- |" l1 z

  V. ?2 z/ n0 p3 Y4 K

1 o8 l( [- v. Y) }+ q  H+ F(3) 修改 helloword.vue ,先使用state获取值进行测试
+ U7 {6 T# @) n  |1 u6 BState: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;
: H2 ^  E: j9 ]% I4 Qconst store = new Vuex.Store({2 U( F+ R3 N% s# D
  state: {
2 T" @0 P8 R) A$ R0 F      count:14 w, n4 w" ?, j5 W+ j" H$ B
  }
/ H& ~5 P! ]8 I}), M& d' B, a' z* w4 Q* I
0 u. s$ h( e4 ^4 U- B1 @
helloword.vue----
$ a6 p, z+ ~3 p4 E; D+ K: {/ L<template>) N  p; u9 y" \2 P0 @9 N! X, T
  <div class="hello">% r5 M% [$ L$ o. r+ M7 L& z5 t
) B0 j- R: B+ @( ]; N  T
    <h2>{{this.$store.state.count}}</h2>8 L2 y$ s( l; L) i5 l7 W
$ n. {, {5 N4 b0 q  @  n. n
  </div>1 s) Y- G5 i5 M& D4 b3 O
</template>
2 h5 A/ W1 R3 V3 H, f3 f
8 @9 `# D( z1 u9 T: ]; V

; Q4 V' o. H; P. F( x4 h显示结果为: 1
( v, o* r* O# [( _. H  T) h7 d) j8 @1 a6 r

$ T1 X  h8 P. C/ A/ n! C(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
; \( z8 G  a  i7 Y% j4 P; Q
& P: x  k9 H' A' d# R. zconst store = new Vuex.Store({
) ?' h8 @5 Z8 ^  state: {5 Q% j2 j( K$ E! p' \3 r" s
      count:1( N% e( w6 H5 L5 N1 M" }4 m
  },
4 P3 R3 c8 B* u, N  getters:{
9 k* R* @" Y5 ^% h      getStateCount:state=>{
# Q4 S! v2 S1 P2 p, q5 F          return state.count + 1;
7 k4 l# F% T9 z5 i      }) a7 }1 Y* l  Y* z, ?
  }
8 [9 ]# d4 j5 B" ?9 l; S})
- h* R6 `! H) G0 S# L7 w3 _
/ e! y* d1 V, w) Y$ [<template>/ U. b: l6 ~3 T# a/ D
  <div class="hello">
, @1 `' q- G0 q
* a9 `* @6 `+ z$ b( ^- F$ x    <h2>StateValue: {{this.$store.state.count}}</h2>4 y% h; q0 E. V' o
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>0 L$ c9 R7 A. y
  </div>
  c# \& t9 s3 l- U</template>
. A& ]# C5 z3 U1 E8 n; W3 r" m; H6 t9 D
% x2 i1 T4 `  Q4 F/ H# x
显示结果:
2 l" ?7 T# _, E- ]8 hStateValue: 1GettesVaule: 2) O1 \0 B/ v4 e( ~& h; B

' y7 y, i7 D3 k3 ]3 B# R(5)
4 @" S% C$ @* ~: J

Mutations:

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


& K! M& E: s" y/ s) P修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:, {! q6 \+ ?( K
mutations:{
: Y$ M' `5 K; y      add(state){
. A- N! w% D7 g9 \# f$ z         state.count = state.count + 1;% t9 ?. c8 u1 @
      },
& [2 a0 u7 l+ G0 i, |% u: z      reduce(state){) h+ X/ A' w9 j( w' a
        state.count = state.count - 1;
4 ^0 O5 ?5 Q+ A2 F3 d3 X    }
5 ?7 r6 n% Z6 ]' R  }
8 |' B! _" ^/ w; c& j% Q<template>
* T! s- L, R" J1 X$ ^  <div class="hello">
. y# w3 X3 Z+ T  \5 A6 Q0 ]* {    <h1>Actions:</h1>5 v( h; K) X5 d/ n. B9 ~2 s
    <el-button type="primary" @click="addFunc()">Add</el-button>" m6 [% _: L% e7 k+ c; X, Q
    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>
) F. p3 }4 G% b9 i# B! D    <h2>StateValue: {{this.$store.state.count}}</h2>; O, I: q" ]- p) D! R
    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>, J4 y1 W: h/ M& o6 u
  </div>/ i: |, s! g0 @/ T6 q( P  {
</template>
( N, `0 B! m& y" F; i/ l4 R& H1 d; K: ~! o( t- F) K

" D  r( c$ [) M, G7 U( [3 U- i结果:1 j! T6 D% m5 O1 D8 Q- h
6 e! T) M& r! g7 J
3 T' |- C7 z( C- b9 {! J
Actions:Add
ReduceStateValue: 5GettesVaule: 6
3 t) q% I0 i2 a, R) c+ Y" X. K
/ l, ^2 c9 @+ l/ P7 T; ^
4 S4 e% r9 N8 Y0 i+ o2 h

) ~" D/ t; v" d2 z$ a- q9 k
" t$ K' h% N" L5 S0 l1 c
% R% L6 T4 k& Q9 _+ k# k. S

4 [  \& k: y: O! x( `

- p7 S2 y7 ]) v+ W: z, R& z# V/ {0 L5 j, U. M
(6)Actions:, o" H/ b" m! C  D8 T

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

& z$ L& O6 E. u/ F3 }

% y: e, J) h% j; b2 }* Q
mutations:{
9 I9 x3 o: Z1 y' j6 H      add(state){
+ a0 I' e" H' J3 n  R         state.count = state.count + 1;
7 \, ?' D$ t  j6 a- d6 I. ~      },1 b$ R$ r0 P/ y; w0 H& l8 }- V! x
      reduce(state){
9 u$ H9 v* L6 X) i: w        state.count = state.count - 1;
; m8 C% J! T7 B) [9 E    }
7 r$ A# p3 M2 k1 l  u$ e  },
3 Q) i: q+ n$ q( p3 j  actions:{1 u2 l# f+ {# f+ m& ]9 E. p
      addFunc(context){( Y. m! G( E% Z8 D5 ~& m- X
          context.commit("add");4 Y6 Q( s+ F( s  ?
      },
! f6 J2 s0 a5 O" w( P      reduceFunc(context){+ e# U+ q4 r( K0 d
          context.commit("reduce");
5 U! w/ [/ K  R6 ?      }2 @3 K$ J. m8 ?0 z: l3 r
  }8 L/ a* w6 h9 c! a" w5 U

" H1 Z; L9 M: Q4 ?' p' Q

6 ?  L& t0 Y* L" H  s8 ?3 ^% e% L

4 q5 ]1 Z! Z. g0 C( D  S
  methods:{( ?3 f8 z/ J! i8 z, r% F% K( X
    addFunc(){9 E* |3 O& l' I. H1 k8 ^. ]
      //this.$store.commit("add");
+ j$ D7 Z: c  }      this.$store.dispaTCh("addFunc");
& X' h7 O: r' W    },
. O7 y0 w) V1 G6 b    reduceFunc(){6 e. z( W$ ?' i8 L7 d. c; H
      //this.$store.commit("reduce");
0 k) f$ x: u: ]# H( k       this.$store.dispatch("reduceFunc");
, W! v, M1 w5 Q1 j% m! J" M8 U    }
  T9 ?, x) x% l% i, O0 Y# P  A7 m  }
0 ?) s4 Z$ D% W# D
  j, {/ `0 U% ~5 V1 T6 X; o! q0 w
这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的$ U" I) O/ V8 `& D
实现效果一样!!!!: V' W- [. V& f1 g
6 B' Q6 o6 g! s5 |5 x) c
4 R5 L) }$ s+ _

0 [! V. o' q7 f$ \) J1 G, B

( x9 i( e+ ]2 X* @


% d! d4 y/ L# m3 O1 X; ^% s: K


+ d: [: G( {/ t+ V, q4 g8 n% x4 X! ^  X& y2 |; L+ i1 v: N* ^: |% @

. O6 `9 y8 M7 k  S6 P" H: L3 e2 b+ T9 c/ i
. s) ]4 }4 S3 M, A- g: i2 A
* \6 T6 P) b9 B6 a0 R
/ f, `& w6 |( b

0 H* O. M; Y5 ]# T! `4 _4 k* d7 I9 \! X+ q4 T& N( U% H5 i

8 y  y" [) {8 S+ \; a8 K, ~
3 U  u; |, F4 _( H
上海点团信息科技有限公司,承接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文件如下:

% m- L, l" R- N: b/ R

0 x6 C. ^: J% {% ^4 m+ S, Q/ E


: K  ?& m+ L# S6 Y) V9 V# A

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
% u4 \% d, k/ q

. B# F6 z9 n1 eimport {mapState,mapGetters,mapMutations} from 'vuex';
* c; S" X5 w. F6 {, i: S% P+ w1 fexport default {
$ B7 b$ X7 x* W. h! |  name: 'HelloWorld',
' p7 S/ E1 R, A+ N/ y  data () {
5 g  }9 J$ [$ h( j    return {
4 X, p% C+ k9 c7 r      msg: 'Welcome to Your Vue.js App'6 `; {  G3 M* h2 p) a0 M
    }  X) C  H. f) {1 J
  },
  N. n1 W2 f8 r; Q4 b. G# v  computed:{
7 D$ T# u" D) j! I' ^& v' j    ...mapState({$ E- \+ t. N4 M$ a9 ~$ z, {: h
      mapCount:state=>state.count8 J$ H$ ]3 G& u1 s
    })
6 \) L& H0 L$ I/ l& W" J  },
2 J1 v$ Y+ M' _, c, q, Q  methods:{4 L4 q+ i* w) e3 P9 q/ e4 ~
    addFunc(){- N7 _; D% n# g' U  U
      //this.$store.commit("add");+ |1 N$ c1 a  p5 _- ]
      this.$store.dispatch("addFunc");1 W% L+ z: Q! p) ^* w( J4 ]) x0 K' W
    },3 w% ]; j# e! q7 o" G* j
    reduceFunc(){* B! s. {" ^5 G" i" L: `0 i' m$ g
      //this.$store.commit("reduce");$ f& P- e( j9 L  [- b' n# [- |1 f
       this.$store.dispatch("reduceFunc");" F2 t0 `6 T% L+ `
    }
, g- L6 s' W" G- Q( S. b  }
( h# _2 P2 i0 u}. l* x7 U3 T5 I: P& }+ Z3 d1 u
' Z: u5 V/ X2 b- X1 C/ A
0 p+ @! B7 u0 t+ _2 z

$ u; j2 q' t* L% s5 e$ w6 |) t9 }, B! w6 x
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了