【Vue】三、Vue.js的常用选项

news2024/11/18 17:24:02

后端程序员的vue学习之路

  • 一、选项 / 数据
    • 1、data
    • 2、computed
    • 3、 methods
    • 4、computed 与 methods的区别
    • 5、watch
  • 二、选项 / DOM
    • el
    • template
  • 三、选项 / 生命周期钩子
    • 1、生命周期钩子有如下这些:
    • 2、流程图
    • 2、练习代码
  • 四、选项 / 资源
    • 1、filters
    • 2、directives
    • 3、components
      • 全局组件
      • 局部组件

一、选项 / 数据

1、data

Vue 实例的数据对象。Vue 会递归地把 data 的 property 转换为 getter/setter,从而让 data 的 property 能够响应数据变化。对象必须是纯粹的对象 (含有零个或多个的 key/value 对):浏览器 API 创建的原生对象,原型上的 property 会被忽略。大概来说,data 应该只能是数据 - 不推荐观察拥有状态行为的对象。
举例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test02</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <div id="app" class="container">
       <template v-for="goods in goodsList">
            {{ goods.name }} -- {{ goods.quantity }} -- {{ goods.price }} <br/>
       </template>
       商品数量:{{ totalNum }},合计:{{ totalPrice }}</div>

    <script>
        var vm = new Vue({
            el: "#app",
            data () {
                return {
                    totalPrice: 605,//购买总价
                    totalNum: 4,//购买数量
                    goodsList: [
                        {
                            id: 1,
                            name: '硬盘',
                            quantity: 1,
                            price: 309
                        } {
                            id: 2,
                            name: '内存',
                            quantity: 1,
                            price: 238
                        }
                    ]
                }
            }
        });
    </script>
</body>

</html>

2、computed

计算属性,进行一些运算逻辑,对数据进行处理等;
在模板内的直接使用表达式也非常便利,但是这种方式设计的初衷是用于简单运算,在模板中放入太多的逻辑会让模板过重且难以维护,所以此时就提供了computed计算属性的选项;
举例:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
    <title>test03</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

  <div id="app">
    千米 : <input type="text" v-model="kilometers">: <input type="text" v-model="meters">

    <p>原始字符串: {{ message }}</p>

    <p>计算后反转字符串: {{ message.split('').reverse().join('') }}</p>
    <p>计算后反转字符串: {{ reversedMessage }}</p>
    
    <p>现在时间:{{ now }}</p>
    <p>现在时间:{{ now2 }}</p>
    <p>网站信息:{{ site }} </p>
  </div>

  <script type="text/javascript">
    var vm = new Vue({
      el: '#app',
      data: {
        kilometers: 10,
        meters: 10000,
        message: '联系计算属性computed',
        url: 'http://www.baidu.com'
      },
      //计算属性,返回属性运算后的结果
      computed: {
        reversedMessage: function () {
          //`this`指向vue实例
          return this.message.split('').reverse().join('')
        },
        now: function () {
          return Date.now()
        },
        now2() {
          return Date.now()
        },
        site: {
          //computed计算属性默认提供getter方法
          get: function () {
            return this.message + ' -- ' + this.url
          }
        }
      }
    });                    
  </script>
</body>

</html>

3、 methods

methods 选项主要定义了一些执行函数;

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <span>减少: </span>
        <button @click="sub"> - </button>
        <span> </span>
        <span> {{ num }} </span>

        <button @click="add"> + </button>
        <span>增加:</span>

        <span style="color: red;"> {{ message }} </span>
    </div>

    <script>
        var data = {
            num: "0",
            message: ""
        }
        new Vue({
            el: '#app',
            data: data,
            methods: {
                // 相加函数
                add: function () {
                    if (this.num >= 10) {
                        this.message = "该商品最多可购买10件"
                        return
                    }
                    this.message = ''
                    this.num++
                },
                // 相减函数
                sub: function () {
                    if (this.num <= 0) {
                        this.message = ''
                        return
                    }
                    this.message = ''
                    this.num--
                }
            }
        })
    </script>
</body>

</html>

4、computed 与 methods的区别

1、computed是计算属性,比如你要根据data里一个值随时变化做出一些处理,就用computed;(这里是属性调用)
2、methods里面是定义很多函数,比如你点击事件要执行一个函数,这时候就用methods;
(这里是方法调用)

5、watch

watch选项可以监听值的变化;

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
    <title>test06</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    单位换算器:<br>: <input type="text" v-model="meters">
    千米 : <input type="text" v-model="kilometers">
    万米:<input type="text" v-model="wm">
  </div>

  <script type="text/javascript">
    var vm = new Vue({
      el: '#app',
      data: {
        kilometers: 0,
        meters: 0,
        wm: 0
      },
      watch: {
        meters: function (val) {
          this.meters = val;
          this.kilometers =  val/ 1000;  
          this.wm =   val / 10000
        },

        kilometers: function (val) {
          this.kilometers = val;
          this.meters = val * 1000; 
          this.wm =  val/10
        },
    
        wm: function(val){
         this.wm = val; 
         this.kilometers = val*10;
         this.meters =   val*10000
        }
      }
    });
  </script>
</body>

</html>


二、选项 / DOM

el

把页面上已存在的 DOM 元素作为 Vue 实例的挂载目标;
举例:

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test07</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <span id="appp">

        <div id="app">
            <p v-html="message1"></p>
        </div>

        <div class="app">
            <p v-html="message2"></p>
        </div>

        <div app>
            <p v-html="message3"></p>
        </div>

    </span>

    <script>
        var vm = new Vue({
            el: '#appp',
            data: {
                message1: "<h1>这个是Message1</h1>",
                message2: "<h1>这个是Message2</h1>",
                message3: "<h1>这个是Message3</h1>"
            }
        })
    </script>
</body>

</html>

template

用模板内容 替换 挂载元素的内容,挂载元素的内容都将被模板替换;
举例:

-练习1

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        {{ message }}
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: "这个是正文内容"
            },
            //app的会被template替换
            template: '<div id="template">这是一个 "模板" 内容.</div>'
        })
    </script>
</body>

</html>
  • 练习2
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        {{ message }}
    </div>

    <template id="template"> 
        <span>
            <h1 style="color:red">这是一个模板内容</h1> 
            <h1 style="color:red">这是一个模板内容</h1> 
          
        </span>
    </template> 

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: "这个是正文内容"
            },
            // 会覆盖掉app的内容
            template: '#template'
        })
    </script>
</body>

</html>
  • 练习3
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        {{ message }}
    </div>

    <script type="x-template" id="template">
        <span> 
            <h1 style="color:red">这是一个script标签模板</h1> 
            <h1 style="color:red">这是一个script标签模板</h1> 
            <h1 style="color:red">这是一个script标签模板</h1> 
        </span>
    </script> 

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: "这个是正文内容"
            },
            // 会覆盖掉app
            template: '#template'
        })
    </script>
</body>

</html>

三、选项 / 生命周期钩子

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

1、生命周期钩子有如下这些:

  • beforeCreate :在实例初始化之后,进行数据侦听和事件/侦听器的配置之前同步调用
  • created:在实例创建完成后被立即同步调用
  • beforeMount:在挂载开始之前被调用:相关的 render 函数首次被调用
  • mounted:实例被挂载后调用,这时 el 被新创建的 vm.$el 替换了。
  • beforeUpdate:在数据发生改变后,DOM 被更新之前被调用。
  • updated:在数据更改导致的虚拟 DOM 重新渲染和更新完毕之后被调用
  • activated:被 keep-alive 缓存的组件激活时调用。该钩子在服务器端渲染期间不被调用
  • deactivated:被 keep-alive 缓存的组件失活时调用。该钩子在服务器端渲染期间不被调用。
  • beforeDestroy:实例销毁之前调用。在这一步,实例仍然完全可用。该钩子在服务器端渲染期间不被调用。
  • destroyed:实例销毁后调用。该钩子在服务器端渲染期间不被调用。
  • errorCaptured:在捕获一个来自后代组件的错误时被调用。

2、流程图

在这里插入图片描述

2、练习代码

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <input type="text" v-model="message"> 
    </div>

    <script>
        var vm = new Vue({
            el: '#app',
            data: {
                message: "测试vue的声明周期钩子"
            },
            methods: {
                showMessage : function() {
                    console.log("showMessage()方法执行.")
                }
            },

            beforeCreate() {
                // this.showMessage();
                console.log('------------beforeCreate--------------');
            },
            created() {
                console.log('------------created--------------');
                console.log(this.message);
                this.showMessage();
            },

            beforeMount() {
                console.log('------------beforeMount--------------');
                console.log(this.message);
                this.showMessage();
            },
            mounted() {
                console.log('------------mounted--------------');
                console.log(this.message);
                this.showMessage();
            },


            beforeUpdate() {
                console.log('------------beforeUpdate--------------');
                console.log(this.message);
                this.showMessage();
            },
            updated() {
                console.log('------------updated--------------');
                console.log(this.message);
                this.showMessage();
            },

            
            activated() {
                console.log('------------activated--------------');
                console.log(this.message);
                this.showMessage();
            },
            deactivated() {
                console.log('------------deactivated--------------');
                console.log(this.message);
                this.showMessage();
            },
            beforeDestroy() {
                console.log('------------beforeDestroy--------------');
                console.log(this.message);
                this.showMessage();
            },
            destroyed() {
                console.log('------------destroyed--------------');
                console.log(this.message);
                this.showMessage();
            },
            errorCaptured() {
                console.log('------------errorCaptured--------------');
                console.log(this.message);
                this.showMessage();
            }
        })
    </script>
</body>

</html>

四、选项 / 资源

1、filters

Vue.js 允许自定义过滤器,常用于一些文本格式化,由 “管道符” 连接;
包含 Vue 实例可用过滤器的哈希表。

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>test12</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
  <div id="app">
    <p>{{ message }}</p>

    <input v-model="message">

    <p>
      {{ message | capitalize | capitalize2 }}
    </p>
    
  </div>

  <script>
    new Vue({
      el: '#app',
      data: {
        message: 'www.baidu.com'
      },
      methods: {

      },
      filters: {
        //把字符变成大写
        capitalize: function (value) {
          if (!value) return ''
          value = value.toString()
          return value.toUpperCase()
        },
        capitalize2: function (value) {
          if (!value) return ''
          value = value.toString()
          return value.substring(0,5)
        }
      }
    })
  </script>
</body>

</html>

2、directives

通过directives实现自定义的指令
全局自定义指令:Vue.directive()
局部自定义指令:directives

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>test</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

  <input v-focus>

  <script>
  // 注册一个全局自定义指令 `v-focus`
Vue.directive('focus', {
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
    // 聚焦元素
    el.focus()
  }
})


  </script>
</body>

</html>

3、components

组件(Component)是Vue.js最强大的功能之一,组件可以封装可重用的代码;
组件让我们可以用独立可复用的小组件来构建大型应用,几乎任意类型的应用的界面都可以抽象为一个一个的组件树;
在这里插入图片描述
创建一个组件的语法格式:

Vue.component(tagName, options)

tagName 为组件名,options 为配置选项,注册后,我们可以使用以下方式来调用组件:

<tagName></tagName>

全局组件

所有实例都能用全局组件;

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <title>test</title>
  <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

  <div id="components-demo">
    <button-counter></button-counter>
  </div>

  <script>
    // 定义一个名为 button-counter 的新组件
    Vue.component('button-counter', {
      data: function () {
        return {
          count: 0
        }
      },
      template: '<button v-on:click="count++">You clicked me {{ count }} times.</button>'
    })
    new Vue({ el: '#components-demo' });

  </script>
</body>

</html>

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Vue测试实例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>
    <div id="app">
        <!-- 自定义的vue组件 -->
        <power></power>
    </div>

    <script>
        // 注册
        Vue.component('power', {
            template: '<h1>自定义全局组件!</h1>'
        })

        // 创建根实例
        new Vue({
            el: '#app'
        })
    </script>
</body>

</html>

局部组件

我们也可以在实例选项中注册局部组件,这样组件只能在这个实例中使用;

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>Vue测试实例</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>

<body>

    <div id="app">
        <!-- 自定义组件 -->
        <power></power>
    </div>

    <script>
        var Child = {
            template: '<h1>自定义局部组件!</h1>'
        }

        //创建根实例
        new Vue({
            el: '#app',
            components: {
                //<power>将只在该vue实例中可用
                'power': Child
            }
        })
        
        // new Vue({
        //     el: '#app',
        //     components: {
        //         //<power>将只在该vue实例中可用
        //         'power': {
        //             template: '<h1>自定义局部组件!</h1>'
        //         }
        //     }
        // })
    </script>
</body>

</html>

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

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

相关文章

大半夜睡不着,聊一下在小外包公司工作一年后的感想吧

我不知道当年怎么想的&#xff0c;能在一个外包公司一干就是6年&#xff0c;后来终于跳出来了&#xff0c;现在的公司虽然不是什么大厂吧&#xff0c;但至少是个正经的互联网企业&#xff0c;待遇也不错。 其实很多地方的朋友都有提到外包公司的一些弊端&#xff1a; 1.工期短…

自己动手实现一个轮播图组件

1. 轮播图原理 轮播图的原理可以总结为两点&#xff1a; 定位的运用定时器的运用 轮播图的每一张图横向依次排列。在最外层还有一个父级盒子&#xff0c;它的宽度刚好是一张图片的宽度&#xff0c;第一张图没有设置隐藏超出部分&#xff0c;第二张图隐藏了超出部分。 当我们…

河道非法采砂识别系统 yolov5

河道非法采砂识别系统通过yolov5网络架构深度学习技术对河道非法采砂行为进行实时分析检测&#xff0c;如yolov5架构模型发现现场违规采砂&#xff0c;则立即抓拍回传后台。YOLO算法- YOLO算法是一种基于回归的算法&#xff0c;它不是选择图像中有趣的部分&#xff0c;而是预测…

世界杯已开赛,哪些看球设备让你觉得身临其境?

笔者在父亲的影响下&#xff0c;从1994年美国世界杯开始接触足球&#xff0c;因为当时 CCTV5 对拥有着小世界杯之称的意甲转播&#xff0c;成为了一名意大利足球队的忠实拥趸&#xff0c;一直到现在。 四年一次的世界杯也成了我从不错过的足球盛宴。2002年日韩世界杯和2006年德…

Unity使用飞书在线表格做配置表

团队使用飞书进行项目管理&#xff0c;使用在线表格进行配置表的编写&#xff0c;而飞书也提供了在线表格操作的Api&#xff0c;这样我们可以直接在Unity中同步云端表格数据 飞书配置 首先需要进入飞书开发者后台创建应用https://open.feishu.cn/app 创建应用后记录AppId和Ap…

CAJ转pdf在线网址

知网下载论文格式为CAJ&#xff0c;不想下载它的阅读器&#xff0c;网上找了一下转pdf的网站&#xff0c;记录一下&#xff1a; 1.Caj2Pdf在线 https://caj.bookcodes.cn/ 2.speedpdf-CAJ转PDF https://speedpdf.cn/zh-cn/convert/caj-to-pdf?chbaiducp

Android---ViewPager

目录 一、ViewPager 缓存页面与预加载 缓存页面 预加载 预加载带来的问题 解决(性能优化) 二、ViewPager 懒加载机制 ViewPager源码 ViewPager 是怎么展示出来的 Populate FragmentPagerAdapter 三、ViewPager 与 ViewPager2 的差异 一、ViewPager 缓存页面与预加载 …

为什么企业要注重数据安全?六大优势分析

数据加密是将数据从可读格式转换为编码格式。两种最常见的加密方法是对称加密和非对称加密。这些名称是指是否使用相同的密钥进行加密和解密&#xff1a; ●对称加密密钥&#xff1a;这也称为私钥加密。用于编码的密钥与用于解码的密钥相同&#xff0c;使其最适合个人用户和封…

java jar 的修改

java jar 的修改目录概述需求&#xff1a;设计思路实现思路分析1.编译生成class文件2.生产src文件3.单独将对应的java 类编译成class文件4.替换原来的class文件参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bus…

prettytable辅助打印表格的Python库

这个库的主要作用是&#xff1a;当我们想要结构话的打印一些表格类的数据时会让我们的视觉体验变好 一、安装 一行命令&#xff1a;python -m pip install -U prettytable 搞定 二、使用 1、添加数据 首先来看一个打印的效果 要想实现上边的效果使用下边的代码&#xff1a…

el-Dropdown 两个下拉框之间的动态绑定 实现默认选中值

目录 业务场景 官方链接 实现效果 使用框架 代码展示 template代码 script代码 变量定义 事件定义 onMounted事件 courseClass事件--课程班级绑定 defaultValue事件 optionChange事件 changeClass事件 为什么要给课程的每个选项也绑定click事件&#xff1f;作用是什么…

数字化时代,基于令牌的身份验证是如何工作?

一、背景 数字化转型给用户带来了安全问题&#xff0c;以保护他们的身份免受假冒。据美国诺顿称&#xff0c;平均每年有 80 万个帐户被黑客入侵。需要用于身份验证的高安全性系统和网络安全法规。 传统方法依赖于使用用户名和密码的单级身份验证来授予对 Web 资源的访问权限。…

Superset安装与使用

第1章 Superset入门 1.1 Superset概述 Apache Superset是一个开源的、现代的、轻量级BI分析工具&#xff0c;能够对接多种数据源、拥有丰富的图表展示形式、支持自定义仪表盘&#xff0c;且拥有友好的用户界面&#xff0c;十分易用。 1.2 Superset应用场景 由于Superset能够…

局域网yum仓库搭建

有时候在线的yum源安装特别慢还经常会断,制作自己的一个本地yum源是有必要的。 使用场景,一个服务器集群,只有一台服务器能连接外网,连接外网那台服务器就可以通过reposync把外网源的包全部同步下来放在本地,集群中其他服务器就以这台服务器为包库使用 yum 安装,当然,同…

nginx 后退

nginx 后退目录概述需求&#xff1a;设计思路实现思路分析1.使用nginx的2.配置nginx属性即可参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for chang…

TextMeshPro快速上手

Text Mesh Pro是Unity的新的文本显示对象&#xff0c;最大的优点是放大以后不会有锯齿&#xff0c;而且有更多的显示效果。缺点是需要配置才能使用&#xff0c;不像原来的直接就可以用。 官方资源 http://digitalnativestudios.com/textmeshpro/docs/ https://docs.unity3d.c…

MrDoc的excel文件导入(Luckysheet)空白行问题问题

今天继续测试MrDoc&#xff0c;虽然写这个文的时候我的MrDoc的文还没整完。。 但是今天这个问题是一个比较独立的模块&#xff0c;就单独说吧。 文章目录问题&#xff1a;导入缓慢省流&#xff1a;修改Luckysheet的初始化参数寻找&#xff1a;MrDoc使用的表格技术破案&#xff…

【Redis—过期策略和内存淘汰策略】

Reids过期策略 设置过期时间 expire <key> <n>&#xff1a;设置 key 在 n 秒后过期&#xff0c;比如 expire key 100 表示设置 key 在 100 秒后过期&#xff1b; pexpire <key> <n>&#xff1a;设置 key 在 n 毫秒后过期&#xff0c;比如 pexpire ke…

二极管与三极管

能带Energy band 能带理论是用量子力学的方法研究固体内部电子运动的理论。 能带理论的作用&#xff1a;说明了导体与绝缘体、半导体的区别所在&#xff1b;解释了晶体中电子的平均自由程问题。 根据电子填充的情况&#xff0c;能带分为传导带&#xff08;简称导带&#xff0c…

(二十二)Vue之脚手架的使用

文章目录基本使用脚手架文件结构分析mian.js文件关于不同版本的Vue关于render函数关于vue.config.js配置文件关于index.html文件演示程序Vue学习目录 上一篇&#xff1a;&#xff08;二十一&#xff09;Vue之单文件组件 Vue 脚手架是 Vue 官方提供的标准化开发工具&#xff0…