vue知识-07

ref

# 放在组件上:

        this.$refs.名字  ---组件对象.组件对象.属性
# 在vue项目中使用: 

// 写在组件上
<HelloWorld ref="my_hello_world"></HelloWorld>handleClick() {console.log(this.$refs)this.$refs.my_hello_world.name  # 获取子组件中的name属性this.$refs.my_hello_world.showName()# 调用子组件中得方法this.name = this.$refs.my_hello_world.returnName()# 调用子组件中得方法取得返回值}

# 2 this.$parent     --拿到父组件对象

限制类型props

 # 数组形式:  props:['自定义属性的名字','自定义属性的名字1']
                         props: ['msg']    没有限制类型

# 对象形式,限制类型:

 props:{自定义属性名字:{type:String}}

# 对象形式,限制类型,默认值,必填:

  props: {msg: {type: String, //类型required: true, //必要性default: '老王' //默认值}}, 

混入mixin

# 定义:可以把多个组件共用的配置提取成一个混入对象

# 作用:以后再可以在组件中写 data,methods,新的不会影响,如果跟混入一样的会使用
# 列如:记录用户查看每个页面所用时间(停留)
    全局每个页面都要写东西:
        beforeCreate:启动一个定时器,每隔1s向后端发送一次请求
        destroyd:中销毁定时器

# 补充:定时器和延时器:
setTimeout( ()=>{console.log('延时器,3s后执行')
},3000)setInterval(()=>{console.log('每隔3s执行')
},3000)

# 多个组件公用的,抽取出来

        新建  mixin/index.js : data,methods,watch....

export default {data() {return {name: '彭于晏'}},methods: {handleShowName() {alert(this.name)}},}

#  两种方式使用:
        局部使用:配置项:mixins:[写多个]
        全局使用:Vue.mixin(混入对象)        

 import mixin from "@/mixin";// 局部使用export default {name: 'HomeView',mixins: [mixin],}
// 使用全局混入  main.js
import mixin from '@/mixin'
Vue.mixin(mixin)

插件plugins

# 作用:插件是用于增强Vue的
# 本质:install 的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据

#第三方 vue的插件:
    vue-router
    vuex (store)
    elementui
# 补充:

# python 中和js中往类中放属性:
class Person:pass
Person.name='lqz'
p=Person()
print(p.name)
//js中
new Vue()  # Vue类
Vue.prototype.$name='lqz' # 往类中加属性,跟python有些区别
# this.$router # this代指Vue实例
this.$name    # 从对象中取

# 自定义插件:
 plugins/index.js里写入代码

// cnpm install -g axios
import axios from 'axios'        
export default {install(Vue) {console.log('######' + Vue)//1、设置全局变量--以后可以把axios做成全局,每个组件都直接使用this.$httpVue.prototype.$http = axios//2、设置全局函数--->以后任意组件中  this.$add(2,3)Vue.prototype.$add = (a, b) => {return a + b + 100}//3、使用混入Vue.mixin({data(){return {name:'lqz'}},methods:{showName(){alert(this.name)}}})// 4、定义指令  v-for 内置指令,指令是可以自定义的   v-lqz// 5、定义全局组件---elementui做的--<el-button></el-button>}}

# 使用插件main.js

// 导入插件,使用
import plugin from '@/plugins' 
Vue.use(plugin)

# 第三方插件的使用:
  * vue-router:
        Vue.use(VueRouter)
                以后在组件中this.$router 就拿到的是VueRouter 对象
                以后在组件中 能拿到 this.$route  
                全局组件:  <router-view/>        
   * elementui:
        Vue.use(Elementui)
                全局组件: <el-button></el-button>
                全局变量:this.$message()

插槽使用

# 背景:一般编写完1个组件之后组件的内容都是写死的,加数据需去组件中修改,扩展性差
# 作用:  1、一般在组件<Child>  </Child>中插入<div>或者其他是没有效果的

                2、组件中添加<slot></slot>,就可以在的组件标签中添加内容

# 匿名插槽:

    <template>   // 子组件中<div class="hello"><button @click="handleClick">组件--点我看控制台</button><div><slot></slot></div></template><HelloWorld>  // 父组件中<img src="../assets/img/1.png" alt="" width="200px" height="300px"></HelloWorld>

# 具名插槽:

    <template>   // 子组件中<div class="hello"><button @click="handleClick">组件--点我看控制台</button><div><slot name='lqz'></slot></div></template><HelloWorld>  // 父组件中<img src="../assets/img/1.png" alt="" width="200px" height="300px" slot='lqz'></HelloWorld>

vuex插件

# 背景:在Vue中实现集中式状态管理的一个Vue插件,对vue应用中多个组件的共享状态进行集中式的管理,也是一种组件间通信的方式,且适用于任意组件间通信

# 组件间通信:
            自定义属性、自定义事件
   ref属性:this.$refs.名字 拿到组件对象
        父组件中:this.$refs.名字  拿到子组件对象
        子组件中:this.$parent     拿到父组件对象
   vuex实现组件间通信---不需要关注父子关系
    
# 简单使用:
 store/index.js--写代码

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({// index.js 的state中定义变量state: {count: 0},getters: {},mutations: {},actions: {},modules: {}
})

main.js中引入---任意组件中都会有 this.$store 

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'Vue.config.productionTip = falsenew Vue({router,store,render: h => h(App)
}).$mount('#app')

在任意组件中:取值,修改值

                任意组件都可以操作,操作的是同一个变量

js:this.$store.state.count
html中:{{$store.state.count}}

# 麻烦使用  ---》官方推荐的
    1、直接操作:不用
                    this.$store.state.count++
    2、通过actions:
                    this.$store.dispatch('addCountAction')
    3、 通过mutations:
                    this.$store.commit('addCountMutations')

vue-router路由

# 简介:官方提供的用来实现SPA 的vue 插件,有着页面跳转效果
# 配置:创建项目时没有安装vue-router

cnpm install -S vue-route

新建router/index.js:

import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'Vue.use(VueRouter)const routes = [{path: '/',name: 'home',component: HomeView},
]const router = new VueRouter({mode: 'history',base: process.env.BASE_URL,routes
})export default router

main.js中:

import router from './router'
new Vue({router,render: h => h(App)
}).$mount('#app')

# 以后再任意组件中,都有
            this.$router  # 路由对象,当时导出的
            this.$route   # 当前路由对象

        以后只要配置路由和页面组件的对应关系,在浏览器中访问地址即可
# 在App.vue中:

<template><div id="app"><router-view/></div>
</template>

# 路由跳转

//通过js跳转
this.$router.push('/about')
//通过组件跳转
<router-link to="/about">
//任意标签
</router-link>

# 路由跳转高级--传对象:

<template><div class="home"><h1>vue-router</h1><button @click="handleChange">点我跳转到关于页面--js跳转</button><button @click="handleChange2">点我跳转到关于页面--js跳转-传对象</button><button @click="handleChange3">点我跳转到关于页面--js跳转-传对象-携带数据-带在地址栏中</button><button @click="handleChange4">点我跳转到关于页面--js跳转-传对象-携带数据-带在路径中</button><button @click="handleSave">点我向localStorage中写入名字</button></div>
</template>
methods: {handleChange() {this.$router.push('/about')},handleChange2() {this.$router.push({name: 'about'})},handleChange3() {// 带在地址栏中数据this.$router.push('/about?name=xxx')},handleChange4() {// 带在路径中this.$router.push({name: 'about',params: {id: this.id} })},handleSave() {localStorage.setItem('name', 'lqz')}}

# 使用方式四:在路径中解析出数据

// router/index.js中:
{path: '/about/:id',name: 'about',component: AboutView
}
// 组件中跳转,携带数据
this.$router.push({name:'about',params:{id:999}
})
this.$router.push('/about/666')
//在另一个组件中取:
this.$route.params.名字

# 通过标签跳转传对象:

<router-link :to="to_url"><button>标签跳转-传对象</button></router-link>
// 变量定义:
to_url:{name:'about',query:{},params:{}}

路由嵌套

# 子路由

# 相关api:

        this.$router.push(path)--- 相当于点击路由链接(可以返回到当前路由界面)
        this.$router.replace(path)---用新路由替换当前路由(不可以返回到当前路由界面)
        this.$router.back()---: 请求(返回)上一个记录路由
        this.$router.go(-1)--- 请求(返回)上一个记录路由
        this.$router.go(1)--- 请求下一个记录路由

# 路由两种工作模式:
hash模式:

        hash值:是指# 及其后面的内容就是hash值。

                       hash值不会包含在 HTTP 请求中,即:hash值不会带给服务器
        缺点:地址中永远带着#号,不美观 。192.168.1.1#login    192.168.1.1#home  
                   若app校验严格,则地址会被标记为不合法。
        优点:兼容性较好。
history模式:
    地址干净,美观 。   192.168.1.1/login    192.168.1.1/home  
    兼容性和hash模式相比略差。
    应用部署上线时需要后端人员支持,解决刷新页面服务端404的问题

# 路由守卫:

        作用:对路由进行权限控制

        全局路由前置守卫—初始化的时候被调用、每次路由切换之前被调用

router.beforeEach((to, from, next) => {console.log('前置路由守卫', to, from)if (to.name == 'home' || localStorage.getItem('name')) {next()} else {alert('您没有权限')}
})

前端开源项目

# 1  后台管理
    django-vue-admin:https://gitee.com/liqianglog/django-vue-admin/tree/main/web
    https://gitee.com/yudaocode/yudao-ui-admin-vue2
# 2 移动端: vue 在uniapp上写
   https://gitee.com/xany/yoshop2.0-uniapp  商城类
    https://gitee.com/yudaocode/yudao-mall-uniapp

localStorage,sessionStorage和cookie的使用

# 浏览器可以存数据:
    cookie:过期时间,过期了,就清理掉了
    localStorage:永久有效,即便浏览器重启也有效,只能手动或代码删除
    sessionStorage:当次有效,关闭浏览器,就没了
# vue-cookies的使用:

cnpm install vue-cookies -S
cookie.set('xx', 'yy', '7d')
console.log(cookie.get('xx'))
cookie.remove('xx')

# localStorage和sessionStorage的使用:

  methods: {saveLocalStorage() {// localStorage.setItem('name', 'xxx')// sessionStorage.setItem('name', '彭于')cookie.set('xx', 'yy', '7d')},getLocalStorage() {// console.log(localStorage.getItem('name'))// console.log(sessionStorage.getItem('name'))console.log(cookie.get('xx'))},deleteLocalStorage() {// localStorage.clear()// localStorage.removeItem('name')// sessionStorage.clear()// sessionStorage.removeItem('name')cookie.remove('xx')},}

今日思维导图:

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue:使用【3.0】:条件模块

一、条件层级效果图 二、代码 <template><ContentWrap><!-- 添加条件分支:level1 --><div class"btnBox" v-if"isEdit"><el-button type"primary" click"add">添加条件分支</el-button></div…

UE5 RPG AttributeSet的设置

AttributeSet 负责定义和持有属性并且管理属性的变化。开发者可以子类化UAttributeSet。在OwnerActor的构造方法中创建的AttributeSet将会自动注册到ASC。这一步必须在C中完成。 Attributes 是由 FGameplayAttributeData定义的浮点值。 Attributes能够表达从角色的生命值到角色…

《现代C++语言核心特性解析》笔记草稿

仅供学习记录之用&#xff0c;谢绝转发 第1章 新基础类型&#xff08;C11&#xff5e;C20&#xff09; 1.1 整数类型long long 更多笔记 “在C中应该尽量少使用宏&#xff0c;用模板取而代之是明智的选择。C标准中对标准库头文件做了扩展&#xff0c;特化了long long和unsi…

【C++】vector的使用及模拟实现

目录 一、vector的介绍及使用1.1 介绍vector1.2 vector的使用1.2.1 构造1.2.2 遍历访问1.2.3 容量空间1.2.4 增删查改 二、vector的模拟实现2.1 成员变量2.2 迭代器相关函数2.3 构造-析构-赋值重载2.3.1 无参构造2.3.2 有参构造12.3.3 有参构造22.3.4 拷贝构造2.3.5 赋值重载2.…

RAG基础功能优化、以及RAG架构优化

RAG基础功能优化 对RAG的基础功能优化&#xff0c;我们要从RAG的流程入手[1]&#xff0c;可以在每个阶段做相应的场景优化。 从RAG的工作流程看&#xff0c;能优化的模块有&#xff1a;文档块切分、文本嵌入模型、提示工程优化、大模型迭代。下面针对每个模块分别做说明&#…

兴达易控EtherCAT转Profibus网关让工业自动化变得轻松快捷

EtherCAT转Profibus网关&#xff08;XD-ECPBM20&#xff09;是一种用于实现不同通信协议间互联互通的设备。它主要用于工业控制系统中&#xff0c;能够将EtherCAT总线的数据传输转换为Profibus网络可接受的格式。这样的网关设备在工业自动化领域有着广泛的应用&#xff0c;因为…

【计算机网络】第七,八,九章摘要重点

第七章网络管理 1.计算机网络面临的两大威胁&#xff1f; 恶意程序有&#xff1a;计算机病毒&#xff0c;计算机蠕虫&#xff0c;特洛伊木马&#xff0c;逻辑炸弹&#xff0c;后门入侵和流氓软件。 2.安全的计算机网络四个目标&#xff1a; 机密性&#xff0c;端点鉴别&…

一文解析 Copycat Dex与 Bitcat Dex的区别

Copycat Dex和 Bitcat Dex都带一个 Cat 并且都是衍生品协议&#xff0c;很多人都会误认为这两个是同一个项目&#xff0c;实际不然。它们是面向两个不同赛道、不同资产类型的衍生品项目。 Copycat Dex和 Bitcat Dex都是衍生品 DEX&#xff0c;它们最本质的区别主要在于&#xf…

软件测试|使用Python提取出语句中的人名

简介 在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;提取文本中的人名是一项常见的任务。Python作为一种流行的编程语言&#xff0c;拥有强大的NLP库和工具&#xff0c;使我们能够轻松地进行这项任务。在本文中&#xff0c;我们将使用Python示例来演示如何提取文本…

MC使用Waterfall 跨服

前言 想弄一个跨服&#xff0c;目前这篇文章是边测试边写的&#xff0c;两个子服都是在同一个机器上运行的 如果两个子服在不同的网络&#xff0c;跨服的延迟就会比较高 两个子服 s1 和 s2 都是使用folia核心 版本1.20.1s1 端口: 25565s2 端口 : 25566 1.下载 Waterfall W…

Hello 2024补题

Wallet Exchange&#xff08;Problem - A - Codeforces&#xff09; 题目大意&#xff1a;A&#xff0c;B做游戏&#xff0c;它们的钱包里各有a,b个硬币&#xff0c;轮到它们操作时&#xff0c;它们可以扔掉自己或者对手钱包里的硬币&#xff0c;谁不能操作谁输&#xff0c;问…

Kafka的安装、管理和配置

Kafka的安装、管理和配置 1.Kafka安装 官网: https://kafka.apache.org/downloads 下载安装包,我这里下载的是https://archive.apache.org/dist/kafka/3.3.1/kafka_2.13-3.3.1.tgz Kafka是Java生态圈下的一员&#xff0c;用Scala编写&#xff0c;运行在Java虚拟机上&#xf…

【大数据】Flink 详解(九):SQL 篇 Ⅱ

《Flink 详解》系列&#xff08;已完结&#xff09;&#xff0c;共包含以下 10 10 10 篇文章&#xff1a; 【大数据】Flink 详解&#xff08;一&#xff09;&#xff1a;基础篇【大数据】Flink 详解&#xff08;二&#xff09;&#xff1a;核心篇 Ⅰ【大数据】Flink 详解&…

Flutter之配置环境创建第一个项目

随着时代发展&#xff0c;使用Flutter开发的项目越来越多&#xff0c;于是踏上了Flutter开发之路。 作为一个Android开发人员&#xff0c;也只能被卷到与时俱进&#xff0c;下面一起创建一个Flutter项目吧。 一、Android开发&#xff0c;电脑上已经具备了的条件&#xff1a; …

msyql 异常,别干着急,70%的问题都在这里!

性能测试中&#xff0c;数据库的性能问题&#xff0c;可能会占到 70%&#xff0c;所以讲性能测试&#xff0c;数据库是一个非常非常重要的知识。但是&#xff0c;最近在讲 MySQL 数据库的时候&#xff0c;却遇到了一个尴尬。 前言 之前的小伙伴是需要手动安装 MySQL 数据库的&…

pc-lint plus和keil 调用库文件策略的不同

同样一个源文件&#xff08;如"stm32h7xx.h"&#xff09;&#xff0c;keil会先从用户路径找文件&#xff0c;pc-lint会先从keil安装路径找源文件 1、问题 在使用pc-lint检测工程时碰到了一个问题 C:\Users\86151\AppData\Local\Arm\Packs\Keil\STM32H7xx_DFP\2.4.…

武理多媒体信息共享平台的架构设计与实现

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

Vue-23、Vue过滤器

1、效果 2、过滤器实现 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>过滤器</title><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/vue2/dist/vue.…

HCIP -- 第六天作业

要求&#xff1a; 实现&#xff1a; 3路由策略干涉选路&#xff1a;[R3]ip ip-prefix c permit 13.1.1.0 24 抓住13网段 [R3]route-policy c permit node 10 创建路由策略为C 序号为10 [R3-route-policy]if-match ip-prefix c 匹配路由策略c [R3-route-policy]apply cost-type…

猫咪全罐喂养一个月多少钱?适合给猫咪全罐喂养的猫罐头推荐

不少铲屎官为了防止猫咪挑食和营养吸收不均衡&#xff0c;打算给猫咪进行全罐喂养&#xff0c;但是又担心全罐喂养花费太多钱了。猫咪全罐喂养一个月多少钱&#xff1f;别担心&#xff0c;咱们打工人的养猫攻略&#xff0c;花小钱办大事&#xff01;追求高性价比的猫罐头才是王…