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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解/ W( d' H8 k2 h$ R, k
& @# [0 R/ z4 a% |
本案例测试下Vuex的使用,创建一个新的web项目
' U' C1 C# c. F0 h& s/ Q$ aVue init webpack web
$ _* D6 G% L$ e; F2 H4 O安装vuex
2 h$ |* c) ~' _! t* I* ~0 enpm install vuex --save, L* R* h' J* J
启动, npm run dev,打开localhost:8080  即可9 h  S- Q% D3 p8 L2 D7 D1 `$ \

2 r8 o7 y1 r4 d5 _" D7 C
. g) u! W  x5 q$ Q' @& {9 O(1)引入vuex' V) O. [! q2 {3 ?, O! c- D/ }( j
创建一个src/store文件夹,创建index.js , 引入并导出store
0 \5 f' @0 p1 g* E4 q  w; q  J6 Oimport Vue from 'vue'7 f0 }% D, K, l+ T4 C! ?% t, ?
import Vuex from 'vuex'
0 Q- v; n+ Z8 e% {0 HVue.use(Vuex);
  a' W, t; ]/ w( \/ Oconst store = new Vuex.Store({: g1 h0 k( A5 r: g
})
! t) X# g6 K+ s& k9 J' ^- rexport default store;3 S3 R: D5 y5 W( ]3 J
/ m" Y% c2 E9 N
(2)引入store到main.js
# L( ^: ?% z, E  ~; _import Vue from 'vue'6 l5 ~, ?7 R( @. T& R9 ^& l) c; s
import App from './App') i4 i. y7 O; V& [5 ?) W- p# `
import store from './store'7 v6 C( s! D% z# a$ _4 {' N/ @$ N4 T

4 X6 K4 R6 A% s' C' b$ tVue.config.productionTip = false3 X& Q- S8 B& g0 {2 m. V0 e7 x) ~
3 M& c. n- k$ T, W8 z. r2 R% k& x
/* eslint-disable no-new */5 D/ n& B. G/ J- k2 O$ o
new Vue({' \% `) {/ d0 d* P2 R
  el: '#app',
. l7 X* f9 R5 z$ Z# d5 B. [  store,
7 r1 U9 n% W6 c" A9 q' }6 F  components: { App },3 R" W& h2 M" E* {; O0 k. r
  template: '<App/>'5 ~0 t& a, U7 ~" p3 N% D; C
})* |2 @0 e, [) m$ e; Z

6 _7 u% d+ Z* ~" u5 W0 |5 W- `& ^

+ Y! c5 U4 H% f1 Z- ^. J* x

% Q2 i. H, C8 d(3) 修改 helloword.vue ,先使用state获取值进行测试
8 ]7 F/ e) N. j7 u7 t5 U  R6 pState: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;# f6 _+ _1 z2 j, H1 T$ v0 W# y$ M
const store = new Vuex.Store({4 y8 H  f1 [; N) ~! ~
  state: {
, F" d5 _5 E) }      count:1- _  Z) r& w5 r* W4 |; _
  }
5 s) X# w, q% w9 R})! C( k" y- @* w  N* g
( R' U+ F# K/ y8 k0 v
helloword.vue----
% @6 c. C# k4 C" Y* I<template>
6 c: ~) K& K; a, P  <div class="hello">
+ T8 F7 m8 S3 }- T
) V# _7 n7 |* w6 S4 ?    <h2>{{this.$store.state.count}}</h2>1 c2 {) M0 [' O3 \; ]" z% M# N
' W: |; _* W9 l3 u' t4 N
  </div>
" D5 `; a6 l$ d' ]5 V6 o</template>
9 n9 X  E, C( j: A- p
! L! \9 ]+ m  H9 f$ x% p& v' V1 d

; i0 X' j- V; m- |7 [显示结果为: 1
0 X. o3 X8 A  O' f
- x& m% b+ d6 P+ h) _0 z

  q; n  f  k  D" h7 M(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:9 Z1 Y9 _, y" S3 g
1 f9 u! P6 b/ _0 l) w
const store = new Vuex.Store({
0 |! k) W9 T' x# c7 E" I. _  state: {3 s3 c1 a  W9 C- Y/ h  y+ W2 `
      count:1
. o& `" S' `; d( W. u+ ?  q4 @  },+ u4 b; m* J# Y+ M
  getters:{) t/ X' |% M% e. P: M
      getStateCount:state=>{  c# |8 k! }1 m# ]) X, P$ @& x2 y' a# H  b
          return state.count + 1;
+ h5 O9 ?/ N6 r  \3 `* I+ a9 K      }
& y! z5 s5 D4 ]$ c5 H. a8 N  }4 ~4 O8 D. v8 g( f' X9 C
})
: Y" E* z" x- N( o% O' ]- o: N. A6 o6 P0 \0 r3 w
<template>) n) N/ |0 Q; p) c2 I: T, Y
  <div class="hello">
1 y, U& l" @4 Y3 C/ N: n, g: N
7 p# ^+ Z$ A( j$ C' F    <h2>StateValue: {{this.$store.state.count}}</h2>; @9 k! X$ w) V5 p( i
     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>! n$ N2 s! d. f! g6 `5 p1 {
  </div>+ m5 {7 R2 }8 [! d+ E# i" D4 ~4 n
</template>
  D& ^2 d# M: ?! I  O& f# I  W; `  c* N& O, k
" q7 l3 p& ?$ a  ?, ]4 ^# }
显示结果:' B' N" w; T2 h2 u7 C1 _7 Q$ w
StateValue: 1GettesVaule: 29 J* c; h3 z( V! B( k: G# ]! b
: q  i+ `* r  L" ]
(5)
+ ]9 C# K6 C0 N  ~2 }- i4 ]

Mutations:

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


3 S# f$ S5 x9 r修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:
  a/ `0 \1 P4 h$ K/ l/ mmutations:{! _; _# e/ n* a( G# j  A1 S3 O
      add(state){: ~9 ~2 M5 K  W, d* G) ^9 V
         state.count = state.count + 1;
# D! g0 C; \; W0 c+ G; `      },
$ N# n/ p& z) m" G1 Z/ K# A      reduce(state){6 U0 j  L$ f6 {1 l, m
        state.count = state.count - 1;
3 U( K6 X' t& T+ U% P  a8 }/ `    }
* K% G! {! W' U7 _  }
1 U( ?/ g( k( a" c  d<template>4 x/ O4 a6 K8 Y
  <div class="hello">. \9 p" O3 @' W6 H0 s
    <h1>Actions:</h1>8 l( L* A# q2 _2 q3 ?- g$ `
    <el-button type="primary" @click="addFunc()">Add</el-button>
9 w0 [/ p. `/ [% E. H# l, \; q: Q    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>5 R. I& V, _+ f* c. N6 ?1 a& r+ r. ?
    <h2>StateValue: {{this.$store.state.count}}</h2>' |$ J% l3 ^# Q  J1 k7 `* C
    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
+ C# b" t0 J8 k; _9 S: d7 C  </div>1 }  S( @- T& M, R7 J+ q4 m( Q8 e
</template>
. x! [' g3 d' M4 D4 r$ J, n5 Q5 R
7 p( ^4 @5 e, N
结果:
% L" R/ t3 |; D  S" G; g  v0 y+ U' u
* g$ ~# |* Q" Y% W9 D

# I  z8 ?+ w# z: T' w: x! tActions:Add
ReduceStateValue: 5GettesVaule: 6, g: G; W( ?: i4 d
# @: G, Q# T( X5 j! C

6 K, ?% e5 z0 C: E

" d! ~- c0 N6 _& n8 ~" ~* f- z/ c% D- U* D* M9 {
: c7 ^9 l1 u9 _! i9 f

4 D. ~) h3 R1 N( C9 V( D

- J$ E8 `; g; ^* l# B8 u0 {  e9 [. a/ i; ^
(6)Actions:8 c: e0 k8 R2 Y- f8 H0 m

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

- G+ n7 I# L. u7 x, R# u

. S  a0 x2 S2 D& z0 U. T9 ^
mutations:{4 G, l; `' i% ]! }; d$ T  {
      add(state){: W9 g" X% k$ g! B& n0 [& W0 T9 ~, V" G
         state.count = state.count + 1;/ I* ~/ y7 N7 t6 \: t7 T* M
      },
+ S3 O) [! Z. D, ?6 [0 h" a      reduce(state){
; e' G; @0 P1 T6 D8 }# W        state.count = state.count - 1;/ u1 h; r* a+ U( V- g+ l) M
    }8 A+ l5 q, N0 I- w
  },$ H# _; I) d3 J1 H. k
  actions:{; P) d6 {) b( l# D/ _8 {! G
      addFunc(context){/ W. d6 z2 M  y7 u) B% v
          context.commit("add");$ n& v' D) ^! v: ~1 n( ]
      },0 q  \% C, X9 L) M' S! D: K
      reduceFunc(context){
) u5 E) X, ]. n6 _          context.commit("reduce");- N% y* A( K  i7 J5 k  w  d
      }5 m: w. p  u" f. \
  }2 ]: C! {" s6 A$ q

# Q# X* T6 ?& R& r9 ~

3 x9 r/ V8 k1 t! D* i2 Y& a

9 m2 |- g4 U! D6 x4 r6 ~
  methods:{' y' V' v9 d/ T- ~+ U$ z9 s8 ]
    addFunc(){
, _/ [9 F2 [7 G) u% h: H      //this.$store.commit("add");0 S4 b+ P) W+ G; i: f2 Q
      this.$store.dispaTCh("addFunc");
/ N( o  _; y; t# R6 r9 \    },
! g! F- X# j2 V$ w( g) g0 S! M) o    reduceFunc(){* Y7 k- i7 i, J; x1 @
      //this.$store.commit("reduce");
9 i0 Q9 ?& i% V* H       this.$store.dispatch("reduceFunc");* N/ G3 C" R- }
    }) y) O- j0 F% F- `2 s6 f
  }
' o% C! B' ~* l5 i, O; P

  {- D% B* u" e/ t  F8 ?' M1 o这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的
3 y' H. o6 f* p+ L9 M- X  u: [0 P实现效果一样!!!!
+ ~5 Z" q5 r/ p1 b: ^7 k
* f1 p: ]5 M9 {# c+ ~+ R2 r5 {' g  [# ]4 J! k; v

( v; q: a, K5 Y3 S

3 J& D# g8 V7 J* g

" Q1 N- G4 i8 a: ]


" a/ X3 L( H. C4 E0 H
7 u& y% D% B, H# y- H
7 E4 W$ |+ s. L9 H, ~5 S
5 o' u2 @0 {) H
" b, T  s6 q& M2 {% J7 a, k
% L( B5 ?1 g& `9 {3 k! H2 X; C5 L- T* ^
0 J: z9 v3 c/ U- ~! a
; P# E& t3 d6 I! |

; y  e5 D! ?, d& m8 ~, z% s/ p. r7 x' ]# j% J" q3 C8 P! J8 C$ X5 S, X

( S9 ]$ b2 o, y( Z, N  i
上海点团信息科技有限公司,承接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文件如下:

/ O2 m8 }. `9 `$ n% L1 F* d


' @  O! O6 p( h; N


9 t/ _! {) K; l

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
9 G- N4 p/ M2 B4 s' j. }
( a: _; }5 e  z8 r) Y  o: [8 O
import {mapState,mapGetters,mapMutations} from 'vuex';. c; @+ u( _; m. C. z; r- o
export default {$ _8 S8 e  ?0 Z0 `
  name: 'HelloWorld',. x' U$ [, u. q, \) a
  data () {
4 H' }( I5 H; X/ F0 W    return {
- Y9 W) l4 D2 N: e1 W2 @. b! o      msg: 'Welcome to Your Vue.js App'2 S$ s" H% j) N5 V% E7 z$ k% u# ?
    }2 @. R6 i# X( U- p+ w# u  E  t/ h6 V
  },& C- X% Y6 f$ V% m" P
  computed:{: }9 a) M4 B- @( v" B
    ...mapState({3 U4 p. E! P& F' T9 P! x, O; k" x- F
      mapCount:state=>state.count1 u1 p& y) l/ |5 I3 }
    })  o1 v7 o0 X* r; h% W) V* n
  },
2 N- d4 `. d! Z5 }' N  methods:{
, a- W# H! p- m' F$ N4 K    addFunc(){5 ^0 W7 ]( v* H. q
      //this.$store.commit("add");
+ W' d' ?& F7 t) p      this.$store.dispatch("addFunc");
" N8 |. e$ Q2 w5 r7 \3 S5 `    },8 }; o' F9 n: _$ r: V- ^+ X! A
    reduceFunc(){7 b0 O2 t! e3 R, m/ l7 w* B
      //this.$store.commit("reduce");* d( ^8 G, u7 `3 C
       this.$store.dispatch("reduceFunc");6 |) n/ o0 |/ V! @- ~" L% d4 x
    }
, Q4 V9 s6 @: S$ O" L7 b  t! ^  }7 M. u* i% M  _
}# s- f# m0 x4 y( x' z, s: |5 d

% ~& j. w/ e" Q0 ~% _6 }0 g  t) ^7 u
3 ^! g8 }. ^" F/ |2 s1 s. h

( I5 J" f/ a/ r! ]) a
# T! e1 M( N8 \8 r$ X+ S7 d
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了