vue之我不会 计算属性 vuex 路由 插槽

一、计算属性

定义:
例子:

注意:调用计算属性时,不可以带括号,那样调用的就是方法,如:以下调用fullName不可funnName()

		<div id="root">姓:<input type="text" v-model="firstName"> <br/><br/>名:<input type="text" v-model="lastName"> <br/><br/>测试:<input type="text" v-model="x"> <br/><br/>全名:<span>{{fullName}}</span> <br/><br/><!-- 全名:<span>{{fullName}}</span> <br/><br/>  //在调用fullName就是从内存里面取了全名:<span>{{fullName}}</span> <br/><br/>全名:<span>{{fullName}}</span> --></div>data:{firstName:'张',lastName:'三',x:'你好'}computed:{fullName:{//get有什么作用?当有人读取fullName时,get就会被调用,且返回值就作为fullName的值//get什么时候调用?1.初次读取fullName时。2.所依赖的数据发生变化时。get(){console.log('get被调用了')// console.log(this) //此处的this是vmreturn this.firstName + '-' + this.lastName},//set什么时候调用? 当fullName被修改时。set(value){console.log('set',value)const arr = value.split('-')this.firstName = arr[0]this.lastName = arr[1]}}}

简写:
在这里插入图片描述

二、vueX

1.安装

vue默认vue3版本,vuex默认vuex4版本,vuex4只能在vue3中使用,在vue2中能使用vuex3,那么不能默认下载最新的版本
如果你出现了版本的问题只需要 npm install vuex@3 --save 重新安装对应版本就好的

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)const store = new Vuex.Store({state: {token: ''},mutations: {updateToken (state, newToken) {state.token = newToken}}
})
export default store

2.在main.js中

import store from '@/store'
new Vue({router,store,  //<<<<<<--------这里render: h => h(App)
}).$mount('#app')

3.src/store/index.js
注意大写

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({state: {count: 123},getters: {},mutations: {addCount (state,count) {state.count += count}},actions: {},modules: {}
})

2.Store => state

2.1获取 store仓库:

 1.Vue模板中获取 this.$store2.js文件中获取 import 导入 store

2.2获取状态state数据:

模板中:     {{ $store.state.xxx }}
组件逻辑中:  this.$store.state.xxx
JS模块中:   store.state.xxx
 computed: {token(){return this.$store.state.count}}

每次都像这样一个个的提供计算属性, 太麻烦了,我们有没有简单的语法帮我们获取state中的值呢?

2.2通过辅助函数mapState 获取数据

  1. 第一步:导入mapState (mapState是vuex中的一个函数)
import { mapState } from 'vuex'
  1. 第二步:采用数组形式引入state属性
mapState(['count']) 

前两部代码类似于

count () {return this.$store.state.count
}
  1. 第三步:利用展开运算符将导出的状态映射给计算属性
  computed: {...mapState(['count'])}

3.Store=>mutations

mutations是一个对象,对象中存放修改state的方法

3.1组件中提交

handle ( ) {this.$store.commit('addCount', 10)
}

小tips: 提交的参数只能是一个, 如果有多个参数要传, 可以传递一个对象

this.$store.commit('addCount', {count: 10
})

3.2通过辅助函数 mapMutations提交

import  { mapMutations } from 'vuex'
methods: {...mapMutations(['addCount'])
}

上面代码的含义是将mutations的方法导入了methods中,和参没关系,等价于

methods: {// commit(方法名, 载荷参数)addCount () {this.$store.commit('addCount')}}

3.3调用

<button @click="addCount">+1</button>

4. Store=>actions

actions则负责进行异步操作
如: 一秒钟之后, 要给一个数 去修改state

4.1 定义actions

mutations: {changeCount (state, newCount) {state.count = newCount}
}
actions: {setAsyncCount (context, num) {// 一秒后, 给一个数, 去修改 numsetTimeout(() => {context.commit('changeCount', num)}, 1000)}
},

4.2 组件中通过dispatch调用

setAsyncCount () {this.$store.dispatch('setAsyncCount', 666)
}

在这里插入图片描述

4.3辅助函数 -mapActions

import { mapActions } from 'vuex'
methods: {...mapActions(['changeCountAction'])
}

上面代码的含义是将actions的方法导入了methods中,等价于

methods: {changeCountAction (n) {this.$store.dispatch('changeCountAction', n)},
}

4.4调用

<button @click="changeCountAction(200)">+异步</button>

5.Store=>getters

除了state之外,有时我们还需要从state中筛选出符合条件的一些数据,这些数据是依赖state的,此时会用到getters
例如,state中定义了list,为1-10的数组

state: {list: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}

组件中,需要显示所有大于5的数据,正常的方式,是需要list在组件中进行再一步的处理,但是getters可以帮助我们实现它

5.1定义getters

  getters: {// getters函数的第一个参数是 state// 必须要有返回值filterList:  state =>  state.list.filter(item => item > 5)}

5.2原始方式-$store

<div>{{ $store.getters.filterList }}</div>

5.3辅助函数 - mapGetters

computed: {...mapGetters(['filterList'])
}

5.4调用

 <div>{{ filterList }}</div>

6.小结

在这里插入图片描述

三、路由

1.引入

import router from './router/index'
...
new Vue({render: h => h(App),router
}).$mount('#app')
import Vue from 'vue'
import VueRouter from 'vue-router'Vue.use(VueRouter)const routes = [{path: '/',redirect: '/home'}, //重定向,默认打开是/然后跳转到 /home{ path: '/home',name: 'Home',component:() => import('../views/home.vue')},{ path: '*', component: () => import('@/views/error/error') } //放到最后
]const router = new VueRouter({mode:'history',  //  默认是hash history常用 会把路径中的#消除routes
})export default router

2.重定向

{ path: 匹配路径, redirect: 重定向到的路径 },
比如:
{ path:'/' ,redirect:'/home' }

3.404

routes: [...{ path: '*', component: NotFind } //最后一个]

4.Vue路由-模式设置

路由的路径看起来不自然, 有#,能否切成真正路径形式?

  • hash路由(默认) 例如: http://localhost:8080/#/home
  • history路由(常用) 例如: http://localhost:8080/home (以后上线需要服务器端支持,开发环境webpack给规避掉了history模式的问题)
const router = new VueRouter({mode:'histroy', //默认是hashroutes:[]
})

5.两种路由跳转方式

  • path 路径跳转 (简易方便)
  • name 命名路由跳转 (适合 path 路径长的场景)

5.1path路径跳转语法

简易方便

//简单写法
this.$router.push('路由路径')//完整写法
this.$router.push({path: '路由路径'
})

5.2path跳转方式

特点:适合 path 路径长的场景

{ name: '路由名', path: '/path/xxx', component: XXX }
跳转
this.$router.push({name: '路由名'
})

6.两种传参方式

① path 路径跳转传参

② name 命名路由跳转传参

6.1path路径跳转传参(query传参)

//简单写法
this.$router.push('/路径?参数名1=参数值1&参数2=参数值2')
//完整写法
this.$router.push({path: '/路径',query: {参数名1: '参数值1',参数名2: '参数值2'}
})

接受参数的方式依然是:$route.query.参数名

6.2path路径跳转传参(动态路由传参)

//简单写法
this.$router.push('/路径/参数值')
//完整写法
this.$router.push({path: '/路径/参数值'
})

接受参数的方式依然是:$route.params.参数值
注意: path不能配合params使用

7.嵌套(多级)路由

在一级路由下,配置children属性

const router = new VueRouter({routes: [{path: '/parent',component: Parent,-----------------------------------------------------| |   children:[|    //children中的配置项 跟一级路由中的配置项一模一样 |    {	path: 'son1',component: xxxx.vue },|    {	path: 'son2',component: xxxx.vue }|  ]|-----------------------------------------------------}]
})

注意:二级路由,或者说是子路由,路径不要 / 如上面的 son1、son2
上面的路由路径是:
/parent/son1
/parent/son2

四、插槽 官网讲的比较好

黑马的视频 作用域插槽讲的也不错

该页面假设你已经阅读过了组件基础。如果你还对组件不太了解,推荐你先阅读它。

在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和
slot-scope(elementUI中目前还在使用) 这两个目前已被废弃但未被移除且仍在文档中的 attribute。新语法的由来可查阅这份 RFC。

1.插槽内容

组件

<navigation-link url="/profile">Your Profile
</navigation-link>

插槽

<navigation-link><a v-bind:href="url" class="nav-link"><slot></slot></a>
<navigation-link>

最终渲染:当组件渲染的时候, 将会被替换为“Your Profile”

<navigation-link url="/profile"><a v-bind:href="url" class="nav-link">Your Profile</a>
<navigation-link>

2.后备内容

组件没有向插槽传递数据是,插槽有个默认的(后备的),不至于组件不会像插槽传数据

<solt>嘿嘿嘿,就知道你会不传递数据给我,这就是我的后备内容<slot>

3.具名插槽

就是有名字的插槽
上面使用插槽只使用了一个<slot><slot>所以不需要指定名称
而接下来的插槽是多个<slot><slot>标签, 并且为<slot>标签起名字<slot name="soltName">,如果不写默认名字为default,所以组件再向插槽传递数据时就要对号入座
组件在向插槽传递数据时,使用<template></template>标签包裹数据,在<template>标签中指定,要为那个插槽传递数据<template v-slot:soltName>向名为soltName插槽传递数据<template>
如果没有<template>标签包裹,那么会将组件标签中的所有数据,都会传递给名为defalut的插槽或者没命名的插槽

例子:
插槽:

<div class="container"><header><slot name="header"></slot></header><main><slot></slot></main><footer><slot name="footer"></slot></footer>
</div>

组件:

<base-layout><template v-slot:header><h1>Here might be a page title</h1></template><p>A paragraph for the main content.</p><p>And another one.</p>**上面两行等价于**<template v-slot:default><p>A paragraph for the main content.</p><p>And another one.</p></template><template v-slot:footer><p>Here's some contact info</p></template>
</base-layout>

渲染:

<div class="container"><header><h1>Here might be a page title</h1></header><main><p>A paragraph for the main content.</p><p>And another one.</p></main><footer><p>Here's some contact info</p></footer>
</div>

4.作用域插槽

自 2.6.0 起有所更新。已废弃的使用 slot-scope(目前Element UI还有用到)
作用域插槽:定义插槽的同时,是可以传递数据的,给插槽上可以绑定数据
比如:组件(父)给插槽(子)传递的是<button><button>标签,现在button需要用到父组件中的数据id,这可怎么办,所以在传递时将<button>和id一起传递给插槽(或者理解为:将<button>传递给插槽,将id传递给<button>),这就是作用域插槽,组件(父)中的数据在插槽(子)中被使用,id的作用域发生了变化,所以叫作用域插槽。
场景(下图): 4.5.6是使用作用域插槽的步骤
1.父传子表格中的数据
2.利用默认插槽定制操作列
3.操作列再删除时,需要用到当前项的id(属于组件内部数据)
在这里插入图片描述
4. 向删除(插槽)绑定组件中的数据,数据以添加属性的方式传递

<slot :id="item.id" msg="测试文本"></slot>

5. 所有添加的属性,都会被收集到一个对象中,在组件使用时进行接收

{id: 3,msg: "测试文本"}

6. 在template,通过#插槽名=“obj”(v-slot:插槽名=“obj”)接收,默认插槽名为default,obj是任意起个名字,接收数据以属性的方式传递过来的数据对象(第五点中的数据)

<MyTable><template #default="obj"> 这里的obj父组件中传递过来的数据对象,类似第5点中的数据<button @click="del(obj.id)">删除</button></template>
</Mytable>

4.5.6是使用作用域插槽的步骤

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1539254.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

化妆风格识别系统源码分享

化妆风格识别检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

[2025]基于微信小程序慢性呼吸系统疾病的健康管理(源码+文档+解答)

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

新手学习python第九天——加速学习

大家周末好&#xff0c;今天是周六北京时间07&#xff1a;50达到实验室&#xff0c;刚刚复习完昨天的内容&#xff0c;今天感冒有所好转&#xff0c;下午课题组有聚餐还是开心的&#xff0c;但今天的学习内容也不要落下。 ————08&#xff1a;24————开始学习———— 1…

SpringCloud微服务实现服务降级的最佳实践

Spring Cloud是一种用于快速构建分布式系统的框架&#xff0c;它提供了许多有用的功能&#xff0c;其中包括服务降级。 服务降级是一种保护机制&#xff0c;它可以在面临高并发或故障时保持服务的稳定性。当系统资源不足或服务出现故障时&#xff0c;服务降级可以通过关闭一些功…

为什么AI在广告投放上受追捧,创意上却饱受非议

AI代表着人类科技的未来&#xff0c;这已经是营销圈的共识&#xff0c;从网络上各个机构的解读来看&#xff0c;AI的奇点似乎正在临近。 AI人工智能对人类社会的震撼有两次标志性的事件&#xff1a;一次是AlphaGo战胜李世石&#xff0c; 我相信大多数人了解人工智能的开始&…

为什么是华为最先做出三折叠?这些黑科技硬核门槛缺一不可

一款起售价19999的手机&#xff0c;预约人数竟达到了600万&#xff0c;全球首款三折叠手机Mate XT到底有什么魔力&#xff0c;可以做到还未上市就引爆市场&#xff1f;看完这篇文章&#xff0c;你就知道何谓“科技新物种”。 9月7日12:08&#xff0c;华为Mate XT非凡大师开启预…

技术贴:电脑端企业微信双开教程!

软件双开的实现&#xff0c;很多小伙伴用的都是修改注册表的方式&#xff0c;这里我再介绍一个办法&#xff1a; 电脑桌面先新建一个 txt 文档&#xff0c;将下方命令全部复制&#xff0c;粘贴在 txt 文件中。 reg add HKEY_CURRENT_USER\Software\Tencent\WXWork /v multi_i…

C++第十二节课 模板初阶和string引入

一、函数模板 我们不需要写具体的函数&#xff0c;而是写这个函数的模板&#xff0c;编译器会根据模板生成对应的函数&#xff1b; template<typename T> template<class T> 两者的作用是等效的&#xff01; 用模板完成的功能有时候也叫泛型编程&#xff1b; …

【分立元件】案例:新人加了个TVS管为什么可能导致系统不能正常工作

因为最近在带多个新人,让其设计原理图和PCB总会发现各种电路问题点。比如TVS管接法问题。 TVS是一种限压型的过压保护器,它将过高的电压钳制至一个安全范围,藉以保护后面的电路,有着比其它保护元件更快的反应时间,这使TVS可用在防护lighting、switching、ESD等快速破坏性瞬…

JAVA虚拟机----JVM

(一)认识JVM JVM 是 Java Virtual Machine 的简称&#xff0c;意为 Java虚拟机。 虚拟机是指通过软件模拟的具有完整硬件功能的、运⾏在⼀个完全隔离的环境中的完整计算机系统。 常⻅的虚拟机&#xff1a;JVM、VMwave、Virtual Box。 &#xff08;二&#xff09;JVM运…

Linux进阶命令-重定向

作者介绍&#xff1a;简历上没有一个精通的运维工程师。希望大家多多关注作者&#xff0c;下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 经过上一章Linux日志的讲解&#xff0c;我们对Linux系统自带的日志服务已经有了一些了解。我们接下来将讲解一些进阶命令&am…

5、PointNeXt

5、PointNeXt PointNeXt论文&#xff1a;PointNeXt 关于PointNeXt实际上仅仅是在PointNet的基础上做了一些改进&#xff0c;从它的全称就可以看出&#xff0c;Revisiting PointNet with Improved Training and Scaling Strategies&#xff0c;在PointNet的基础上&#xff0c;引…

前端常用的主流框架有哪些

前端开发中&#xff0c;有几个主流框架非常受欢迎&#xff0c;它们为开发者提供了丰富的功能和高效的开发体验。以下是一些当前最常用的前端主流框架&#xff1a; React&#xff1a; React 是由 Facebook 开发的一个用于构建用户界面的 JavaScript 库。它鼓励使用组件化的开发模…

O1-preview:智能预测与预取驱动的性能优化处理器设计OPEN AI

# 创作不易&#xff0c;您的打赏、关注、点赞、收藏和转发是我坚持下去的动力&#xff01; O1-preview 是一种用于性能优化的处理器设计原理&#xff0c;主要通过智能预测和数据预取来提升处理器的执行效率。以下是对 O1-preview 原理的详细介绍&#xff0c;以及它相对于以往的…

微波无源器件 功分器 4 一种用于天线阵列的紧凑宽带四路双极化波导功分器

摘要&#xff1a; 一种新型紧凑和高效率&#xff0c;在一个同相2x4方案(四路)显示双极化的功分器的设计和仿真被提出了&#xff0c;两个基本的正交模式TE10和TE01在四个方波导处同相输出通过使用四个3端口个四个E面和两个H面功分结构。此功分末端接了两个商用波导(WR75)端口&am…

插入排序详解

思路 把后面的值&#xff08;temp&#xff09;与前面的值&#xff08;end&#xff09;做对比&#xff0c; 若temp位置的值小于end位置的值&#xff0c; end位置的值给end1位置。。 语言难以描述&#xff0c;请大家看下图。 代码 void InsertSort(int *arr, int n) {/*为了…

django开发流程

一、官方网站&#xff1a; Django documentation | Django documentation | Djangohttps://docs.djangoproject.com/en/5.1/ 1.安装 django : pip install django 2. django项目的配置文件 (settings.py) BASE_DIR 项目根路径 DEBUG 调试模式 INSTALLE…

旷视轻量化网络shufflenet算法解读

目录 预备知识 1. 回顾MobileNet V1的核心思想---深度可分离卷积 2.ShuffleNet主要有两个创新点 2.1 分组卷积与11分组卷积 2.2 channel Shuffle&#xff08;通道重排&#xff09; 2.3 通道重排过程 3. ShuffleNet网络结构 3.1 ShuffleNet unit 3.2 不同分组数的Shu…

AlexNet项目图片分类通用模型代码

目录 一&#xff1a;建立AlexNet模型&#xff08;在model文件中写&#xff09; 1.构造5层卷积层 2.构造3层神经网络层 3.forward函数 4.模型最终代码 二&#xff1a;训练数据&#xff08;在train中写&#xff09; 1.读出数据 2.训练 3. 测试模型更新参数 4.完整的训练…

问题——IMX6UL的uboot无法ping主机或Ubuntu

主要描述可能的方向&#xff0c;不涉具体过程&#xff0c;详细操作可以查阅网上相关教程 跟随正点原子教程测试以太网端口时&#xff0c;即便按照步骤多次尝试也无法ping通&#xff0c;后补充了些许网络工程基础知识解决了这个问题。 uboot无法ping主机或Ubuntu有多种可能&…