Vue初识系列【2】

news2024/11/16 17:47:29

一 Vue入门

1.1 Vue简介

  • Vue 是一套用于构建用户界面的渐进式框架,发布于 2014 年 2 月。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库(如:vue-router,vue-resource,vuex)或既有项目整合。
  • MVVM 模式的实现者
    • Model:模型层,在这里表示 JavaScript 对象
    • View:视图层,在这里表示 DOM(HTML 操作的元素)
    • ViewModel:连接视图和数据的中间件,Vue.js 就是 MVVM 中的 ViewModel 层的实现者
    • ViewModel 能够观察到数据的变化,并对视图对应的内容进行更新
    • ViewModel 能够监听到视图的变化,并能够通知数据发生改变

在 MVVM 架构中,是不允许 数据 和 视图 直接通信的,只能通过 ViewModel 来通信,而 ViewModel就是定义了一个 Observer 观察者。

1.2 第一个Vue程序

Vue 不支持 IE8 及以下版本,因为 Vue 使用了 IE8 无法模拟的 ECMAScript 5 特性。但它支持所有兼容 ECMAScript 5 的浏览器。

  • CDN
    • <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
    • <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
  • Vue.js 的核心是实现了 MVVM 模式,她扮演的角色就是 ViewModel 层.
  • 第一个应用程序就是展示数据绑定功能
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<!--view层(视图层)将数据绑定到页面元素-->
<!--只需要在绑定的元素中使用 双花括号 将 Vue 创建的名为 message 属性包裹起来,
即可实现数据绑定功能,也就实现了 ViewModel 层所需的效果-->
<div id="app">{{message}}</div>
<!--导入view-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
</script>
    <script>
        var vm=new Vue({
            /* el:"#app" 绑定元素id*/
            el:"#app",
            <!-- model数据 设置message属性并初始化其值为hello,vue -->
            data:{
                message:"hello,vue!"
            }
        });
    </script>
</body>
</html>

在这里插入图片描述

  • MVVM模式中要求 ViewModel 层就是使用 观察者模式 来实现数据的监听与绑定,以做到数据与视图的快速响应。
  • 在控制台直接输入 vm.message 来修改值。
    在这里插入图片描述

二 基础语法精讲

2.1 v-bind

  • 除了使用插值表达式{{}}进行数据渲染,也可以使用 v-bind指令,它的简写的形式就是一个冒号(:)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<div id="app">
  <!--
  如果要将模型数据绑定在html属性中
  则使用 v-bind 指令,此时title中显示的是模型数据
  -->
  <h1 v-bind:title="message">鼠标悬停查看此处动态绑定的提示信息!</h1>
  <!-- v-bind 指令的简写形式: 冒号(:) -->
  <span :title="message">鼠标悬停查看此处动态绑定的提示信息!</span>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js">
</script>
<script>
  new Vue({
    el: '#app',
    data: {
      message: '页面加载于 ' + new Date().toLocaleString()
    }
  })
</script>
</body>
</html>

在这里插入图片描述

2.2 v-if 系列

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            <h1 v-if="ok==true">true</h1>
            <h1 v-else>false</h1>
            <!--=== 三个等号在JS中表示绝对等于(数据于类型都要相等)-->
            <h1 v-if="dataType==='A'">A</h1>
            <h1 v-else-if="dataType==='B'">B</h1>
            <h1 v-else-if="dataType==='C'">C</h1>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    ok: true,
                    dataType: 'A'
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

2.3 v-for

  • 语法格式
<div id="vue">
	<!--items 是数组,item是数组元素迭代的别名-->
	<li v-for="item in items">
		{{ item.message }}
	</li>
</div>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            <li v-for="(item,index) in items">{{index + 1}}--{{item.message}}</li>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    items: [
                        {message: '徐小明1'},
                        {message: '徐小明2'}
                    ]
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

2.4 v-on

  • v-on 监听事件:
    • 事件有Vue的事件、和前端页面本身的一些事件!这 click 是vue的事件,可以绑定到Vue中的methods 中的方法事件。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--view层 模板-->
<div id="app">
  <button v-on:click="sayHi">按钮</button>
</div>
<!--导入view-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
<script>
  var vm=new Vue({
    el:"#app",
    <!-- model数据  -->
    data:{
      message: "你好!"
    },
    methods: {
        sayHi: function (event) {
            alert(this.message);
        }
    }
  });
</script>
</body>
</html>

在这里插入图片描述

2.5 v-model

  • 双向数据绑定
    • Vue.js 是一个 MVVM 框架,即数据双向绑定,即当数据发生变化的时候,视图也就发生变化,当视图发生变化的时候,数据也会跟着同步变化。
    • 数据双向绑定,一定是对于 UI 控件来说的,非 UI 控件不会涉及到数据双向绑定。对于处理表单,Vue.js 的双向数据绑定用起来就特别舒服了。
    • 可以用 v-model 指令在表单 < input>、< textarea> 及 < select> 元元素上创建双向数据绑定。它会根据控件类型自动选取正确的方法来更新元素。v-model 负责监听用户的输入事件以更新数据,并对一些极端场景进行一些特殊处理。

2.5.1 文本框&单选按钮演示

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            文本:<input type="text" v-model="message">{{message}}<br/>
            性别:<input type="radio" name="sex" value="" v-model="sexType"><input type="radio" name="sex" value="" v-model="sexType"><br/>
            <p>您选择的性别为:{{sexType}}</p>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    message: "666",
                    sexType: ""
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

2.5.2 单、多复选框

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            单复选框:
            <input type="checkbox" id="checkbox" v-model="checked">
            &nbsp;&nbsp;
            <label for="checkbox">{{ checked }}</label>
            <hr/>
            多复选框:
            <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
            <label for="jack">Jack</label>
            <input type="checkbox" id="john" value="John" v-model="checkedNames">
            <label for="john">John</label>
            <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
            <label for="mike">Mike</label>
            <span>选中的值: {{ checkedNames }}</span>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    checked: false,
                    checkedNames: []
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

2.5.3 下拉框

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            下拉框:
            <select v-model="selected">
                <option disabled value=" ">请选择</option>
                <option>A</option>
                <option>B</option>
                <option>C</option>
            </select>
            <span>选中的值:{{selected}}</span>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    selected: ""
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

三 组件

3.1 组件简介

  • 组件是可复用的 Vue 实例,说白了就是一组可以重复使用的模板,跟 JSTL 的自定义标签、Thymeleaf 的 th:fragment 等框架有着异曲同工之妙。通常一个应用会以一棵嵌套的组件树的形式来组织。
    在这里插入图片描述

3.2 Vue 组件

  • 使用 Vue.component() 方法注册组件
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            <!--  自定义组件:传递给组件中的值:props-->
            <Mylist v-for="item in items" v-bind:connect="item"></Mylist>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            // Vue.component注册/定义组件
            //template:组件的模板
            //Mylist自定义组件的名字 首字母必须大写,否则有错误
            //使用 props 属性传递参数 默认规则下 props 属性里的值不能为大写
            Vue.component("Mylist", {
                props: ["connect"],
                template: "<li>{{connect}}</li>"
            });
            //再实例化Vue
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    items: ["java", "linux", "C#"]
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

  • v-for=“item in items” :遍历 Vue 实例中定义的名为 items 的数组,并创建同等数量的组件;
  • v-bind:item=“item” :将遍历的 item 项绑定到组件中 props 定义的名为 item 属性上;
  • = 号左边的 item 为 props 定义的属性名,右边的为 item in items 中遍历的 item 项的值;

四 计算属性

4.1 计算属性简介

  • 计算属性的重点突出在 属性 两个字上(属性是名词),首先它是个属性其次这个属性有 计
    算 的能力(计算是动词
    ),这里的 计算 简单点说,它就是一个能够将计算结果缓存起来的属性(将行为转化成了静态的属性)可以想象为缓存!
  • 计算属性的主要特性就是为了将不经常变化的计算结果进行缓存,以节约我们的系统开销。

4.2 演示

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
        <!--view层 模板-->
        <div id="app">
            <!--注意,一个是方法,一个是属性-->
            <p>调用当前时间的方法:{{currenTime1()}}</p>
            <p>当前时间的计算属性:{{currenTime2}}</p>
        </div>
        <!--导入view-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js">
        </script>
        <script>
            var vm = new Vue({
                el: "#app",
                <!-- model数据  -->
                data: {
                    message: "hello"
                },
                methods: {
                    currenTime1: function () {
                        //返回一个时间戳
                        return Date.now();
                    }
                },
                computed: {
                    //currentTime2 这是一个属性!不是方法
                    /*computed:定义计算属性,调用属性使用 currentTime2,不需要带括号;
                    this.message 是为了能够让 currentTime2 观察到数据变化而变化;*/
                    currenTime2: function () {
                        this.message;
                        //返回一个时间戳
                        return Date.now();
                    }
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

  • methods 和 computed 里的东西不能重名
  • 说明
    • methods:定义方法,调用方法使用 方法名(),需要带括号。
      - computed:定义计算属性,调用属性使用 方法名,不需要带括号。
      - 如果在方法中的值发生了变化,则缓存就会刷新。

五 插槽

5.1 插槽简介

  • 在 Vue 中使用 <slot> 元素,作为承载分发内容的出口。
  • 可以应用在组合组件的场景中。

5.2 待办事项组件演示

  • 比如准备制作一个待办事项组件(todo)
    • 该组件由待办标题(todo-title)待办内容(todo-items)组成,但这三个组件又是相互独立的

5.2.1 定义一个待办事项的组件

<todo></todo>
<script type="text/javascript">
      // 定义一个待办事项的组件
      //slot 插槽
      Vue.component('todo', {
        template: '<div>\
						<div>待办事项</div>\
						<ul>\
							<li>学高数</li>\
							<li>学离散</li>\
							<li>学数据结构</li>\
						</ul>\
					</div>'
      });
</script>

5.2.2 留出一个插槽

  1. 将上面的代码留出一个插槽,即 slot
<script type="text/javascript">
      // 定义一个待办事项的组件
      //slot 插槽
      Vue.component('todo', {
        template: '<div>\
                    <slot name="todo-title"></slot>\
                    <ul>\
                      <slot name="todo-items"></slot>\
                    </ul>\
                  </div>'
      });
</script>
  1. 定义一个名为 todo-title 的待办标题组件 和 todo-items 的待办内容组件
Vue.component("todo-title", {
       props: ['title'],
       template: '<div>{{title}}</div>'
});
//这里的index,就是数组的下标,使用for循环遍历
Vue.component("todo-items", {
    props: ['item', 'index'],
    template: "<li>{{index+1}}-{{item}} </li>"
});
  1. 实例化 Vue 并初始化数据
var vm = new Vue({
    el: "#app",
    data: {
        title: "代办事项",
        todoItems: ["学高数", "学离散", "学数据结构"]
    },
    methods: {
        removeItems: function (index) {
            alert("删除了" + this.todoItems[index]);
            this.todoItems.splice(index, 1);//一次删除一个元素
        }
    }
});
  1. 将这些值,通过插槽插入
 <div id="app">
   <todo>
        <!--:title="title" == v-bing:title="title-->
        <todo-title slot="todo-title" :title="title"></todo-title>
        <todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item"
                    v-bind:index="index" ></todo-items>
    </todo>
</div>

5.3 进阶:自定义事件

  • 数据项在 Vue 的实例中,但删除操作要在组件中完成,那么组件如何才能删除Vue 实例中的数据呢?
  • 此时就涉及到参数传递与事件分发了,Vue 为我们提供了自定义事件的功能很好的帮助我们解决了这个问题。

5.3.1 逻辑图

在这里插入图片描述

5.3.2 步骤

  • 使用 this.$emit(‘自定义事件名’, 参数),操作过程如下:
  1. 在vue的实例中,增加了 methods 对象并定义了一个名为 removeItems的方法
var vm = new Vue({
      el: "#app",
      data: {
          title: "代办事项",
          todoItems: ["学高数", "学离散", "学数据结构"]
      },
      methods: {
          removeItems: function (index) {
              alert("删除了" + this.todoItems[index]);
              this.todoItems.splice(index, 1);//一次删除一个元素
          }
      }
  });
  1. 修改 todo-items 待办内容组件的代码,增加一个删除按钮,并且绑定事件
Vue.component("todo-items", {
    props: ['item', 'index'],
    template: "<li>{{index+1}}-{{item}} <button @click='remove'>删除</button> </li>",
    /*<button @click='removeMethod'>删除</button>与下面的方法绑定*/
    methods: {
        remove: function (index) {
            // this.$emit 自定义事件
            //v-on:remove="removeItems(index)" 绑定自定义事件,并调用删除方法
            this.$emit('remove', index);
        }
    }
});
  1. 修改 todo-items 待办内容组件的 HTML 代码,增加一个自定义事件,比如叫 remove,可以和组件的方法绑定,然后绑定到vue的方法中!
 <!--增加了 v-on:remove="removeItems(index)" 自定义事件,
该事件会调用 Vue 实例中定义的名为 removeItems 的方法-->
<todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item"
            v-bind:index="index" v-on:remove="removeItems(index)" :key="index"></todo-items>

5.3.3 完整代码及效果

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>

        <div id="app">
            <todo>
                <!--:title="title" == v-bing:title="title-->
                <todo-title slot="todo-title" :title="title"></todo-title>
                <!--增加了 v-on:remove="removeItems(index)" 自定义事件,
                该事件会调用 Vue 实例中定义的名为 removeItems 的方法-->
                <todo-items slot="todo-items" v-for="(item,index) in todoItems" :item="item"
                            v-bind:index="index" v-on:remove="removeItems(index)" :key="index"></todo-items>
            </todo>
        </div>

        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script>
        <script type="text/javascript">
            // 定义一个待办事项的组件
            //slot 插槽
            Vue.component('todo', {
                template: '<div>\
                    <slot name="todo-title"></slot>\
                    <ul>\
                      <slot name="todo-items"></slot>\
                    </ul>\
                  </div>'
            });
            Vue.component("todo-title", {
                props: ['title'],
                template: '<div>{{title}}</div>'
            });
            //组件3
            Vue.component("todo-items", {
                props: ['item', 'index'],
                template: "<li>{{index+1}}-{{item}} <button @click='removeMethod'>删除</button> </li>",
                /*<button @click='removeMethod'>删除</button>与下面的方法绑定*/
                methods: {
                    removeMethod: function (index) {
                        // this.$emit 自定义事件
                        //v-on:remove="removeItems(index)" 绑定自定义事件,并调用删除方法
                        this.$emit('remove', index);
                    }
                }
            });
            var vm = new Vue({
                el: "#app",
                data: {
                    title: "代办事项",
                    todoItems: ["学高数", "学离散", "学数据结构"]
                },
                methods: {
                    removeItems: function (index) {
                        alert("删除了" + this.todoItems[index]);
                        this.todoItems.splice(index, 1);//一次删除一个元素
                    }
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

六 Axios

6.1 Axios简介

  • Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,她的主要作用就是实现 AJAX 异步通信
  • 为什么要使用 Axios?
    • 由于 Vue.js 是一个 视图层框架 并且作者(尤雨溪)严格准守 SoC (关注度分离原则),所以Vue.js 并不包含 AJAX 的通信功能

6.2 Axios使用演示

  1. 开发的接口大部分都是采用 JSON 格式,可以先在项目里模拟一段 JSON 数据
{
  "name": "Java",
  "url": "https://baidu.com",
  "page": 1,
  "address": {
    "street": "夷山大道",
    "city": "开封市",
    "country": "中国"
  }
}

  1. 测试代码
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            [v-clock] {
                display: none;
            }
        </style>
    </head>
    <body>
        <div id="vue" v-clock>
            <div>{{info.name}}</div>
            <div>{{info.address.country}}</div>
            <div>{{info.address.street}}</div>
            <div>{{info.address.city}}</div>
            <a v-bind:href="info.url">百度网站</a>
        </div>

        <!--引入 JS 文件-->
        <script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.js"></script>
        <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
        <script type="text/javascript">
            var vm = new Vue({
                el: '#vue',
                data() {
                    return {
                        info: {
                            name: null,
                            address: {
                                country: null,
                                city: null,
                                street: null
                            },
                            url: null
                        }
                    }
                },
                mounted() { //钩子函数
                    axios.get('data.json').then(response => (this.info = response.data));
                }
            });
        </script>
    </body>
</html>

在这里插入图片描述

  • 在data中的数据结构必须要和 Ajax 响应回来的数据格式匹配
  • 使用 axios 框架的 get 方法请求 AJAX 并自动将数据封装进了 Vue 实例的数据对象中

七 Vue的生命周期

  • Vue 的生命周期:Vue 实例有一个完整的生命周期,从开始创建、初始化数据、编译模板、挂载 DOM、渲染→更新→渲染、卸载等一系列过程。通俗说是 Vue 实例从创建到销毁的过程。
  • 在 Vue 的整个生命周期中,它提供了一系列的事件,可以让我们在事件触发时注册 JS 方法,可以让我们用自己注册的 JS 方法控制整个大局,在这些事件响应方法中的 this 直接指向的是 Vue 的实例。

7.1 Vue声明周期图

在这里插入图片描述

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

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

相关文章

ZYNQ printk 缓冲区读取

之前调试kenel &#xff0c;如果kenenl崩溃会&#xff0c;通过内核system.map定位log_buf变量地址&#xff0c;给cpu复位&#xff0c;在u-boot中读取对应的物理地址&#xff0c;即可知道最终内核崩溃最后打出的消息。 我在使用 5.4.154这个内核版本&#xff0c;中没有log_buf这…

金蝶附件上传接口开发思路

1️⃣需求描述&#xff1a;需要通过调用金蝶API接口实现指定单据的附件上传。本文以收料通知单为例&#xff0c;以Java代码示例进行讲解。 tips&#xff1a;阅读本文开始前&#xff0c;希望你是一名开发者同时阅读过&#xff1a; https://vip.kingdee.com/article/872325739310…

【小知识点】为爬虫训练场项目添加 Bootstrap5 时间轴

爬虫训练场建站时间轴&#xff1a;https://pachong.vip/timeline 背景 为了便于记录爬虫训练场项目更新日志&#xff0c;所以集成该功能&#xff0c;实现效果如下所示。 特别备注一下&#xff0c;时间轴是什么&#xff1f; 时间轴是一种常用的网站布局元素&#xff0c;通常用…

Forexclub:特斯拉四季度交付车辆创纪录,你认为2023年特斯拉销量如何

周一特斯拉宣布其2022年第四季度交付了创纪录的405278辆汽车。这一数字创下了该公司的纪录&#xff0c;但低于华尔街的估计。据报道&#xff0c;报告中对交付量的普遍估计为420760。特斯拉称&#xff1a;“2022年&#xff0c;汽车交付量同比增长40%&#xff0c;达到131万辆。”…

基于Vue和SpringBoot的论文检测系统的设计与实现

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;Java全栈软件工程师一枚&#xff0c;来自浙江宁波&#xff0c;负责开发管理公司OA项目&#xff0c;专注软件前后端开发&#xff08;Vue、SpringBoot和微信小程序&#xff09;、系统定制、远程技术指导。CSDN学院、蓝桥云…

【信息论与编码 沈连丰】第七章:信息率失真理论及其应用

【信息论与编码 沈连丰】第七章&#xff1a;信息率失真理论及其应用第七章 信息率失真理论及其应用7.1 失真函数和平均失真度7.2 信息率失真函数7.3 信息率失真函数R(D)的计算7.4 保真度准则下的信源编码定理7.5 信息率失真函数与信息价值第七章 信息率失真理论及其应用 香农第…

网工、运维必备的免费在线画图工具,真的很好用!

都说一图胜千言&#xff0c;一个IT工程师如果能画的一手好图&#xff0c;无论是在方案选项、还是技术交流&#xff0c;都能快速表达自己的想法&#xff0c;让你的思路更加的直观明了&#xff1b;市面上的制图工具有很多&#xff0c;下面就推荐几款好用且免费的工具&#xff0c;…

SaaS服务最大的优势是哪些?(附免费试用)

SaaS服务十大优势 近些年来&#xff0c;SaaS&#xff08;Software-as-a-Service&#xff09;成为整个IT领域中最受欢迎的业务模型之一。由于SaaS的市场每年以近60&#xff05;的速度增长&#xff0c;因此它正在取代更传统的应用市场&#xff0c;并将在未来几年内成为主导模式。…

【非侵入式负载监测】低采样率电动汽车充电的无训练非侵入式负载监测(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

一、TTY子系统介绍

个人主页&#xff1a;董哥聊技术我是董哥&#xff0c;嵌入式领域新星创作者创作理念&#xff1a;专注分享高质量嵌入式文章&#xff0c;让大家读有所得&#xff01;文章目录1、TTY介绍2、控制台终端2.1 系统控制台2.2 当前控制台2.3 虚拟控制台3、伪终端4、串口终端5. 其它类型…

《移动安全》(10)Frida第一篇之环境搭建

0x00 前言 Frida是一款轻量级HOOK框架&#xff0c;我们在电脑上安装Frida环境后&#xff0c;还需要将frida-server上传到目标机器上运行&#xff08;需要Root&#xff09;&#xff0c;通过它来注入进程完成hook操作。本文主要讲述Frida环境的搭建。 0x01 Frida环境搭建 &…

node.js创建网站实例3

node.js访问mysql数据库并把查询结果返回给前端 1.cmd中运行&#xff1a;npm install mysql -s 2.修改api.js的代码 // 1.先引入express模块&#xff0c;express是一个函数 var express require("express") //2.执行express函数&#xff1b;用变量接收express函数…

概论_第2章_重点_随机变量函数的概率分布___定理法和分布函数法的应用

一 定义 概括地说&#xff1a; 随机变量Y是随机变量X的函数。 设g(x) 是一给定的连续函数&#xff0c; 称Yg(X) 为随机变量X的一个函数&#xff0c; Y也是一个随机变量。当X取值 时&#xff0c;Y取值 . ~~~~~~~~~~~~~~ 本文讨论连续型随机变量函数。 定理1: 设X为连续型…

【3.2】Eureka-搭建注册中心/服务注册/服务发现

【3.2】Eureka-搭建注册中心/服务注册/服务发现1 搭建EurekaServer1.1 详细步骤1.2 搭建EurekaServer小结2 服务注册2.1 详细步骤&#xff08;踩坑点&#xff01;解决&#xff09;2.2 模拟多实例部署2.3 服务注册小结3 服务发现3.1 详细步骤4 总结1 搭建EurekaServer 搭建Eure…

2022年,我每天都会用的linux常用命令

作者简介&#xff1a;一名在校云计算网络运维学生、每天分享网络运维的学习经验、和学习笔记。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​​ 目录 前言 一.Linux常用命令 1.Linux命令概述 2.Linux命令的分类 &#…

科研 | 学生研究方向指导 | 技术路线 | 相关学习资源

1. AI某领域 1.1 Python基础 慕课教程&#xff1a;Python 入门语法教程 哔哩哔哩&#xff1a;3小时快速入门Python 1.2 机器学习框架 sklearn框架&#xff1a;菜菜的机器学习sklearn 1.3 深度学习框架 慕课教程&#xff1a;TensorFlow 入门教程 PyTorch官方教程中文版 不…

【回答问题】ChatGPT上线了!给我推荐20个比较流行的AI作画模型!

目录给我推荐20个比较流行的AI作画模型给我推荐20个比较流行的AI作画模型代码给我推荐20个比较流行的AI作画模型 好的&#xff0c;下面是20个比较流行的AI作画模型&#xff1a; DALL-E GAN Deep Dream CycleGAN StyleGAN pix2pix SketchRNN BigGAN ProGAN ESRGAN SPADE BigVA…

Vue+Leaflet.PM插件实现创建和编辑几何图形(点、线、面、圆等)

场景VueLeaflet实现加载OSM显示地图&#xff1a;https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/122317394在上面加载显示OSM的基础上&#xff0c;使用Leaflet.pm插件实现在页面上绘制、编辑、剪切、移动几何元素。Leaflet.pm插件用于创建和编辑几何图层的插件可绘…

如何避免无效外贸邮件营销?

如何避免无效的邮件营销&#xff0c;米贸搜为您整理如下&#xff0c;希望对您有所帮助:1 .和邮件正文一样重视主题主题对于电子邮件就像标题对于文章或博客一样重要。即使你有全宇宙最吸引人的散文诗&#xff0c;或者最吸引人的求婚&#xff0c;如果根本没有人打开这封邮件&…

CSS 中各种居中你真的玩明白了么

前言 页面布局中最常见的需求就是元素或者文字居中了&#xff0c;但是根据场景的不同&#xff0c;居中也有简单到复杂各种不同的实现方式&#xff0c;有的特定场景下可能还有一些稀奇古怪的bug&#xff0c;本篇就带大家一起了解下&#xff0c;各种场景下&#xff0c;该如何使用…