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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解& z% u; {# `3 Z! t9 X& J+ \
8 K- a' H& D$ Q' h- X
本案例测试下Vuex的使用,创建一个新的web项目
! k, E& |* Y! J4 m- G8 f+ V* QVue init webpack web
- g2 r3 m' P, ~6 P- H安装vuex! [2 k8 C8 M/ ~6 P8 t0 J& H4 {
npm install vuex --save$ x$ f% W9 B, y5 E( G% O
启动, npm run dev,打开localhost:8080  即可5 }. q* t; W9 {" M6 q4 I& w+ f: Q5 k
" ?( T( t+ V9 R6 V3 e: }
- L$ v5 W! Z. I& ~/ Q- d. y
(1)引入vuex
$ \! N3 [( v5 q创建一个src/store文件夹,创建index.js , 引入并导出store
' Q* f- l9 @: S$ D7 w# ~7 ximport Vue from 'vue'& B. ?5 Z9 B! B8 N& g' X( Z  Q' P
import Vuex from 'vuex') o+ i& h& U/ f8 W! d- _
Vue.use(Vuex);
2 D6 Z# N3 d1 C$ w' M: sconst store = new Vuex.Store({
' H+ f3 Q; q+ W4 w7 Q})
+ w4 Z: O& r2 p7 I* Uexport default store;# x2 L7 O5 B$ ?/ a, V

1 Z8 b: V+ i; p8 P; a: m/ A1 L(2)引入store到main.js
7 x$ V; t6 s$ ^; `  S# V* r  Timport Vue from 'vue'2 Q9 o4 [, N3 a. F9 a
import App from './App'
% i4 h: F% H( Q+ T0 V  e; @; _import store from './store'
8 ^# ~5 h" ?1 E; ^
0 R; e+ R. K: d) @$ a$ JVue.config.productionTip = false( z; [3 x- e9 [% L9 n( x

. P0 j+ c3 |# a/ ]; u/* eslint-disable no-new */
8 d, W1 k; ]9 W- vnew Vue({/ X- A# B- Q5 t5 g
  el: '#app',
& f/ J: w. i: ]6 T  store,
: Z( g: j  y" E6 \3 N  O1 a' T. v  components: { App },$ ~! N% a: e2 `% k
  template: '<App/>'
- r0 Q; J4 r7 z% j  f' `; J  T0 v})
* m6 ?& b# P$ S. g2 ~1 Y5 z: `. A" ]$ _, l# Q
& b) U! n! z) D7 V

2 Q  D& n% i' p. T' u# k(3) 修改 helloword.vue ,先使用state获取值进行测试6 }. q# L% k; B( B5 @
State: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;0 r1 d: e6 W, m3 B- e; M
const store = new Vuex.Store({7 J! L" P, H2 R; s
  state: {
2 ^; G/ Q; j' U      count:11 N2 l8 J7 A/ y- \1 x* \
  }
6 T, K& K+ ~4 p. @# s4 Z6 E})! E, V" F9 [2 f; V( w8 ]1 ~- F
: R7 f4 v. ]- G( F  J2 p+ m" }
helloword.vue----4 G. L" P6 H# V
<template>
" E3 R' @; J2 `: [1 C, \2 g; ~5 V  <div class="hello">
/ D2 H6 }" a. b0 X' q9 o% h  T7 W+ w0 {0 M4 |
    <h2>{{this.$store.state.count}}</h2>
8 M. B% z( O0 }5 o, ~
# Y% @4 e. c# p. G; j5 ~$ Y. C  </div>& s4 n: l4 u" X& v6 {
</template>0 W3 N$ [0 ]0 ]3 l2 @
0 `9 c6 t% W) K; M5 `. o
* e6 V0 ]( C6 j2 ?
显示结果为: 1
& @, E/ q- f4 R2 K
/ d4 k4 O8 K9 n* w
( y% ~% h2 e& a3 u! \
(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:# c: e( I+ y* ?+ C1 ^

. T4 P; I5 A6 g7 Zconst store = new Vuex.Store({
" N3 v3 B. f2 R0 K6 X  state: {( ~, B( k/ Y) h0 q# t- U+ E
      count:1( A$ ?; N' ]0 ?  M1 m! Z
  },: W' n. I+ H. b# d4 F: n
  getters:{
) C) K; i* e: N& f6 r      getStateCount:state=>{7 ^! ]- d  r. u  X2 k( D0 E6 N
          return state.count + 1;5 T) W  J) z0 S
      }
% ]! U3 L7 y+ Y  s* a# X  }
& ]* h  ?8 F- z6 v})
* B1 z: [* N; J4 a7 Y' e  k4 \
4 ?4 \# f) J7 U& B2 `; y7 J<template>
+ }% e) g6 a' s6 z+ E0 ]  <div class="hello">
% ?5 e8 A) b1 h* R0 w, ?* D1 X$ S2 ^# K4 x: \9 m& Z4 }1 g- E8 [4 {
    <h2>StateValue: {{this.$store.state.count}}</h2>
  U/ ^3 q) u6 v1 D     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>1 |, {: }; E8 \4 {3 ^& h" u
  </div>' a* y8 r  f; a* w
</template>+ _( y4 ]2 D+ m- ]4 o/ v* Y

  x* D9 v) J: Y0 j3 Z) j/ _

! ?) ?; Z8 X4 w) t0 C6 |) P: c3 d显示结果:. k- r- J- _- e0 m% j0 A
StateValue: 1GettesVaule: 2- K' M& a4 x! M

5 `0 k3 r3 ~4 ]" z0 t0 e(5)
) ?/ t8 Z  {9 j. _

Mutations:

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


% m6 v2 W9 }- B1 x; H修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:; b4 i; t  ?$ }: w" c
mutations:{
) u' y9 f& v* n& y- `# R- [5 F+ `      add(state){/ ~1 `( x9 H6 j1 }& S
         state.count = state.count + 1;
( [( {5 m1 q' V0 g% v      },: f! ~+ q6 w& N6 o# w7 k
      reduce(state){
! t+ A; f- F/ [& U; p        state.count = state.count - 1;
7 C% J& K0 R+ z9 K( }    }
0 b' @0 V3 s" S( S; {6 F  }9 B- k; ]+ _: ?4 S5 t: s/ W" z
<template>$ s& `( P- _6 r2 o
  <div class="hello">$ s% Q7 c4 x: e/ L2 R
    <h1>Actions:</h1>
4 O( l6 C, p4 S! p7 l; D6 @    <el-button type="primary" @click="addFunc()">Add</el-button>- d8 p% E4 M  }, h8 y! ]2 M
    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>
4 M& @! `* P1 B& v  X. a$ R0 e    <h2>StateValue: {{this.$store.state.count}}</h2>4 J% E) Q# z* D% {8 y, Z
    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
& e& c& o) d4 B" u/ p+ v  </div>3 l8 ^2 n$ M0 c. t1 g
</template>$ \! g- m6 j1 `1 ^$ P
9 o- M1 h7 B! m
; e! d2 q& m9 G$ {2 g
结果:
+ u2 o1 Q- x- I% _; y! r- r8 v4 `) _: |, `  c1 P7 k4 Y

( X% d4 R5 Z" K8 E# s2 q- y' FActions:Add
ReduceStateValue: 5GettesVaule: 63 W/ o! k# r7 K! e( G. l" V: w
! j+ B- Z, a. _/ L4 L( B% F

' ?2 E  C$ k# D% m9 D
9 q' K6 L, Y! S) L9 A4 }
- F6 W  G$ }* z2 p9 p4 \

3 a) N+ A( W6 F3 a) d
- D( a9 P, q/ @1 P/ N9 d0 I
1 M1 k& u" i& p, X

- @, e8 O# ~' R6 h+ k1 j2 n(6)Actions:: R9 _4 D6 _' Y6 O- |! n

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


: h2 A+ b: u) n+ Q1 Z


" A1 P3 `7 h7 Mmutations:{$ r. ~! c. w" F7 L3 t" W* C5 T9 V
      add(state){" i( b3 ?! z- T4 e
         state.count = state.count + 1;
1 g3 R! h- f3 O+ k' N5 y* u$ I      },% @' ?) ^, z" ~% R2 L/ N# {
      reduce(state){
& P% x- K8 _8 X' {        state.count = state.count - 1;% j# ]# {8 j) x2 S) E
    }
7 w: A- d& N5 Q% _% [1 v9 x0 a  d  },
9 ^, ^0 V0 A7 g  R& A  actions:{* Z: }, f7 g+ u" X$ m/ H0 O9 L
      addFunc(context){" A! |) s$ w0 }& r- S' y- X" ]
          context.commit("add");
" a' r# J) ~4 t' ]( j- u4 J0 u      },
' {$ }: V( I6 v      reduceFunc(context){
6 a3 h7 o3 `- u          context.commit("reduce");4 \, h' t8 h. K7 Z
      }
' b5 c: }6 L3 x  }
- r4 l9 H  |/ _$ n; o& D* `

/ J/ F* p' n7 ]5 y


; h  K, Y/ n% [, G+ ?4 b. e' V


5 a- E1 P7 m& ~# \! A6 d  methods:{& ^# l1 Y/ K' {. V' r2 ~4 t! p! X
    addFunc(){6 ^9 Y( h2 w4 L; `8 v
      //this.$store.commit("add");
+ j0 R3 R* P$ |3 E- r  B      this.$store.dispaTCh("addFunc");
) S. M# C" c, l# _9 {* G    },
# F( z* N: q7 y1 O5 m  s: `$ U& p    reduceFunc(){
! a, m# L' c) o% k( Q' [* d: d8 u      //this.$store.commit("reduce");$ o) U" {& k5 W. |
       this.$store.dispatch("reduceFunc");) o" d4 J  h! o5 m& R
    }+ i3 O! {' g; C6 ]/ a. Y; q8 _! a
  }
( I, y: a4 t# s# |6 E

7 a" {& G; M  |( s这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的% w' D; {/ q4 R$ O2 v3 _
实现效果一样!!!!
3 g# m0 I7 ]* a. p8 z5 b1 u2 E9 @( |# @! C) C1 l1 a8 K/ G
; G: b4 H) G& i; a

( @6 p6 `  T  d1 s
6 G5 m: i& ~! [


) p& e1 W, ~' M3 x

5 x9 b" G5 \0 e. w
& G  `* @1 x2 F' {. x% }+ h

' l2 u- B( C% W( r2 B8 d" F# V/ m3 o& n# C

3 q0 a% n$ ~  s  ^: O
8 ?, F; r, S- P, o. {, S

. O4 a8 _$ l) s! s: f
( o+ L5 c! D' _5 y! c: @: h5 v2 f3 l2 o
: q) X1 N5 c. T% n# A

. a0 J/ A" R, M) |; W$ u
上海点团信息科技有限公司,承接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文件如下:


  ~6 p, j- V( u. X3 P  P7 v


6 J% s- o8 l! T" X  e

% L3 A* l: i* c/ p2 Y

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
$ X# o: s5 l* r7 v- r1 H

6 g/ B% H( _+ t1 Z1 {# P: Cimport {mapState,mapGetters,mapMutations} from 'vuex';# G0 ?" G. f6 t
export default {0 t& ^- q: {5 y. f% J  Y
  name: 'HelloWorld',
. T! q- b& M- k: n8 C& C  data () {
9 Z+ [; D' w2 Y7 L( m    return {
6 Z- E! a. t+ O/ U8 v      msg: 'Welcome to Your Vue.js App'. G/ t+ W* q2 E7 C' V
    }# k) X. ?9 t# F' y
  },
4 H4 ?( C4 u9 U2 {$ R  computed:{
% K0 f7 H! Q7 q    ...mapState({
3 @+ L) a/ a4 F& t7 Z      mapCount:state=>state.count. U2 t& h5 @; N8 O( z
    })* T+ z4 V: a" v# l
  },
- k0 J+ F% l; I  methods:{
. r& k$ H# E/ n    addFunc(){4 ~* l( q6 \# ~; B/ x
      //this.$store.commit("add");8 k; t7 d) y# N: i. `
      this.$store.dispatch("addFunc");
, `; U7 }3 I* W( z    },
; e5 ]; [8 Z1 h3 M+ p7 A* w8 C    reduceFunc(){
0 B2 ?5 {3 S1 [' Y      //this.$store.commit("reduce");; X, V7 P' u9 Q& |) y) {* X  m
       this.$store.dispatch("reduceFunc");
" o! }  L4 h+ X4 j" t    }
; u* z/ z$ l+ I+ I+ Q' }  _  }! H9 V% [4 R. a2 j; O3 }
}' I1 x, l0 P" b4 _
+ G, F, g' I4 _7 i2 ?6 \% F1 P- h: Q
1 R& ^: ~% _3 B8 L9 U. A% C0 b

" r! c% w* X( C4 W6 I; h  b1 a
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了