vue学习笔记

npm - 换淘宝源

Node 的模块管理器 npm 会一起安装好。由于 Node 的官方模块仓库网速太慢,模块仓库需要切换到阿里的源。
npm config set registry https://registry.npm.taobao.org/

执行下面的命令,确认是否切换成功。
npm config get registry

 

VUE组件说明:
1.全局组件:写在new Vue外面的组件
例:Vue.Component('标签名'),{
template:'要做成组件的HTML结构'
}
2.局部组件:写在new Vue内的组件
例:new Vue({
components:{
'组件名':{
template:'要做成组件的HTML结构'
}
}
})

组件说明:vue中的组件就是自定义标签
命名规范:驼峰命名法(coutSon)
烤串命名法(cou-son)

组件的通信:
1.父组件-->子组件
组件实例的作用域是孤立的,不能在子组件直接用父组件的数据;
处理办法:
可以在组件上使用自定义属性绑定数据,在组件中需要显式用props声明自定义属性名;
2.子组件-->父组件
处理办法:
需要用到自定义事件,父组件用$on监听自定义事件,$emit触发父组件所关心的自定义事件。

父组件-->子组件
例:
<con-son btn-value="玩"></con-son>
Vue.component('conSon'){
props:['btnValue'],//这里的名字不可以是烤串形式,必须是驼峰
template:'html结构'
}

props是专门绑定组件中自定义属性的;

子组件-->父组件
方法步骤:
1>创建一个变量val在父组件中,用于接收子组件的值;val='';
2>将val绑定到父组件要显示的input中
<input :value='val'/>
3>子组件的自定义标签中,添加自定义事件;
<list-cus @receive='selectValue'></list-cus>
4>子组件中的元素(li)加点击事件,并通过vue自带监听事件,监听并回调要传的值;
<li v-for='item in listDate' @click='changeVlaue(item)'></li>
methods:{
changeValue(item){
this.$emit('receive',item);
}
}
5>在父组件中的methods事件中写selectValue方法,方法中会传入value的值
methods:{
selectValue(value){
this.val=value;
//将最终得到的选项值赋给val显示到页面中
}
}
备注:$emit(str1,[str2])
str1:自定义事件名
str2:要传入的参数,可以是多个
触发当前实例上的事件,附加参数都会传给监听器回调;
这里的监听器可以理解为,子组件标签身上的自定义事件;


单向数据流
父组件向子组件传递数据,子组件不可以直接更改父组件的数据;
解决办法:
1>子组件可以通过自身组件中的data属性,来介接的改变父组件的数据;
2>也可以通过computed属性(计算属性)来改变父的数据;

props验证:
例:props:{
自定义属性名:{
type:Number,//设置类型 ---->>type:[String,Number]//类型也可以是多种
default:10,//设置默认值[可填]
required:true,//设置是否必填[可填]
}
}
自定义验证:
props:{
test(自定义属性名):{
validator:function(value){
retrun value>10;
//value,是test绑定对应的数据的值;
//return 验证规则,直接写retrun true验证直接通过;如果写规则逻辑就按逻辑走;
}
}
}

使用slot分发内容
使用一种方式混合组件内容与子组件自己的模版,这个过程称为"内容分发"。

什么时候使用slot:
当写在自定义标签之间的内容,要混合子组件中的模版,这时就需要slot;
例:
一.单项替换
<custom>
<div>我是插入内容</div>
</custom>

template:`
<div>
<slot>这里可以是默认显示的内容,插入内容会替换到这里</slot>
</div>
`
二.名字替换
slot也可以通过名字指定插入位置
如:<slot name="one"><p>要替换的标签</p></slot>
对应在父组件中写法:
<custom>
<div slot="one">替换p标签的内容</div>
</custom>

当组件中需要替换同一个slot多的内容,可以使用<template></template>标签。
例:
<template slot="one">
<div>内容1</div>
<div>内容2</div>
</template>

编译作用域:<slot>
父组件模版在父组件中编译;
子组件模版在子组件中编译;

封装组件:
组件的特点: 重用性、可定制性、高内聚性、互操作性!


使用组件,is的特殊属性:
当使用DOM作为模版时,会遇到由于W3C结构标准的限制,使用is属性可以将组件套用到任意标签中;
例:组件加到<table>标签中
<table>
<custom></custom>
</table>
这样的写法,页面加载 后,会将组件自动拿出table;
-------------------------------------------------------------
使用is的方法:
<table>
<tr is="custom"> </tr>
</table>
这样加载后,custom标签会替换到tr标签的位置。

组件运行顺序:
页面加载会先加载组件的自定义标签,然后再运行VUE中的template里的html结构,最后再自定义标签(组件)中。

组件中的data说明:
组件中的data这个属性,用来放数据用的,data必须是一个函数,因为只有函数形式,每个组件的数据相互不会影响,如果是对象形式,组件之间都使用同一个对象数据,会相互影响;

如上所说写法:
data:function(){
return {这里写正式的数据}
}//在函数中,return一个对象,这样就不会相互影响了

 

实战项目说明
VUE-Cli 脚手架
是VUE的一个工具;
作用:
1.生成目录结构;
2.完成本地开发调试;
3.在代码编写完后,对代码进行压缩和部署;
4.利用脚手架的热加载特性,搞代码效率;
5.使用单元测试,测试代码功能;
安装方法:
1.node 4版本以上,npm在3版本以上
2.先创建一个放vue-cli的文件夹(就是放VUE的项目文件)
3.安装指令:npm install -g vue-cli
4.检查是否安装成功:vue -V(V必须是大写)
5.下载模版:vue init webpack vue-example
说明:vue-example,是模版文件名,随便起的;前面的指令为指定命令;
6.下载过程中的设置说明:
a.? Project name vue-example :确认项目名是否为vue-example,直接回车;
b.?project descript(A Vue.js project):对vue项目的描述,可以自己随便改写描述,写完后,直接回车;
c.?Author(WYseven<consoloelog@126.com>):作者名,可以自己改,改后,直接回车;
d.?Vue build(Use arrow keys):显示一些信息,直接回车;
e.?Install vue-router?(Y/n):是否加载vue-roter,输入Y是加载,然后回车;
f.?Use ESLint to lint your code?(Y/n):是否检查代码风格,输入Y,回车;
g.?Pick an ESLint preset:显示检查代码的一些信息,直接回车;
h.?Setup unit tests with Karma+Mocha?(Y/n):是否要对代码进行测试,输入n,回车;
i.?Setup e2e tests with Nightwatch?(Y/n) :是否要e2e,输入n,回车;

以上都输入后,会显示需要输入的一些命令:
cd Vue-example
npm install
npm run dev

按照上面提示的命令,在Vue-example目录下输入相应命令即可;

其中npm run dev 为启动项目,会在浏览器中自动打开项目页面,http://localhost:8080/#/ 显示一个这样链接的页面,即为项目创建成功;

项目文件目录说明:
一级文件目录说明:
1.buil:webpack相关文件;
2.config:生产环境和开发环境的配置参数;
3.node_modules:第三方依赖;
4.src:项目源码文件,vue后缀的文件为,单文件组件
,这个文件里的代码,会被webpack进行处理;
5.static:放置第三方资源,其中有.gitkeep,需要上传空白文件夹时,需要在文件后缀写.gitkeep
6..babelrc:配置浏览器不支持的ES6新语法的转换;
1)presets:预设,语法放转换的插件;
如:env是ES6转换成ES5的插件;
stage-2 草案阶段;
2)plugins:配置方法转换插件;
如:transform-runtime:ES6方法转换成ES5方法;
3)comment:转换后代码上是否增加注释,flase为不增加;
4)env:test使用测试的时候使用的;
7..editorconfig:配置编辑器的格式风格等;
如:文件编码;
8..eslintignore:代码检查时,设置需要忽略的文件;
默认忽略:build/*.js config/*.js
9.eslintrc.js:代码风格检查;
10..gitgnore:使用git提交项目时,忽略指定文件和文件夹;
11..postcssrc.js:设置css的一些规则;
12.index.html:项目运行的模版
13.package.json:项目的一些配置;
14.README.md:对项目的使用说明;


vue-router
什么是前端路由:
在web开发中,路由是指根据url分配到对应的处理程序。
作用:
通过管理url,实现url和组件的对应和通过url进行组件之间的切换。

单页应用
加载单个HTML页面,并在用户与应用程序交互时动态更新该页面;

使用vue-router方法:
安装模块:
npm install vue-router --save
引入模块:
import VueRouter form 'vue-router'
作为Vue的插件
Vue.use(VueRouter)
创建路由实例对象
new VueRouter({--配置参数})
注入Vue选项参数
new Vue({router})
告诉路由渲染的位置
<router-view></router-view>

路由配置与创建的代码,都放到src下的router文件中,便于查找;

 

vue-router:中的hash模式与history模式
语法:mode:'history',
注:一般都是使用history模式,history模式适用于高版本;

history模式不支持IE8

history模式的好处:
使用history模式,跳转后的页面链接,会自动保存到浏览器中,可以使用浏览器自带的前进后退功能,回到之前打开过的页面;

<!--
router-view 是要渲染的内容,如果要给每个内容设置同样的样式,可以直接在渲染的路由标签上添加样式
-->
<router-view class="center"></router-view>

注:如果在单组件元素中,设置的class名,是不会被router-view中的替换,会追加;


router-link:各种配置项
页面渲染结果:
默认router-link会渲染成a标签;

使用tag属性:tag="要生成的标签名",页面会生成指定的标签;并且不需要自己监听事件,vue-router都自动监听;

如:<li><i></i><span>home</span></li> 需要给li添加点击跳转链接,可以写成如下形式:
<router-link :to="{path:'/home'}" tag="li">
<i></i><span>home</span>
</router-link>


router-link中的to属性:相当于a标签中的href,此属性也可以动态绑定;
如:<router-link :to="index"></router-link>

new Vue({
  data(){
    index:'/home'
  }
});

to属性中可以传一个对象的形式:可以同时写很多个配置项
如:<router-link :to="{path:'/home'}"></router-link>

router-link点击时,router会自动添加一个叫router-link-active的样式名,当我们需要点击后,添加一定样式的时候,可以去给这个样式名上,添加样式;

这个自带的样式名router-link-active的class名太长,可以自定义设置;
设置方法:
方法一:在路由中设置
new VueRouter({
  linkActiveClass:'要设置的class名' //重置router-link点击后的class名称
})
方法二:直接在router-link标签上设置
<router-link active-class="要设置的class名"></router-link>


重定向和别名:
router-link默认是点击事件,如何修改默认事件行为:
在标签中使用event属性,写入事件名,即可修改;如下:
<router-link event="mouseover"></router-link>
这样就改成了,鼠标移入事件;

---哪里需要放哪里---


当遇到没有匹配到的路径时,如何处理:
new VueRouter({
  routes:[
  path:'*',//匹配除去指定路径的,其它的路径
  component: 要跳转的页面,如何给一个404提示页等。
  name:'404'//这里的name属性是打这个路由的名字,可以给对应的路由起一个名字,方法以后的查找;
  ]
});

路由路径重定向:
new VueRouter({
  routes:[
   {
    path:'*',
    redirect:'/home'//这里重定向的路径
    redirect:{path:'/home'}//也可以写成对象的形式
    redirect:{name:'home'}//这里的name代表的是路由的名字,直接指定这个名字的路由即可

    redirect:(to) =>{//动态设置重定向目标
    //to 目标路由对象,就是访问的路径的路由信息
    return '/home' //这里返回要打开的目标

   }
  }]
});


路由的别名使用方法:
new VueRouter({
routes:[
  {
    path:'/home',
    component:home,
    alias:'index' //使用这个属性设置别名

  }]
})

注:使用别名打开页面时,不会有选中效果,因为在router-link中匹配的是/home,而不是/index,这个问题在使用中需要注意。


根路径设置问题:
默认打开http://locallhost:8080 时,打开是空白页,没有渲染相关页面时,这就需要设置一个根路径;方法如下:
new VueRouter({
  routes:[
  {
    path:'/'//直接写/就代表根路径
    component:home
  }]
});
router-link 标签中的to路径也要改成'/';

按照以上方法写,页面打开,切换导航时,激活状态会出现混乱,home激活状态和其它按钮状态会重叠。
原因:默认根路径是一个全包含模式;
处理方法:
<router-link to='/' exact></router-link>
哪里是根路径,就加在哪里

<!--
router-link修改渲染标签说明:
当修改为非a标签时,不会把to中的路径带入到修改的标签中,
这时,可以在router-link标签中,嵌套一个不设置href的a标签,
页面加载后,会自动把to中的路径,放到a标签的href中;
-->
<router-link to="/about/study" tag="li">
<a>study</a>
</router-link>

嵌套路由的使用:

在路由对象中,配置子路由,写法如下:
new VueRouter({
  routes:[
  {
    path:'/about',
    component:about,
    children:[//这个属性用于配置子路由
  {
    path:'study',
    component:study
  }]
  }
]
});


关注点分离概念:
对应的路径,渲染对应的组件;

如何设置默认显示的子路由:
在子路由对应的,路由中,将path:中的值,设置为空'',即可


注意,如果路由中,有了子路由,就不要把name给父路由设置,直接设置子路由即可,否则浏览器会警告提示。


命名视图:
概念:就是对router-view标签起一个名字;
使用场景:当遇到同一个单页面组件里,需要出现两个或多个router-view时,就需要对标签命名了;
命名方法:
1> 通过name属性起名
<router-view name="slider"></router-view>

2>

new VueRouter({
  routes:[
  {
    path:'/document',
    components:{//组件属性写成对象形式
    default:document, //default为默认组件
    slider:slides
    //slider:写的是标签中的name值;
    //slides:写的是slides这个名字的.vue文件,需要引入到页面中
  }
  }]

});
注意:是在对应的路由中添加;


滚动行为:
浏览器滚动默认行为说明:当页面滚动到一定位置后,手动刷新浏览器,会发现页面依然在之前滚动位置,这是浏览器记录滚动位置的默认行为;

需求:点击浏览器的前进和后退的按照时,让打开的页面,保持在之前页面滚动的位置;

做法:

new VueRouter({
  scrollBehavior(to,from,savedPosition){//滚动行为,在点击浏览器的前进后退或切换导航时,触发
    //to:要进入的目标路由对象 (要去哪里)
    //from:离开的路由对象 (从哪里来)
    //savadPosition:记录当前滚动位置滚动条的坐标,点击前进后退时,坐标值 {x:0,y:0}
  }
});

动态路径
匹配到的所有路由,全都映射到同一个组件
// 动态路径参数 以冒号开头
{ path: '/user/:id', component: User }
路径:/user/:userId userId为动态路径参数
userId可以使用正则符表示
如:
匹配 /user/:userId 有userId和没有userId的都需要匹配上,可以写成:
path:/user/:userId? //这里的userId?表示有userId和无userId都能匹配

注:在路由path中,添加动态参数方法是 (:参数名),这里可以加多个;
如:user/:userId/:tip

获取参数:路由信息对象的params

如何拿到动态路由的信息?
created(){
//渲染这个组件会调用一次这个生命周期函数
//复用这个组件,这个函数不会再次被调用了
//地址一但发生变化 ,$route会重新生成一个路由信息对象
console.lo


g(this.$route)
}
对组件的注入

通过在VUE根实例的router配置传入router实例
$router router实例对象
$router 当前激活的路由信息对象,每个组件实例都会有;
beforeRouterEnter() 进入组件前钩子函数
beforeRouterLeave() 离开组件前钩子函数


如何监控路由发生的变化?
watch:{//在watch中监控路由
$route(){
//路由有变化,都会在这里监控到
//路径发生变化,$route会重新赋值,监控了这个属性,会执行这个函数
}
}


query查询字符串说明:
带查询参数的链接地址,称为:查询字符串
如:
//下面的结果为 /user?info=share
<router-link :to="{ path: '', query: { info: 'share' }}">分享</router-link>

链接地址为:/user?info=share
在切换router-link时,如何获取查询字符串中,info=share的share字符串?
通过路由信息对象中的query对象,用于URL查询参数的对象;


过渡动效:
router 提供了transition的封装组件,添加过渡动画
控制方法:会用CSS类名控制
使用方法:
将需要添加过渡效果的router-view包在transition标签中;如下 :
<transition>
<router-view></router-view>
</transition>

过渡模式:
in-out:新进行过渡,完成之后当前元素过渡离开
out-in:当前元素先进行过渡,完成之后新元素过渡进入
使用方法如下:
<transition mode="输入模式名">
<router-view></router-view>
</transition>

自定义运动效果:
自带的css类名,是以v-开头的,后面的不能改变,v-可以随意修改;
如下:
v-enter:进入过渡时要做的动画;
可以改成
left-enter:自定义的动画

自定义的css类名动画如何使用到transition组件中?
<transition mode="输入模式名" name="输入自定义动画的前缀名(left)">
<router-view></router-view>
</transition>

路由元信息:
在路由配置中meta可以配置一些数据,用在路由信息对象中,访问meta中的数据:$route.meta

路由meta的设置方法:(在路由对象中配置)
routes:[
  {
    path:'/',
    meta:{
    index:0;//路由的下标
    }
  }
]
如果路由中有子路由,就配置到默认的子路由中,不用配置到父路由中;

页面中获取方法:
$route.meta.index

通过监听$route,得到目标和离开导航的下标
watch:{
$route(to,from){
to.meta.index //目标导航下标
from.meta.index //离开导航下标
}
}

导航钩子函数:
beforeEach(to,form,next):导航切换之前执行的函数

全局钩子函数例子如下:
router.beforeEach((to,from,next)=>{ //只有切换导航就会执行 切换导航前执行的函数
console.log('beforeEach')
next();//是否继续下一个目标路由,flase是不执行,true是执行
next(false);
next('要执行的路径') //可以传一个路由的路径,要执行到哪个路径;
//使用场景,比如当进行指定路由时,需要先登陆才可以查看;
if(to.meta.login){//在指定路由中,先在meta:{login:true} 在meta中做一个标识。判断当login为true的时候,就进入到登陆路由页面
  //使用next('/login');
}else{
  next();//否则直接进入下一个路由
}

})

afterEach:导航切换后执行的函数

router.afterEach((to,from)=>{//切换导航后执行的函数
//通过判断显示对应路由的title信息
if(to.meta.title){
  window.document.title = to.meta.title;
}else{
  window.document.title ='我要学'
}
})

路由中写钩子函数:(routes中配置)
beforeEnter:切换前执行
使用方法与全局一样

组件中写钩子函数:
beforeRouteEnter(to,from,next):切换前执行
afterRouteLeave:切换后执行
beforeRouteUpdate:当导航中有二级导航时,切换二级导航会触发这个钩子
前两个使用方法与全局一样
beforeRouteEnter(to,from,next){
//注意这里面的this问题

}

在beforeRouteEnter中,当访问data数据中的数据时如何找到及处理办
法:
export default {
  data(){
    return {
      test:'测试数据'
    }
},
beforeCreat(){//组件创建的钩子
  //页面加载这个钩子后执行
},
beforeRouteEnter(to,from,next){//组件路由钩子

console.log(this);//这里打印的是undefined
//因为,加载页面时,先执行了beforeEnter的函数,后创建vue实例,所以this得到的是undefined
//解决办法
next((vm)=>{//next回调中,会传vue的实例过来
  console.log(vm.test);//通过这样就可以访问到vue实例中的数据
});
}
}

beforeRouteUpdate 使用方法
beforeRouteUpdate(to,from,next):使用方法与全局导航一样

afterRouteLeave 使用方法
afterRouteLeave(to,from,next):使用方法与全局导航一样

Vue插件的编写:
第一个种:
通过在vue的原型链上添加自定义属性($custom)
Vue.prototype.$custom = "这是自定义的属性"


-----------------------------------------------------------------------------------------
VueX
使用VueX
1.安装vuex模块
npm install vuex --save
2.作为插件使用
Vue.use(Vuex)
3.定义容器
new Vuex.Store({
这里面放定义状态代码
})
4.注入根实例
{store}

vuex代码,一般放在src/store/index.js文件中

如何在vuex中定义状态数据?
例:
//创建Vuex实例
let store = new Vuex.Store({
//这里定义状态数据
state: {
count: 100
}
});


vuex核心概念
store:类似容器,包含应用的大部分状态
* 一个页面只能有一个store
* 状态存储是响应式的
* 不能直接改变store中的状态,唯一途径显示地提交mutations

State:包含所有应用级别状态的对象

Getters:在组件内部获取store中状态的函数

Mutations:唯一修改状态的事件回调函数

Actions:包含异步操作、提交mutation改变状态

Modules:将store分割成不同的模块

 

如何获取定义的状态数据?
例:
在需要获取数据的单页面文件组件中,使用以下方法
html结构:
<template>
<div>
<h2>简易加法计算器</h2>
<div>
<input type="button" value="-"/>
<!--将获取到的vuex定义的状态数据,渲染到要显示的标签中-->
<span>{{num}}</span>
<input type="button" value="+"/>
</div>
</div>
</template>

<script>
export default {
  computed:{//在计算属性中取vuex定义的状态数据
    num(){
      //因为vue中已经注入了vuex的实例,并做为了插件,所以this.$store可以直接得到vuex的实例
      //this.$store.state 获取的是 vuex实例state中定义的状态数据
      return this.$store.state.count;
    }
  }
}
</script>

如何改变vuex容器中(store)如的值?

一.改变非异步(不通过ajax)的值
使用mutations属性,处理同步数据修改
例:
vuex对象中写:
mutations:{//专门用于处理state中状态数据的回调
//这里的回调函数自己根修改状态数据的逻辑,随意写
addIncrement(state){//自己写的函数都会传一个state,用于找到状态中对应的数据
state.count +=1;
},
delIncrement(state){
//关于状态数据修改逻辑类的代码,都在这里处理
if(state.count<=0){
state.count = 0;
}else{
state.count -=1;
}
}
}
在单页面文件组件中调用
methods:{
delHadler(){
//delHadler函数触发时,调用mutations中的回调函数。
//调用方法,需要使用$store下的commit方法,参数中传入mutations中的回调函数名
this.$store.commit("delIncrement");
},
addHadler(){
this.$store.commit("addIncrement");
}
}

注意:
mutations不能直接调用;
调用方法:
$store.commit("写mutations中的回调函数名");

这个方法,一个参数的时候,是直接调用mutations函数。
第二个参数,代表传入mutations函数的参数。
第二个参数,可以是1个,多个的时候,传一个对象;
如:
$store.commit("写mutations中的回调函数名",{n:2});
这样在mutations:中就可以接收了


commit的对象形式写法
$store.commit({
type:'写mutations中的回调函数名',
de:10 //这个就是第二个参数,key名随便起
})


二.改变异步(ajax获取)的值
使用actions:处理异步数据修改
//要先写好mutations的方法
mutations:{
  addIncrement(state){
    state.count +=1;
  }
},
/*
当遇到数据是通过ajax异步请求过来的,这时数据会有延迟
这种时候,就需要使用actions来提交mutations中的回调函数
*/
actions:{
//函数名随便写,参数是一个对象,和store对象的方法属性都一样的对象;
addAction(context){
    setTimeout(()=>{
      //通过context对象,可以使用commit方法,参数输入mutations中的函数名
      context.commit('addIncrement');
    },1000);
  }
}

调用actions中的函数,方法如下

dispatch传参的格式方法,与this.$store.commit()一模一样
this.$store.dispatch('addAction');

actions中的函数可以相互调用传值;
例:
actions:{
//函数名随便写,参数是一个对象,和store对象的方法属性都一样的对象;
addAction(context){
    setTimeout(()=>{
    //通过context对象,可以使用commit方法,参数输入mutations中的函数名
      context.commit('addIncrement');

    //这里调用了下面的函数
      context.dispatch('testAction',{test:'测试'});
    },1000);
},
testAction(context,obj){//传值正常传
  //可以打印出'测试的数据'
  console.log(obj.test);
  }
}


actions传值的另一种方法

actions:{
//函数名随便写,参数是一个对象,和store对象的方法属性都一样的对象;
/*
这个context参数,可以使用es6的结构赋值方法写
直接传一个对象形式{commit,dispatch} 把需要的方法直接写到里面,不用传context去调用对应的方法
这样写更方便。
es6的结构赋值:把一个对象里面的属性,直接放到对象中;
*/
addAction({commit,dispatch}){
    setTimeout(()=>{
      //通过context对象,可以使用commit方法,参数输入mutations中的函数名
      commit('addIncrement');
      dispatch('testAction',{test:'测试'});
     },1000);
},
testAction(context,obj){
  console.log(obj.test);
  }
}


getter计算状态
作用:关于状态数据中,一些对数据的处理(判断/过滤)等,都在getter属性中处理。
写法:在vuex对象中写

getters:{
  filterCount(state){//state就是状态对象
    //在这里做count的判断
    return state.count >= 120 ? 120 : state.count;
  }
}

调用方法:
computed:{//在计算属性中取vuex定义的状态数据
    //getter的调用方法,就是在计算属性中,另定义一个函数,在这个函数中调用getter中判断过的值
  num2(){
    //$store中有getters属性,可以获取getter中的filterCount的值
    return this.$store.getters.filterCount;
  }
}

HTML显示方法:
<template>
<div>
<h2>简易加法计算器</h2>
<div>
<input type="button" value="-" @click="delHadler"/>
<!--将获取到的vuex定义的状态数据,渲染到要显示的标签中-->
<span>{{num}}</span>
<input type="button" value="+" @click="addHadler"/>
<!--当状态通过getter属性判断后,哪里需要显示判断后的数据,就放在哪里
如下,p标签需要显示,就放num2
-->
<p>{{num2}}</p>
</div>
</div>
</template>

说明:结构中num与num2,显示的方式就分开了。

Vuex辅助函数
mapState:
当一个组件需要获取多个状态时候,将这些状态都声明为计算属性会有些重复和冗余。为了解决这个问题,我们可以使用 mapState 辅助函数帮助我们生成计算属性。

mapGetters:
辅助函数仅仅是将 store 中的 getter 映射到局部计算属性


mapMutations:
将 store 中的 mutations 映射到局部计算属性
mapActions:
将 store 中的 actions 映射到局部计算属性

转载于:https://www.cnblogs.com/nemoDuoo/p/7678141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值