计算属性和监听属性,生命周期钩子,组件介绍

Vue2基础补充(箭头函数、for循环、修饰符、表单控制、v-model进阶、axios、计算属性监听属性组件) Vue 能够追踪计算属性的依赖关系,当依赖的数据发生变化时,相关的计算属性会自动更新。只有在依赖发生改变时,才会重新计算计算属性的值,否则会直接返回缓存的结果。es6 新增了箭头函数,箭头函数实例化的函数对象与正式的函数表达式创建的函数对象行为是相同的。:在实例初始化之后,数据观测事件配置之前被调用,此时实例还未初始化完成。:实例销毁后调用,此时实例及其所有的指令被解绑,事件监听器被移除。:只处理自己的事件,父控件冒泡的事件不处理,:只处理自己的事件,子控件冒泡的事件不处理, 阅读详情

计算属性

# 计算属性是基于它们的依赖进行缓存的
# 计算属性只有在它的相关依赖发生改变时才会重新求值
# 计算属性就像Python中的property,可以把方法/函数伪装成属性
# 计算属性必须要有返回值

基本使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="d1">
    <h1>普通函数---其他数据变化---》函数会重写计算</h1>
    年龄:<input type="text" v-model="age">
    姓名:<input type="text" v-model="name">
    <br>
    {{getAge()}}
    <br>
    <h1>计算属性</h1>
    年龄:<input type="text" v-model="age1">
    姓名:<input type="text" v-model="name1">
    <br>
    {{newAge}}
    <br>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#d1',
        data: {
            age: '',
            name: '',
            age1: '',
            name1: '',
        },
        methods: {
            getAge() {
                console.log('我执行了')
                return Number(this.age) + 10
            }
        },
        computed: {
            newAge() {
                console.log('我执行了--计算属性')
                return Number(this.age1) + 20
            }
        }
    })
</script>
</html>

首字母变大写

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="d1">
    <h1>首字母变大写</h1>
    <input type="text" v-model="name"> ---》{{newName}}
</div>
</body>
<script>
    var vm = new Vue({
        el: '#d1',
        data: {
            name: ''
        },
        computed: {
            newName() {
                return this.name.substring(0, 1).toUpperCase() + this.name.substring(1)
            }
        }
    })
</script>
</html>

通过计算属性,重写过滤案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>过滤案例</h1>
    <input type="text" v-model="search">
    <ul>
        <li v-for="item in newDataList">{{item}}</li>
    </ul>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            search: '',
            dataList: ['a', 'at', 'atom', 'be', 'beyond', 'bee', 'c', 'cs', 'csrf'],
        },
        computed:{
            newDataList(){
                return  this.dataList.filter(item => item.indexOf(this.search) >= 0)
            }
        }
    })
</script>
</html>

监听属性

只要属性发生变化,就会执行 函数

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>监听属性</h1>
    <button @click="ordering='id'">按id排序</button>
    <button @click="ordering='price'">按价格排序</button>
</div>
</body>
<script>
    var vm = new Vue({
        el: '#app',
        data: {
            ordering: ''
        },
        watch: {
            ordering() {
                console.log('我变了,向后端发送请求')
                console.log(this.ordering)
            }
        }
    })
</script>
</html>

生命周期钩子

# vue 组件的生命周期钩子函数
    一个vue的组件,从创建开始---》到最后销毁---》经历一些过程---》每个过程都绑定了一个函数--》当到这个过程的时候,这个函数就会执行
    面向切面编程:AOP
    
 
# 8个生命周期钩子函数
    1.beforeCreate: 组件创建之前实现这个:组件html,js--》html和js都是空的
    2.created:组件创建完成后:js就有值了,html还是空的  (向后端发送ajax请求)
    3.beforeMount:挂载模板之前,js有值,模板(html) 还是空的(向后端发送ajax请求)
    4.mounted:挂载完成:js有值,模板有值
    5.beforeUpdate:刷新之前执行:只要页面发送变化或js变量发生变化,就会触发它的执行
    6.updated:刷新之后执行
    7.beforeDestroy:被销毁之前执行  (资源清理性工作)
    8.destroyed:被销毁之后执行
    
# 实际用途
    1 页面加载完成,向后端发请求拿数据
        写在create中
        
    2 组件中有定时任务,组件销毁,要销毁定时任务、
  


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

组件介绍

# 组件是:有模板,有js的 ,有方法的 对象  组件和组件直接的 变量,模板都是隔离的

# 定义组件
    Vue.component('Child',{
        template: `
          <div>
          <h1>我是组件</h1>
          <button @click="haneleClick">点我看美女</button>
          <p>年龄是:{{ age }}</p>
          </div>`,
        data() {
            return {
                age: 19
            }

        },
        methods: {
            haneleClick() {
                alert('美女')
            }
        }
    })
# 使组件,直接根据组件名使用即可
  <Child></Child>

局部组件和全局组件

 #  全局组件
    - 定义:
    Vue.component('Child',{})
    - 使用,可以在任意位置使用
        <Child></Child>
    
# 局部组件-->只能定义在组件内部,只能在当前组件中使用
    -定义
     var vm = new Vue({
        el: '#app',
        data: {},
        components:{局部组件:{}}
    })
    -使用:只能用在被 当前组件管理的 html (#app) 中,放在别的位置找不到

全局组件使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="d1">
    <h1>组件的使用</h1>
    <button @click="handleClick">点我看美女</button>
    <hr>
    <lyz></lyz>
</div>
</body>
<script>
    // 定义全局组件
    Vue.component('lyz', {
        template: `
          <div>
            <h1>{{ name }}</h1>
            <button @click="handleClick">点我换名字</button>
          </div>`,
        data() {
            return {
                name: 'lyz'
            }
        },
        methods: {
            handleClick() {
                this.name = '吴彦祖'
            }
        }
    })
    var vm = new Vue({
        el: '#d1',
        data: {},
        methods: {
            handleClick() {
                alert('美女')
            }
        }
    })
</script>
</html>

局部组件的使用

局部组件是定义在组件内部,只能在当前组件中使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="app">
    <h1>局部组件的使用</h1>
    <Child></Child>
</div>
</body>
<script>
    // 全局组件
    Vue.component('Child', {
        template: `
          <div>
            <lyz></lyz>
          </div>
        `,
        // 局部组件
        components: {
            lyz: {
                template: `
                  <div>
                    <h2>我是局部组件</h2>
                  </div>
                `,
                data() {
                    return {}
                },
                methods: {}
            }
        }
    })
    var vm = new Vue({
        el: '#app',
        data: {},
        methods: {
            handleClick() {
                alert('美女')
            }
        },
    })
</script>
</html>

组件间通信

父传子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="d1">
    <h1>组件通信之父传子:自定义属性</h1>
    <p>父组件中得名字:{{name}}</p>
    <div style="background-color: #c0e9ff">
        <child :nn="name" mm="lyz"></child>
    </div>
</div>
</body>
<script>
    Vue.component('child',{
        template:`
            <div>
            <h2>我是Child组件</h2>
            <p>{{nn}}==={{mm}}</p>
            </div>
        `,
        props:['nn','mm']
    })
    var vm = new Vue({
        el:'#d1',
        data:{
            name:'吴彦祖'
        },
        methods:{
        }
    })
</script>
</html>

子传父

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./js/vue.js"></script>
</head>
<body>
<div id="d1">
    <h1>组件通信之子传父:自定义事件</h1>
    <p>子组件的值:{{p_name}}</p>
    <child @mm="handleEvent"></child>
</div>
</body>
<script>
    Vue.component('child', {
        template: `
          <div>
            <h2>我是Child组件</h2>
            <input type="text" v-model="name">---{{ name }}
            <button @click="handleSend">传给父亲</button>
          </div>
        `,
        data() {
            return {
                name: ''
            }
        },
        methods: {
            handleSend() {
                this.$emit('mm', this.name)
            }
        }
    })
    var vm = new Vue({
        el: '#d1',
        data: {
            p_name: ''
        },
        methods: {
            handleEvent(name) {
                this.p_name = name
            }
        }
    })
</script>
</html>

Vue3中,混入对象组件选项合并的原理是什么? 【代码】在Vue3中,混入对象组件选项合并的原理是什么? 阅读详情

相关推荐

PTPX功耗分析实战——从脚本配置到报告解读

本文详细介绍了PTPX功耗分析的全流程,从脚本配置到报告解读,帮助工程师快速掌握芯片设计中的功耗估算技术。文章涵盖了环境搭建、波形文件处理、功耗报告解析等关键环节,并提供了实战经验优化建议,特别适合需要提升PTPX功耗分析效率的开发者。

weixin_29248313的博客 255

Vue - 计算属性

1.vue计算属性-computed 一个数据, 依赖另外一些数据计算而来的结果 场景: 一个变量的值, 需要用另外变量计算而得来 语法: computed: { "计算属性名" () { return "值" } } 注意1: 计算属性data属性都是变量-不能重名. 用法data相同 注意2: 函数内变量变化, 会自动重新计算结果返回 例子: 需求: 需求1: 求2个数的显示到页面上 需求2: 字符串翻转 <template> &l

小海的博客 5万+

基于深度学习的文字识别与检测算法研究

基于深度学习的文字识别与检测算法研究 1. 背景介绍 1.1 文字识别与检测的重要性 在当今信息时代,文字作为人类交流传递信息的主要载体,无处不在。从日常生活中的路牌、广告牌,到办公场所的文件、合同,再到互联网上的网页、图片等

AI天才研究院 1014

Vue计算属性(computed)

计算属性以上就是计算属性的大致讲解。

浩泽学编程的博客 3万+

vue computed正确使用方式

最近面试中,遇到一个小伙子,谈到了vue中的 computed watch 区别,最后得到了一个让我瞠目结舌的答案,只用 watch,从不用 computed 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的。在模板中放入太多的逻辑会让模板过重且难以维护,所以,对于复杂逻辑,vue 提倡使用计算属性。需要特别说明:计算属性的 getter 函数是没有副作用 (side effec...

李刚的学习专栏 12万+

Vue计算属性

原字符串:{{str}}新字符串:{{newstr}}new Vue({data: {},//对字符串进行分割并重新连接},})

Ming_xm的博客 4429

Vue 计算属性监听属性

前面的话 模板内的表达式常用于简单的运算,当其过长或逻辑复杂时,会难以维护。这篇文章将介绍计算属性监听属性去解决该问题。 计算属性 [什么是计算属性?] 首先,来看一个字符串反转的例子: <div id="app1"> {{ message.split('').reverse().join('') }} </div> <s...

小柒的前端之旅 1万+

vue讲解:计算属性监听属性生命周期钩子组件介绍

vue讲解:计算属性监听属性生命周期钩子组件介绍

weixin_50556117的博客 770

VUE入门 生命周期 计算属性 监听组件【2】

目录 生命周期 什么是生命周期 生命周期流程 计算属性computed计算属性监听计算属性computed 存在的问题 基本使用 案例:字符串倒排 computedmethod的区别 案例:购物车 监听器watch 什么是监听器 基本语法 案例:拆分姓名 组件 什么是组件 组件分类 .........

少年你真的要止步于此嘛。 563

71、商品服务-API-属性分组-前端组件抽取&父子组件交互(一 vue中的函数)

自定义过滤器可用于一些常见的文本格式化,在模板中使用符号调用。

m0_68935893的博客 1030

1. Vue生命周期钩子函数&组件&插槽.md

1. 生命周期 1.1 生命周期图 1.2 生命周期函数 钩子函数 描述 beforeCreate 创建Vue实例之前调用(没有任何的数据) created 创建Vue实例成功后调用(可以在此处发送异步请求后端数据) beforeMount 渲染DOM之前调用 mounted 渲染DOM之后调用 beforeUpdate 重新渲染之前调用(数据更新等操作时,控制DOM重新渲染) updated 重新渲染完成之后调用 beforeDestroy 销毁之前调用 de

清风 555

vue04---计算属性/监听(侦听)属性/Vue生命周期/组件介绍使用/组件间通信/ref属性

组件就是:扩展 HTML 元素,封装可重用的代码,目的是复用例如:有一个轮播图,可以在很多页面中使用,一个轮播有js,css,html组件js,css,html放到一起,有逻辑,有样式,有html#组件的分类:全局组件:可以放在根中,可以在所有组件中使用局部组件:只能在当前组件中使用# 1 全局组件是使用Vue.component定义的,可以在全局任意组件中使用# 2 局部组件是定义在某个组件内的:components,只能用在当前组件中。

python_web全栈 754

六十五、vue生命周期发送Ajax请求

每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子的函数,这给了用户在不同阶段添加自己的代码的机会。

weixin_68531269的博客 1648

Vue3中混入对象组件选项合并的具体流程是什么?

【代码】Vue3中混入对象组件选项合并的具体流程是什么?

alankuo的专栏 445

vue简单学习-路由、生命周期计算属性watch

1、路由Router 概念 路由是负责将进入的浏览器请求映射到特定的组件代码中。即决定了由谁(组件)去响应客户端请求。 简单说路由就是url地址对应的资源的映射,通过一个路径的url地址,可以唯一找到一个资源。 路由不包含在vue中,是一个插件,需要单独下载。 官方地址:https://router.vuejs.org/zh/ 地址:https://unpkg.com/vue-router@3...

vivid9527的博客 251

Vue入门】4、基础API--计算属性监听属性、声明周期

vue中的计算函数、监听属性生命周期

世人万千丶的博客 166

Vue3中混入对象组件选项的合并策略是怎样的?

【代码】在Vue3中混入对象组件选项的合并策略是怎样的?

alankuo的专栏 689

Vue组件属性方法:基础知识与扩展

Vue.js中,组件是构建用户界面的基本单元,而组件属性方法是组件功能的关键部分。本文将探讨Vue组件属性方法的基础知识,并对其进行扩展,帮助读者更好地理解使用Vue组件属性的基础知识什么是属性?在Vue组件中,属性组件状态的一种表达形式,可以是组件内部的数据或者外部传入的数据。属性可以用于控制组件的显示行为,是组件与外部环境交互的重要方式。如何定义属性?在Vue组件中,可以通过props选项来定义属性。props选项是一个数组,包含了组件可以接收的属性名称。当外部环境传入属性值时,组件就可

LuLaaa_的博客 568

vue计算\监听属性、created、mounted

computed:计算属性。在页面一开始就会自动执行。只有当return的值发生改变时才会重新执行 watch:监听属性监听的变量发生改变时执行 created:在模板渲染成html前调用,即通常初始化某些属性值,然后再渲染成视图。 mounted:在模板渲染成html后调用,通常是初始化页面完成后,再对html的dom节点进行一些需要的操作。 <template> <div id="a"> {{m}}<br>{{a}} &lt.

Pert的博客 1355

Vue1---基础知识(基本指令,组件生命周期计算属性、方法、侦听器)

目录 一、基本指令 二、生命周期钩子 三、计算属性,方法与侦听器 四、组件使用细节点 一、基本指令 v-for 循环 v-model 双向绑定 v-on 事件绑定 简写@ v-bind:content="item" 父组件向子组件传递参数绑定 简写:把v-bind去掉就可以 v-text 代替innerText,与{{}}插值表达式有同样的效果 v-html 代替innerHtml, vm.$data vm.$el $号取出来的是vue实例的属性或方法 1、全局组...

m0_37756431的博客 243

基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip

基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip基于vue3.0+esmap+springboot+WebGL的智慧楼宇三维监控系统源码(毕设项目).zip【备注】主要针对计算机相关专业的正在做毕设的学生需要项目实战的Java、VueJavaScript学习者。也可作为课程设计、期末大作业。包含:项目源码、项目说明等,该项目可以直接作为毕设、课程设计使用。也可以用来学习参考借鉴!

上一篇: vue购物车案例,v-model 之 lazy、number、trim,与后端交互
下一篇: vue-cli创建项目,vue项目目录介绍
N10N11
博客等级 码龄6年 313粉丝 73原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值