过滤器(filter)、watch 侦听器 、计算属性 、axios、vue-cli 的使用 、vue组件化

news2025/1/18 12:02:53

过滤器(filter)、watch 侦听器 、计算属性 、axios、vue-cli 的使用 、vue组件化

    • 1.过滤器(filter)
      • 过滤器的注意点
        • 定义全局变量
    • 2.watch 侦听器
      • 侦听器的格式
    • 3.计算属性
    • 4.axios
      • axios 的基本使用
    • 5.vue-cli 的使用
    • 6.vue组件化

1.过滤器(filter)

可以用在插在表达式中和v-bind属性绑定,过滤器是一个函数{{message| capitalize}},添加在js表达式的尾部,

过滤器的注意点

  1. 要定义到 filters 节点下,本质是一个函数
  2. 在过滤器函数中,一定要有 return 值
  3. 在过滤器的形参中,可以获取到“管道符”前面待处理的那个值
  4. 如果全局过滤器和私有过滤器名字一致,此时按照“就近原则”,调用的是”私有过滤器“
  5. 过滤器中一定要有一个返回值
  6. 字符串中有charAt方法,接收索引值,表示字符串中吧索引值对应的字符获取出来
    <script>
        const vm = new Vue({
            el:'#app',
            data: {
                message: 'hello vue.js',
                info: 'title info'
            },
            // 过滤器函数,必须被定义到filters节点之下
            // 过滤器本质上是函数
            filters: {   
                // 注意: 过滤器函数中的形参中的val,永远是管道符前面的那个值
                //在filters节点下定义“过滤器”
                capitalize(str) {//把首字母转为大写的过滤器
                    // 字符串有charAt方法,这个方法接收索引值,表示从字符串中吧索引值对应的字符提取出来
                    // val.charAt(0)
                    const first = val.charAt(0).toUpperCase()
                    // 字符串的slice方法,可以截取字符串,从指定索引往后截取
                    const other = val.slice(1)
                    // 强调:过滤器中,一定要有一个返回值
                    return first + other
                }
            }
        })
    </script>

定义全局变量

// 使用Vue.filter() 定义全局过滤器
Vue.filter('capitalize', function(str) {
            // 字符串有charAt方法,这个方法接收索引值,表示从字符串中吧索引值对应的字符提取出来
            // val.charAt(0)
            const first = val.charAt(0).toUpperCase()
            // 字符串的slice方法,可以截取字符串,从指定索引往后截取
            const other = val.slice(1)
            // 强调:过滤器中,一定要有一个返回值
            return first + other      
})

2.watch 侦听器

侦听器的格式

  1. 方法格式的侦听器
  • 缺点1:无法在刚进入页面的时候,自动触发!!!
  • 缺点2:如果侦听的是一个对象,如果对象中的属性发生了变化,不会触发侦听器!!!
<script>
        const vm = new Vue({
            el: '#app',
            data: {
                username: 'admin'
            },
            // 所有监听器,都应该被定义到watch节点下
            watch: {
                username(newVal) {
                    if (newVal === '') return
                    // 1.调用jQuery中的ajax发起请求,判断newVal是否被占用
                    $.get('https://www.escook.cn/api/finduser' + newVal, function(result) {
                        console.log(result);
                    })
                }
            }
        })
</script>
  1. 对象格式的侦听器
  • 好处1:可以通过 immediate 选项,让侦听器自动触发!!!
  • 好处2:可以通过 deep 选项,让侦听器深度监听对象中每个属性的变化!!!

    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                username: 'admin'
            },
            // 所有监听器,都应该被定义到watch节点下
            watch: {
                // 定义对象格式的侦听器
                username: {
                    //侦听器的处理函数
                    handler(newVal, oldVal) {
                        console.log(newVal, oldVal);
                    },
                    // immediate 选项的默认值是false
                    // immediate 的作用是: 控制侦听器是否自动触发一次
                    immediate: true
                }
            }
        })
    </script>

  1. deep 选项

    如果 watch 侦听的是一个对象,如果对象中的属性值发生了变化,则无法被监听到。此时需要使用 deep 选 项,代码示例如下:

   const vm = new Vue({
   	el: '#app',
   	data: {
   		info: { username: 'admin' }
   
   },
   watch: {
   	'info.username': {
   		handler(newVal) {
   			console.log(newVal.username)
   			},
   			deep: true
   		}
   	}
   })
  1. 监听对象单个属性的变化
const vm = new Vue({
	el: '#app',
	data: {
		info: { username: 'admin' }

},
watch: {
	'info.username': {
		handler(newVal) {
			console.log(newVal)
			}
		}
	}
})

3.计算属性

计算属性指的是通过一系列运算之后,最终得到一个属性值。 这个动态计算出来的属性值可以被模板结构或 methods 方法使用。

:style代表动态绑定一个样式对象,它的值是一个{ }样式对象

<script>
        var vm = new Vue({
            el: '#app',
            data: {
                r: 0, g: 0, b: 0
            },
            //计算属性,都要定义到computed节点之下
            // 计算属性在定义的时候,要定义成“方法格式”
            computed: {
                // 返回出来是一个字符串

                rgb() { return `rgb(${this.r}, ${this.g}, ${this.b})`}
            }, 
            methods: {
                show() { consle.log(this.rgb) }
            }
        })
</script>

特点:

  1. 定义的时候,要被定义为“方法”
  2. 在使用计算属性的时候,当普通的属性使用即可

好处:

  1. 实现了代码的复用
  2. 只要计算属性中依赖的数据源变化了,则计算属性会自动重新求值!

4.axios

axios 是一个专注于网络请求的库!

axios 的基本使用

在这里插入图片描述

  1. 发起 GET 请求:

    document.querySelector('#btnGet).addEventListener('click', async function () {
    const {data: res } = await axios({
        //解构赋值的时候,使用 :进行重命名
        //1.调用axios之后,使用async/await进行简化
        //2.使用解构赋值,从axios封装的大对象中, 把data属性解构出来
        //3.把解构出来的data属性,使用冒号进行重命名,一般命名为{ data: res}
      // 请求方式
      method: 'GET',
      // 请求的地址
      url: 'http://www.liulongbin.top:3006/api/getbooks',
      // URL 中的查询参数(get传参)
      params: {
        id: 1
      }
    })
      console.log(result)
    })
    
  2. 发起 POST 请求:

    document.querySelector('#btnPost').addEventListener('click', async function () {
      // 如果调用某个方法的返回值是 Promise 实例,则前面可以添加 await!
      // await 只能用在被 async “修饰”的方法中,可以直接输出数据结果
      const { data: res } = await axios({
        method: 'POST',  
        url: 'http://www.liulongbin.top:3006/api/post',
        //post传参
        data: {
          name: 'zs',
          age: 20
        }
      })
    
      console.log(res)
    })
    

5.vue-cli 的使用

它简化了程序员基于webpack创建工程化的Vue项目的过程

  1. 在终端下运行如下的命令,创建指定名称的项目:

    vue cerate 项目的名称
    

在这里插入图片描述

  1. vue 项目中 src 目录的构成:

assets 文件夹:存放项目中用到的静态资源文件,例如:css 样式表、图片资源
components 文件夹:程序员封装的、可复用的组件,都要放到 components 目录下
main.js 是项目的入口文件。整个项目的运行,要先执行 main.js
App.vue 是项目的根组件。

  1. vue项目的运行流程

通过main.js把App.vue渲染到index.html的指定区域中
Vue实例的$mount()方法,作用和el属性完全一样!替换

6.vue组件化

  1. 组件化开发指的是:根据封装的思想,把页面上可重用的 UI 结构封装为组件,从而方便项目的开发和维护。
  2. vue 中的组件化开发 vue 是一个支持组件化开发的前端框架。 vue 中规定:组件的后缀名是 .vue。之前接触到的 App.vue 文件本质上就是一个 vue 的组件。
  3. vue 组件的三个组成部分 每个 .vue 组件都由 3 部分构成,分别是:

template -> 组件的模板结构

script -> 组件的 JavaScript 行为

style -> 组件的样式

​ 其中,每个组件中必须包含 template 模板结构,而 script 行为和 style 样式是可选的组成部分

在这里插入图片描述

  1. 组件组件的父子关系

    组件在被封装后,相互独立,但是在使用组件中,彼此成嵌套关系,形成父子关系、兄弟关系

    4.1 使用组件的三个步骤:①使用import语法导入需要的组件②使用components节点注册组件③以标签的形式来使用刚才注册的组件

    4.2 通过 components 注册的是私有子组件 例如: 在组件 A 的 components 节点下,注册了组件 F。 则组件 F 只能用在组件 A 中;不能被用在组件 C 中

    4.3 注册全局组件 在 vue 项目的 main.js 入口文件中,通过 Vue.component() 方法,可以注册全局组件。示例代码如下:
    在这里插入图片描述

  2. 组件的props
    props是组件的自定义属性,在封装通用组件的时候,合理地使用props可以极大提高组件的复用性

export default {
//组件的自定义属性
props: ['自定义属性A', '', ''],
//组件的私有数据
data() {
	return { }
	}
}

5.1 props 是只读的
vue 规定:组件中封装的自定义属性是只读的,程序员不能直接修改 props 的值。否则会直接报错:

要想修改 props 的值,可以把 props 的值转存到 data 中,因为 data 中的数据都是可读可写的!

props:['init'],
data() {
	return {
	count: this.init//把this。init的值转到count中
}
}

5.2 props 的 default 默认值
在声明自定义属性时,可以通过 default 来定义属性的默认值。示例代码如下

export default {
	props: {
	init: {
		//用default属性定义属性的默认值
		default: 0
		}
	}
}

5.3 props 的 type 值类型
在声明自定义属性时,可以通过 type 来定义属性的值类型。示例代码如下

export default {
	props: {
		init: {
			//用default属性定义属性的默认值
			default: 0,
			//用type属性定义属性的值类型,如果传递过来的值不符合此类型,则会在终端报错
			type: Number
}
}
}

5.4 props 的 required 必填项
在声明自定义属性时,可以通过 required 选项,将属性设置为必填项,强制用户必须传递属性的值。示例代
码如下:

export default {
	props: {
		init: {
			//值类型为Number数字
			type: Number,
			//必填项校码
			required: true
}
}
}
  1. 组件之间的样式冲突问题
    默认情况下,写在 .vue 组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题。
    导致组件之间样式冲突的根本原因是:
    ① 单页面应用程序中,所有组件的 DOM 结构,都是基于唯一的 index.html 页面进行呈现的
    ② 每个组件中的样式,都会影响整个 index.html 页面中的 DOM 元素

6.1 思考:如何解决组件样式冲突的问题
为每个组件分配唯一的自定义属性,在编写组件样式时,通过属性选择器来控制样式的作用域。
6.2 style 节点的 scoped 属性
为了提高开发效率和开发体验,vue 为 style 节点提供了 scoped 属性,从而防止组件之间的样式冲突问题:

<style lang="less" scoped> 

6.3 /deep/ 样式穿透
如果给当前组件的 style 节点添加了 scoped 属性,则当前组件的样式对其子组件是不生效的。如果想让某些样式对子组件生效,可以使用 /deep/ 深度选择器

当使用第三方组件库的时候,如果有修改第三方组件默认样式的需求,需要用到/deep/

/deep/ h5 {
	color: blue;
}	

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

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

相关文章

安卓与串口通信-基础篇

前言 安卓并不仅仅只是一个手机操作系统&#xff0c;在很多领域都能见到安卓的身影。 无论是车载系统、工控系统、屏控系统还是物联网设备基本都有安卓的一席之地。 在所谓的寒冬之下&#xff0c;纯粹的安卓开发似乎已经不再吃香&#xff0c;于是越来越多的安卓开发者转向了…

浅谈新兴室内外无线局域精准定位技术UWB(超宽带)

浅谈新兴室内外无线局域精准定位技术UWB&#xff08;超宽带&#xff09; 1、UWB高精度定位系统概述2、与传统定位比较3、应用场景4、实现uwb高精度定位4、UWB室内定位的缺陷5、应用案例 1、UWB高精度定位系统概述 UWB室内定位技术是一种全新的、与传统通信技术有极大差异的通信…

【MySQL学习】事务管理

文章目录 一、事务的基本认识1.1 事务的基本概念1.2 事务的基本属性1.3 支持事务的存储引擎 二、为什么要有事务三、事务的基本操作3.1 事务的提交方式3.2 事务的操作案例 四、事务的隔离级别4.1 对事务隔离性的初步理解4.2 四种隔离级别4.3 读未提交&#xff08;Read Uncommit…

Mybatis Plus代码生成器

文章目录 1 代码生成器原理分析2 代码生成器实现步骤1:创建一个Maven项目代码2:导入对应的jar包步骤3:编写引导类步骤4:创建代码生成类步骤5:运行程序 3 MP中Service的CRUD 1 代码生成器原理分析 造句: 我们可以往空白内容进行填词造句&#xff0c;比如: 在比如: 观察我们之…

FAT NTFS Ext3文件系统有什么区别

10 年前 FAT 文件系统还是常见的格式&#xff0c;而现在 Windows 上主要是 NTFS&#xff0c;Linux 上主要是Ext3、Ext4 文件系统。关于这块知识&#xff0c;一般资料只会从支持的磁盘大小、数据保护、文件名等各种维度帮你比较&#xff0c;但是最本质的内容却被一笔带过。它们最…

SQL教程(四)简单实例学习:时间函数(一)基础入门级

目录 一、&#x1f30e;SQL 简介 1.1 &#x1f4dc;SQL 是什么&#xff1f; 1.2 &#x1f4dc;SQL 能做什么&#xff1f; 1.3 &#x1f4dc;SQL 是一种标准 - 但是... 1.4 &#x1f4dc;在您的网站中使用 SQL 1.4 &#x1f4dc;RDBMS 1.5 &#x1f4dc;请记住... 1.6 &…

物业管理可视化大屏

物业管理可视化大屏是一种可视化的智能物业管理&#xff0c;它可以将物业管理中的各种数据进行可视化展示&#xff0c;帮助物业管理人员更好地管理社区或园区。 什么是物业可视化数据大屏&#xff1f; 物业可视化数据大屏就是利用大数据技术&#xff0c;将物业管理中的各种信…

1091 Acute Stroke

One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of the stroke core. Input Spec…

C++中的取余函数%、remainder、fmod以及matlab中的取余函数mod

C 1 整数取余 % 2 remainder函数 https://cplusplus.com/reference/cmath/remainder/?kwremainder double remainder (double numer , double denom); float remainder (float numer , float denom); long double remainder (long double numer, long double denom); doub…

一文带你了解MySQL之单表访问方法

前言 本文章收录在MySQL性能优化原理实战专栏&#xff0c;点击此处查看更多优质内容。 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的&#xff1a;从根儿上理解MySQL》 对于我们这些MySQL的使用者来说&#xff0c;MySQL其实就是一个软件&#xff0c;平时用的最多的就是查询功…

Grow模型

Grow模型 该模型是约翰.惠特默&#xff0c;在1992年其著作《高绩效教练》一书中提出的&#xff0c;核心是围绕设定目标和寻找解决方案的有效工具。 模型介绍 GROW模型给到应用者一个可以高效的设立目标并制定计划&#xff0c;最终解决问题的思路框架。 GROW 由四个步骤构成&am…

老胡的周刊(第091期)

老胡的信息周刊[1]&#xff0c;记录这周我看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;内容主题极大程度被我个人喜好主导。这个项目核心目的在于记录让自己有印象的信息做一个留存以及共享。 &#x1f3af; 项目 omnivore[2] 无干扰、注重隐私、免费开源专为…

【P26】JMeter WebSocket Sampler

文章目录 一、WebSocket Sampler 安装说明二、WebSocket Sampler 参数说明三、测试计划设计 一、WebSocket Sampler 安装说明 下载路径&#xff1a;https://jmeter-plugins.org/install/Install/ &#xff08;1&#xff09;、打开网页&#xff0c;点击 plugins-manager.jar 进…

​C++中虚函数 纯虚函数 虚基类的基础知识点​

一、前言 原文转载自 c中的 虚函数 纯虚函数 虚基类_名字全都被占用了的博客-CSDN博客&#xff0c;为了理解下C中虚函数 纯虚函数 虚基类的基础知识点。 二、虚函数 纯虚函数 虚基类三者区别 1.虚函数是用于多态中virtual修饰父类函数&#xff0c;确保父类指针调用子类对…

Maven基础学习---4、Maven的使用(IDEA)

1、创建父工程&#xff08;本人用的是IDEA2022.3&#xff09; 1、创建Project 2、配置Maven信息 如果没有提前设置过Setting for new project这个配置&#xff0c;那么每次创建Project后都需要设置Maven家目录位置&#xff0c;否则IDEA将使用内置的Maven核心程序&#xff08;…

数据仓库理论

数据仓库理论 基础理论数据仓库主要特征面相主题集成性非易失性、非易变性时变性 OLTP、OLAPOLTPOLAP对比 数据库与数据仓库的区别数据仓库、数据集市数据仓库分层架构分层思想和标准阿里巴巴数仓三层架构ODS层DW层DA层&#xff08;ADS层&#xff09; 分层的好处好处 ETL和ELT的…

mysql存储过程实例统计最大销售数量

1.需求 统计某天的销售的商品中&#xff0c;数量大于m的最大的销售数量。 传入参数&#xff1a;销售日期&#xff0c;销售数量 返回参数&#xff1a;最大销售数量 2.数据库表 销售表 CREATE TABLE t_sale ( id int NOT NULL COMMENT ‘主键’, good_id int NULL COMMENT ‘…

[山海关crypto 训练营 day17]

[HNCTF 2022 WEEK3]pnearq 题目代码和数据 from Crypto.Util.number import * from gmpy2 import next_prime from flag import flagp getPrime(1024) q next_prime(p) n p*q e 0x10001 c pow(bytes_to_long(flag), e, n) print(f"n {n}") print(f"c {…

chatgpt赋能Python-python8_9

Python 8-9: 了解更多关于Python的新特性 Python 作为一种高级编程语言已经被广泛应用于数据科学&#xff0c;Web开发&#xff0c;人工智能等领域。Python 8-9带来了新特色的更新和改进&#xff0c;这些功能使得Python更加强大和易于使用&#xff0c;吸引了越来越多开发者的关…

符尧最新研究:大语言模型玩砍价游戏?技巧水涨船高!

深度学习自然语言处理 原创作者&#xff1a;鸽鸽 若干年前&#xff0c;AlphaGo Zero用两个AI代理切磋围棋技艺&#xff0c;打败了人类。今早&#xff0c;符尧的一篇论文刷新了我的认知&#xff1a;让大语言模型相互对弈&#xff0c;再加一个评论家提供建设性意见&#xff0c;提…