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

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

admin 楼主

2019-6-12 15:24:50

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

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

x
Vuex 的用法详解1 l5 ^7 s, H& ]  A3 v0 F7 i, t3 V

* B+ R( {) m! e4 q( \! b本案例测试下Vuex的使用,创建一个新的web项目* O& q3 F0 a/ u  N6 {. ^
Vue init webpack web
  H: V5 q% z6 P安装vuex+ d, _5 ?' I1 g: P. Z
npm install vuex --save+ F7 P. H$ R* o" u+ Z/ [% Z# e
启动, npm run dev,打开localhost:8080  即可/ u. W- A% t' A! b2 o$ w

4 M+ J, h/ T  X/ B0 N
$ _! e: e. z3 n4 ?(1)引入vuex
  [& D, L3 _- H8 f& v创建一个src/store文件夹,创建index.js , 引入并导出store
# d/ C* u' E  H( ?4 Z' Zimport Vue from 'vue'0 G+ _; f- H1 c+ c' @2 R
import Vuex from 'vuex'6 Q  [1 {/ `" u- }4 v$ H- C7 f
Vue.use(Vuex);
) v2 ~$ I2 C0 b6 dconst store = new Vuex.Store({8 U- V! D1 D: t) ^8 C8 X
})
) m- \+ i+ y: x# ]. jexport default store;
9 V% T* N+ o) O) q6 Z- {' ^1 W6 k! H; j' f1 ]& x8 R
(2)引入store到main.js
. K; D7 U: k7 m2 x1 zimport Vue from 'vue'
& j$ g$ X& l9 }! C* F; oimport App from './App'/ x4 l, }9 V6 d  D
import store from './store'
4 B  P* N" |4 R+ |9 [( E, x
0 A% L5 j2 |% F7 ?3 `" o: yVue.config.productionTip = false5 g* Y+ q  t8 Q) c$ h. F$ C/ D  t

; h! G% o5 `, g; |* {# |$ J/* eslint-disable no-new */7 `$ Q  O; G3 n1 G
new Vue({
3 i# ~4 Y. O4 x: ?  el: '#app',0 |4 W8 M- u& c
  store,
! l5 n$ D/ _7 v  components: { App },
9 w& A: O* k, g0 c* q: D2 c  template: '<App/>', P: F, h4 D- v- G+ e
})8 V* |( k6 |" k2 F9 U4 K
4 v% F0 H" N$ e3 @3 [; f* R7 `
% P+ g. u  i. a
5 E; Y! E( H2 u4 |  [, Z+ S. L
(3) 修改 helloword.vue ,先使用state获取值进行测试
) R9 ~; v1 Z# `8 ]  S- }) zState: vuex中的数据源,我们需要保存的数据就保存在这里,可以在页面通过 this.$store.state来获取我们定义的数据;5 S5 d3 i- z, {, h8 c# H, s
const store = new Vuex.Store({
9 e9 J# ^/ z+ d, t# o' h# Z  state: {( H! v' L' B9 s$ g
      count:1
& B4 C' p: P0 ?# x5 d+ `( i1 H  }
) h# Y' q# F! @! l+ u})& T" w& R( a" s: l+ ]  O

- J8 i! k. Y3 x# w8 q: Phelloword.vue----, \# u* b& |, H$ M0 b; ^! d
<template>
- V& t6 z8 Y: n, R2 a; A, p3 b( a  <div class="hello">
$ s8 j& g* {  f8 {) j. I
6 t: l! l; @& Y" B3 J5 T    <h2>{{this.$store.state.count}}</h2>
. w* {' k* v! I( a5 R5 k* V4 t0 S! ]3 R
  </div>
. ^& [4 R7 K8 Q</template>
3 {  ~: w, d1 |: {8 i
3 D" Y6 l' \/ ?8 w4 s$ V) Z3 C; R; ^
) t7 Q) z3 ^0 k8 ]' a
显示结果为: 1 6 Z" J. w, N3 \# V/ Z2 v5 Q2 ]

2 u. o" t( u& r
; A6 a0 y, m; o9 R& T# Q
(4)Getter相当于vue中的computed计算属性,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算,这里我们可以通过定义vuex的Getter来获取,Getters 可以用于监听、state中的值的变化,返回计算后的结果,这里我们修改Hello World.vue文件如下:
+ Y. [# X: y, F5 \; a6 I' k- _4 z' w3 a- |6 J
const store = new Vuex.Store({
7 H$ v) L( D  K/ {1 ^& u, d  state: {
* x) S; J7 ?4 {      count:1, T" M5 ~1 Q' |3 u" J' z: H
  },) y! w( w3 [0 g/ v0 q
  getters:{3 o7 l/ q- G0 V3 P6 |( ^' }
      getStateCount:state=>{1 J6 ]( U3 V( p+ w6 o  @! [: R  ^, X! L: Q
          return state.count + 1;5 o) W4 J) H! U6 S( B! T
      }, h7 [# z; H$ m- J% I2 y
  }; J3 X( X, F( \( t
})( R) b" X4 K0 P( d

: U3 Z$ f* b! |<template>1 H' Z" v) I) R- c
  <div class="hello">8 x: W$ i! z; S5 d
, y- V2 R8 a: B/ z5 J
    <h2>StateValue: {{this.$store.state.count}}</h2>
7 C8 ?6 S& w# M$ J' n+ o     <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>
2 n: q5 c" o- F# u6 U$ R* n7 M  </div>% v5 q9 N& a3 L# H2 Z7 m
</template>% P* g* `4 N, P3 \0 {
' U$ O) E* ^: }: n/ T
9 S9 e* r1 m! w; X+ {+ ~
显示结果:
0 k* T9 D5 P) H; {+ _StateValue: 1GettesVaule: 2+ |! t8 H: R: J+ M: ?. m
# l$ A" T1 I0 n. w0 P7 y9 R
(5)
" ~" C2 q# u# c6 y# P

Mutations:

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


" B4 K% b5 p# {* h修改index.js文件,添加mutations,在mutations中定义两个函数,用来对count加1和减1,这里定义的两个方法就是上面commit提交的两个方法如下:- n' P) Q7 q' U
mutations:{& \) `3 w# ?* Z( X8 J( x8 ^9 C
      add(state){9 ]& V  Y, c) W7 c6 ]; x; N2 R8 X
         state.count = state.count + 1;/ _0 A$ I8 n* h0 m5 p' M' D
      },
- w" q( Z- U. a3 _5 I9 l, K& I1 p: r      reduce(state){
6 ^% |- v# {! ?: E5 b( H. i* j4 Q- A        state.count = state.count - 1;$ v$ s, q: j4 t2 N2 `6 N% f& w
    }4 P5 U* n4 \6 f; Z4 }2 t
  }
0 e' R1 m$ T8 M) G+ o! F7 \<template>
  r3 R  @" Z$ N4 h; U8 W  <div class="hello">' ~# l" d6 O3 B
    <h1>Actions:</h1>8 N; B2 A! `; E9 _% @+ `% G
    <el-button type="primary" @click="addFunc()">Add</el-button>( X8 l0 v- \6 {- L, S& X
    <el-button type="Secondary" @click="reduceFunc()">Reduce</el-button>  e" a! ]% X/ |+ X: l" _
    <h2>StateValue: {{this.$store.state.count}}</h2>( P. N% F/ L" F4 D" `3 D8 o
    <h2>GettesVaule: {{this.$store.getters.getStateCount}}</h2>3 {- u9 m7 h9 H2 y7 q* B: H$ Z* Q
  </div>
$ s( g1 h# N( [7 o: T</template>* m( N. z5 c" T# H# d. H6 v% F

4 R1 }1 V, e1 g

2 q- K$ }7 l8 {2 _结果:$ M& |! u+ D9 c2 I
0 E4 z5 d( y# R1 ^
( B4 F8 L1 G3 B3 L: h4 h
Actions:Add
ReduceStateValue: 5GettesVaule: 6
  U" J5 I5 ^4 ?& }, B+ a: Z4 t3 r$ ^" |, O: ?
9 M0 f  l8 _! s
. ]' t' X' o7 v

' [! G! {+ Z$ H. V
% |( l9 B- I, |- w5 e
8 H/ \$ d' n% f

# ?. B! H' Z" r3 F8 o! E3 P+ X  j5 U3 T
(6)Actions:
5 R" T! q; k7 `$ `" G9 k6 {

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


0 F% m6 x) v, c$ `


1 k7 \$ r( H, v* Q4 vmutations:{, N7 n2 [) x! \/ p7 B9 a
      add(state){
, I& Z) O0 B0 t5 \         state.count = state.count + 1;
0 H/ l9 M! o) F& {* L% Q. ]      },
( x' p& S6 O; H      reduce(state){" i' Q" q6 r0 L( C% c4 v7 |: h( X
        state.count = state.count - 1;
3 z0 J! }" D& t! {( f9 _    }0 k) U2 Q6 X8 ^5 y0 d/ j
  },7 ?  K, f$ m! Y/ f! o, F$ B
  actions:{
( |, X# m) H" M      addFunc(context){
$ t2 c2 a; Q+ H; |" ?" A          context.commit("add");- r: n1 x8 M) r. ?
      },
0 ]( m2 V/ L0 n/ p& V3 K      reduceFunc(context){
/ A' R; X# ]; p" v; [          context.commit("reduce");' x( t  L  _- M! n% z' H# ?
      }0 P+ g4 U* f* o( F; J% Y
  }! d- {! k$ k$ t/ ~# y

3 C  _; b# Y; H" N' k


8 ~5 t* j: O& S


  r. A/ A: Z5 @6 n5 M0 y+ y  methods:{( u  c& g0 p6 l* G! _9 B3 h
    addFunc(){( i% F  G: \3 \- w( n
      //this.$store.commit("add");
& o4 g/ T6 o" ~0 y$ {: w/ A      this.$store.dispaTCh("addFunc");" f* V) D! W* s0 U
    },& `0 r" `0 J& K6 ~
    reduceFunc(){
$ e' B9 n' ?  J6 ~: u# r) l3 M      //this.$store.commit("reduce");8 ?! Q+ d* f9 k6 E; y
       this.$store.dispatch("reduceFunc");
" j7 x5 R# C' T+ N    }* K1 O' t/ }8 }  g
  }

9 \( U. \( C3 {- C9 G$ }  J
; D4 s5 l- c# t( U' y9 I& C
这里我们把commit提交mutations修改为使用dispatch来提交actions;我们点击页面,效果是一样的
$ F0 e% T" w% B5 B8 W" j9 [7 y实现效果一样!!!!6 Z8 V2 [1 L4 L; Y* y. \! R' q

( p9 f: b* ^" d( x# i6 d7 T- Z3 X- Y3 r$ y% e; u
! r+ z3 {* m1 X% t' @
4 q- _! t1 {" n. m' |% H


% n0 V# I8 }# x- v" G

7 {; `9 ?5 S( \5 n  D; u- D7 i+ p

' c5 j$ R, C8 ^8 o0 M; T/ R! e

" J+ A! `2 E3 g$ i) [6 ]! z, }/ w: `  ^, V( ~3 {" R

% c7 a' g9 ]! D; \# x  P8 G5 L

8 y+ n5 w' |! T( U
+ m4 N* M  v" R
. ~; U) b* e: |/ Q, y' i# O" m# C# w6 D

- K  M4 \8 s0 q* t
. ]; W6 q; w3 M7 T
上海点团信息科技有限公司,承接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文件如下:


" N0 H, N& Y* U


* C9 v9 H$ l- Z: a9 a, r

+ J8 r. A7 r9 H: H

正常显示,效果是一样的,我们就可以不再使用很长的写法来调用了。
# B$ P9 e3 c2 s: |+ f# E
8 F  F. t$ B) i2 R- @/ t
import {mapState,mapGetters,mapMutations} from 'vuex';
+ ?6 x7 s5 y$ h3 d& d! S# h' l" Cexport default {, G9 ?9 }6 ~/ Z. e; z( ~
  name: 'HelloWorld',6 O) b/ w4 n* N' A4 P) F
  data () {& M+ r4 W( X4 y, B: s- I. n
    return {
/ R4 @# W- V$ F. _8 ~8 u      msg: 'Welcome to Your Vue.js App'6 J' D" i* |  I& X
    }
. }" w) k$ M* f- @  },
5 e( J& D! R# w+ E! `  computed:{
" G/ }! J8 B2 d2 _- R8 |, U    ...mapState({, I4 Q  \: L, t% `& z9 C$ a
      mapCount:state=>state.count* }8 p6 k: ]4 s* h1 u- Q8 q+ k0 u
    })* R) @* s8 @3 _( H' O
  },
* n% c, J1 t% H. F" J0 p* K  methods:{
4 e( j4 B7 e4 q  N0 l( d    addFunc(){2 }7 w- @. T. {
      //this.$store.commit("add");
& Y1 o( U4 w" @5 s& V      this.$store.dispatch("addFunc");0 i- J* ~. Y. j9 w, u; j1 x* d
    },
6 z$ q/ U  P: N5 ~, i7 h$ T' w    reduceFunc(){2 n  A& ^. r  l/ Q
      //this.$store.commit("reduce");
. i3 Y" t% {- |0 u       this.$store.dispatch("reduceFunc");
  O) u) _4 V, g  {    }: x! p2 Q# M9 f' w2 Y0 m7 \
  }
4 n3 d6 t, g. r7 g7 W; p$ ^}
' g- ^5 i& p) F" |) _- H, R0 R
- N6 E1 S4 c% q4 t2 c
4 d7 X1 [/ D0 }  _- S5 \6 O% L
$ U  J6 d0 |2 z) a

& n: m& N* d, Y) g+ K* n
上海点团信息科技有限公司,承接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二次开发专题模块培训报名开始啦

    我知道了