1、回顾

  • 创建项目 vue create myapp

  • 准备 scss 库

  • 修改了页面的主结构 App.vue 构建页面的基本结构

  • 分离页面主结构,创建各个页面组件 views

views/home/index.vue + views/home/store.js

  • 配置各个页面的路由结构 router/index.js

  • App.vue 中添加路由视图

  • 页面底部导航添加点击链接

  • 配置UI库 - vant 、 mint-ui / element-ui 、iview

  • 结合状态管理器 编写 每一个页面的业务逻辑

  • 项目打包 cnpm run build ---- dist文件夹

day04/myapp

2、slot分发内容 -- 插槽

**组件中内容是显示还是不显示,在哪里显示,如何显示,这就是内容分发所干的活

**

默认情况下,调用组件时,内部写内容是不会显示的,如果想要显示,就需要使用到插槽

// 定义组件
<template>
<header class="header">
<ul>
<li>左</li>
<li>中</li>
<li>右</li>
</ul>
</header>
</template>
// 使用组件
<Header>
你好!!!!!
</Header>

浏览器中并未显示 你好!!!!!

定义组件添加 slot 标签,可以使组件的内容显示

// 定义组件
<template>
<header class="header">
<ul>
<li>左</li>
<li>
<!-- +++++++++++++++++++++++++++++ -->
<slot>中</slot>
</li>
<li>右</li>
</ul>
</header>
</template>
// 使用组件
<Header>
你好!!!!!
</Header>
<Header></Header>

第一个中间显示 您好!!!! 第二个中间显示的是默认的 中

如果组件的结构都需要 可 自定义传递 ----- 具名插槽

// 定义组件
<header class="header">
<ul>
<li>
<slot name="left">左</slot>
</li>
<li>
<slot>中</slot>
</li>
<li>
<slot name="right">右</slot>
</li>
</ul>
</header>
// 使用组件
<Header>
你好!!!!!
</Header>
<Header></Header>
<Header>
<div slot="left" @click="clickLogo">logo</div>
<div>首页</div>
<div slot="right">扫一扫</div>
</Header>
<Header>
<div slot="left" @click="back">返回</div>
<div>详情</div>
<div slot="right">分享</div>
</Header>

可以给各个组件添加不同的事件

组件中内容是显示还是不显示,在哪里显示,如何显示,这就是内容分发所干的活

一般在 自定义组件 和 UI 库使用时居多,可以提高组件的 复用性

3、ref

可以获取DOM节点

<template>
<div class="home">
<h1 ref="title" id="title">标题</h1>
<p ref="desc" id="desc">段落描述</p>
<button @click="getDOM">获取DOM节点</button>
</div>
</template> <script>
export default {
methods: {
getDOM () {
console.log(document.getElementById('title'))
console.log(document.getElementById('desc'))
console.log('----------------------')
console.log(this.$refs.title)
console.log(this.$refs.desc)
}
}
}
</script>

获取子组件的数据

<template>
<div class="home">
<Reftest ref="test" />
<button @click="getData">获取子组件的数据</button>
</div>
</template> <script>
import Reftest from '@/components/Reftest'
export default {
components: {
Reftest
},
methods: {
getData () {
console.log(this.$refs.test.msg)
}
}
}
</script>

4、$parent

子组件可以直接获取父组件中的数据和方法

<template>
<div>
<button @click="getData">子组件直接获取父组件的数据</button>
</div>
</template>
<script>
export default {
data () {
return {
msg: 'child-----------------------------'
}
},
methods: {
getData () {
// ++++++++++++++++++++
console.log(this.$parent.message)
}
}
}
</script>

5、混入mixins

组件中的相同部分抽离为一个 js 模块,使用组件的混入选项导入即可,如果有相同的部分,以组件的选项为主

mixins/header.js

import Header from '@/components/Header'
export default {
components: {
Header
},
methods: {
userFn () {
console.log('个人中心')
}
}
}

Home.vue

<template>
<div class="home">
<Header>
<div>首页</div>
<div slot="right" @click="userFn">我的</div>
</Header>
</div>
</template> <script>
import header from '@/mixins/header'
export default {
mixins: [header]
}
</script>

About.vue

<template>
<div class="about">
<h1>This is an about page</h1>
<Header>
<div>关于</div>
<div slot="right" @click="userFn">我的</div>
</Header>
</div>
</template>
<script>
import header from '@/mixins/header'
export default {
mixins: [header],
methods: {
userFn () {
console.log('about - 个人中心')
}
}
}
</script>

简化组件的代码 ----- 提交组件的复用性

6、自定义指令

  • v-model/v-if/v-else-if/v-else/v-show/v-for/v-on/v-bind.....
<input type="text" autofocus/>
  • 自定义指令实现 自动获取焦点

全局的自定义指令 Vue.directive() ---- main.js

Vue.directive('focus', { // 此处不是一个函数
// 当被绑定的元素插入到 DOM 中时……
inserted: (el) => { // el代表DOM元素
el.focus() // js操作DOM
}
})

局部的自定义指令 { directives: {}} -- 哪里使用哪里定义 --- Home.vue

export default {
directives: {
'focus': {
inserted: (el) => {
el.focus()
}
}
}
}

使用指令 v-name name为自定义指令的名称

<input type="text" v-focus>

7、过滤器

全局过滤器 --- main.js

Vue.filter('sexFilter', (val) => {
return val === 0 ? '女' : '男'
})

局部过滤器 --- 哪里使用哪里定义 --- Home.vue

filters: {
lessonFilter (val) {
return val === 1 ? '一阶段' : val === 2 ? '二阶段' : '三阶段'
}
}

使用 {{ val | filtername }}

8、路由的过渡效果

页面间切换效果

<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<!-- transition 包裹 设置name值,设置css -->
<transition name="slide">
<router-view/>
</transition>
</div>
</template> <style lang="scss">
* { padding: 0; margin: 0; list-style: none}
/* 可以设置不同的进入和离开动画 */
/* 设置持续时间和动画函数 */
.slide-enter {
// 定义进入过渡的开始状态
transform: translateX(100%);
}
.slide-enter-active {
// 定义进入过渡的开始状态
transition: all 300ms;
}
.slide-enter-to {
// 完全进入
transform: translateX(0%);
}
.slide-leave {
// 开始离开
transform: translateX(0%);
}
.slide-leave-active {
transition: all 0;
}
.slide-leave-to {
transform: translateX(-100%);
}
</style>

9、nextTick

  • 状态改变,视图渲染,实际上DOM节点的值并未及时发生改变,使用nextTick可以解决此问题
<template>
<div class="home">
<div ref="test"> {{ count }} </div>
<button @click="getData">加1获取div的值</button>
</div>
</template> <script>
export default {
data () {
return {
count: 0
}
},
methods: {
getData () {
this.count++ // console.log(this.$refs.test.innerHTML) // 是上一次的DOM节点的值
this.$nextTick(() => {
console.log(this.$refs.test.innerHTML)
})
}
}
}
</script>

VUE零碎小技巧1的更多相关文章

  1. Vue + Element 小技巧

    说是小技巧 ,其实就是本人 就是一个小菜比 .如有大佬可以纠正,或者再救救我这个小菜比    跪谢 1.当后台返回一个字段需要根据不同字段内容在表格内显示相对应的文字(字段内容是死的,表格内需要显示对 ...

  2. vue 优化小技巧 之 require.context()

    1.require.context() 回忆一下 当我们引入组件时 第一步 创建一个子组件 第二步 import ... form ... 第三步 components:{..} 第四步 页面使用 & ...

  3. 在vuex的mutations中使用vue的小技巧

    问题: 在vuex组件中的mutations属性中的定义的函数,有时会要用到vue这个对象.正常在其他的地方使用是通过this这个变量来获取,但是在mutations定义的函数中this指定的是Vue ...

  4. vue小技巧之偷懒的文件路径——减少不必要的代码

    众所周知,我们写vue项目的时候都会创建很多个文件,尤其是一些中大型项目,会有很深的文件夹,当你去引入的时候,要写很长的路径比如我要引入一个css文件, 必须得 import  '../../../s ...

  5. Vue 使用中的小技巧

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧,在下将不定期更新~ 1.多图表resize事件去中心化 ...

  6. 关于Vue的一些小技巧

    前言 用Vue开发一个网页并不难,但是也经常会遇到一些问题,其实大部分的问题都在文档中有所提及,再不然我们通过谷歌也能成功搜索到问题的答案,为了帮助小伙伴们提前踩坑,在遇到问题的时候,心里大概有个谱知 ...

  7. Vue 使用中的小技巧(山东数漫江湖)

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧,在下将不定期更新~ 1. 多图表resize事件去中心 ...

  8. 总结一下vue里一些小技巧

    官方里的我就不细说了,自个撸文档就成,下面是实践里常用的几个小技巧或者说是遇到的坑,若有错误望大家指正)1.当用a标签设置新窗口打开页面,设置url时,建议给href进行v-bind绑定,然后写相对路 ...

  9. vue 使用中的小技巧 (一)

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧 data 和 Object.freeze 每个Vue实 ...

  10. 这几个小技巧,让你书写不一样的Vue!

    前言 最近一直在阅读Vue的源码,发现了几个实战中用得上的小技巧,下面跟大家分享一下. 同时也可以阅读我之前写的Vue文章 vue开发中的"骚操作" 挖掘隐藏在源码中的Vue技巧! ...

随机推荐

  1. 编辑器(Editor) vs 集成开发环境(Integrated Development Environment,下文简称 IDE)

    编辑器(Editor) vs 集成开发环境(Integrated Development Environment,下文简称 IDE) 经常看到一些程序员拿编辑器和 IDE 进行比较,诸如 Vim 比 ...

  2. 【NumPy】Python利用linspace进行数据采样

    情景 假设有一堆长度为1000的数据,我现在只想要其中800个并且要求整体趋势一样,那就可以试试使用linspace进行等间距的采样. 简介 linspace(start, stop, num=50, ...

  3. elelment中el-cascader怎样自定义显示的lable 与value

    1.后端返回的数据类型 2.页面代码 3.重点在于  :props="{ value: 'id',label: 'className',children: 'childNode'}" ...

  4. css cursor: url() 使用火狐浏览器问题,鼠标没有效果

    在火狐浏览器问题使用cursor: url():鼠标没有效果,需要给使用标签添加一个height

  5. centos mail 发邮件

    1.安装mailx yum -y install mailx 2. /etc/mail.rc 最后增加邮件配置如 set smtp=smtp.qq.comset smtp-auth=loginset ...

  6. 【Win11】电脑开机内存占用过高

    联想拯救者 Y7000P 1.Win+R打开运行输入"MdSched"   重启 2.Windows PowerShell(管理员)->并运行该命令 Disable-MMAg ...

  7. JMeter参数化(二)--数据库参数化

    1.下载mysql驱动,解压得到mysql-connector-java-8.0.17.jar(驱动一般放在java的 \java\jre\lib\ext 路径下): 2.在 测试计划-->浏览 ...

  8. Vue Yarn npm nodejs - 安装、配置

    一.安装 node.js 1.从node.js官网下载并安装,安装时,安装路径可以修改为非C盘 2.使用 node --version 命令在 CMD 中查看 nodejs 安装的版本,显示了安装的版 ...

  9. 【转载】MSVC中C++ UTF8中文编码处理探究

    字符集 先说一个名词:字符集,没听过的先百度一下,其实就是一种将字符编码的格式,像我们常说的ASCII,UTF8,GBK都是常用的字符集. 首先要清楚,从你在编辑器里输入一个UTF8汉字开始,到最终在 ...

  10. Promise 一些注意点

    Promise是一个构造函数,其身上有all.race.resolve.reject这些方法,都可以通过 Promise. 调用. 注意点1 Promise构造函数接受一个参数 => funct ...