vue2知识点4(组件 全局组件 局部组件 父子组件的生命周期钩子函数 父子组件之间的数据传递 局部路由)

目录

一、组件

1. 介绍

2. 全局组件

使用全局组件

实例和组件之间的数据不互通

组件复用

data函数式和data对象的区别:

注意

3. 局部组件

全局组件和局部组件的区别:

注册多个子组件(局部组件)

4. 父子组件的生命周期钩子函数

加载渲染过程

更新过程(当数据变化时)

销毁过程

总结

父子组件的生命周期钩子函数执行流程:

5. 父子组件之间的数据传递

正向传递 数组

 正向传递 嵌套组件传递数据(分开传递)

正向传递 以对象的形式接收数据

逆向传递

二、局部路由


一、组件

1. 介绍

        组件 (Component) 是 Vue.js 最强大的功能之一,它是html、css、js等的一个聚合体,封装性和隔离性非常强。

组件化:

  • 将一个具备完整功能的项目的一部分分割多处使用
  • 加快项目的进度
  • 可以进行项目的复用

组件注册分为:

全局注册和局部注册

Vue.component( id, [definition] )

  • 参数

    • {string} id

    • {Function | Object} [definition]

  • 用法

    注册或获取全局组件。注册还会自动使用给定的 id 设置组件的名称

// 注册组件,传入一个扩展过的构造器
Vue.component('my-component', Vue.extend({ /* ... */ }))// 注册组件,传入一个选项对象 (自动调用 Vue.extend)
Vue.component('my-component', { /* ... */ })// 获取注册的组件 (始终返回构造器)
var MyComponent = Vue.component('my-component')

2. 全局组件

使用全局组件

Vue.component('组件名称', { }),第1个参数是标签名称,第2个参数是一个选项对象。全局组件注册后,任何vue实例都可以用。

必须传入template

<body><div id="app"><!-- 在实例中展示组件 --><zujian></zujian></div>
</body>
<script src="../js/vue.min.js"></script>
<script>//定义全局组件Vue.component('zujian', {template: "<div><div>组件中的内容1</div><div>组件中的内容2</div></div></div>",})//创建vue实例let vm = new Vue({data() {return {}}})vm.$mount('#app');
</script>

<body><div id="app"><div>{{str}}</div><!-- 在实例中展示组件 --><zujian></zujian></div><!--组件的视图模板中只能有一个容器 --><template id="zujian"><div><div>{{str}}</div></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>/* 实例和组件之间的数据不互通*///定义全局组件Vue.component('zujian', {template: "#zujian",//绑定组件的视图//组件中的data必须使用函数式,返回一个对象/* data函数式和data对象的区别:data对象:如果在父组件中定义数据,子组件中使用该数据并修改,会影响父组件中原本的数据,以及其他使用该数据的子组件data函数式:当子组件想要使用data中的数据时,父组件会单独返回个数据给子组件,当子组件修改该数据时,对父组件原本的数据没有影响注意:组件中只能使用函数式*/data() {return {str: '这是组件中的数据str'}},})//创建vue实例let vm = new Vue({data() {return {str: '这是实例中的数据str'}}})vm.$mount('#app');
</script>

实例和组件之间的数据不互通

<body><div id="app"><!-- <div>{{str}}</div> --><!-- 在实例中展示组件 --><zujian></zujian><hr><zujian></zujian></div><!--组件的视图模板中只能有一个容器 --><template id="zujian"><div><div @click="changeStr">{{str}}</div><h3>count:{{num}}</h3><button @click="num++">点我+++</button></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>/* 实例和组件之间的数据不互通*///定义全局组件Vue.component('zujian', {template: "#zujian",//绑定组件的视图//组件中的data必须使用函数式,返回一个对象/* data函数式和data对象的区别:data对象:如果在父组件中定义数据,子组件中使用该数据并修改,会影响父组件中原本的数据,以及其他使用该数据的子组件data函数式:当子组件想要使用data中的数据时,父组件会单独返回个数据给子组件,当子组件修改该数据时,对父组件原本的数据没有影响注意:组件中只能使用函数式*/data() {return {str: '这是组件中的数据str',num: 0}},//组件中的普通方法methods: {changeStr() {this.str = '这是修改后组件中的数据str'}}})//创建vue实例let vm = new Vue({data() {return {str: '这是实例中的数据str'}}})vm.$mount('#app');
</script>

组件复用

<body><div id="app"><!-- <div>{{str}}</div> --><!-- 在实例中展示组件 --><zujian2></zujian2><hr><zujian1></zujian1><zujian2></zujian2><zujian2></zujian2></div><!--组件的视图模板中只能有一个容器 --><template id="zujian1"><div><div>{{str}}</div></div></template><template id="zujian2"><div><div>{{str}}</div></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>/* 实例和组件之间的数据不互通组件和组件之间的数据不互通组件可以复用*///定义全局组件Vue.component('zujian1', {template: "#zujian1",//绑定组件的视图data() {return {str: '这是组件1中的数据str'}}})Vue.component('zujian2', {template: "#zujian2",//绑定组件的视图data() {return {str: '这是组件2中的数据str'}}})//创建vue实例let vm = new Vue({data() {return {str: '这是实例中的数据str'}}})vm.$mount('#app');
</script>

data函数式和data对象的区别:

  • data对象:如果在父组件中定义数据,子组件中使用该数据并修改,会影响父组件中原本的数据,以及其他使用该数据的子组件
  • data函数式:当子组件想要使用data中的数据时,父组件会单独返回个数据给子组件,当子组件修改该数据时,对父组件原本的数据没有影响

注意:组件中只能使用函数式data必须使用函数形式:return {}

data对象和data函数的区别

  • 【data对象】:一个项目中只有一个vue实例,一个实例只对应一个id,其他的页面的内容称为组件(vuecomponent,简称vc),所有组件会继承实例,如果是data是对象的形式,当每一个组件访问实例中的data对象,修改data中的属性,其他的组件也会访问到,对象是引用数据类型,其中一个组件修改数据后就会影响其他组件及实例中的数据,造成数据混乱
  • 【data函数】:return一个对象,如果每一个组件需要父组件(或实例)提供一个data中的变量,父组件(或实例)就会直接return给子组件,子组件就会得到一个单独的对象,这样就不会对其他子组件以及父组件中的数据产生影响

注意

  • 实例和组件之间的数据不互通
  • 组件和组件之间的数据不互通

  • 组件可以复用

  • 组件的视图模板中只能有一个容器
  • 组件中的data必须使用函数式,返回一个对象

3. 局部组件

全局组件和局部组件的区别:

  • 1.全局组件在当前项目的任何地方都可以使用,局部组件只能在当前注册的父组件中使用
  • 2.全局组件适用于公共的组件,如导航栏、弹框、页脚等;局部组件适用于一些特定场景下使用的组件

局部组件(将child组件注册为实例的子组件)
通过components 

<body><!-- 创建一个容器(实例的视图)--><div id="app"><child></child></div><!-- 组件的视图模板 --><template id="child"><div><div>{{str}}</div><div v-for="item in arr" :key="item"><div>{{item}}</div></div></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>//创建vue实例let vm = new Vue({data() {return {}},//局部组件(将child组件注册为实例的子组件)components: {"child": {template: "#child",//绑定子组件的视图模板data() {//子组件的model数据return {str: "这是子组件中的数据",arr: ["哈哈哈", "hhh", "嘿嘿嘿"]}}}}})//绑定实例的视图vm.$mount("#app");</script>

注册多个子组件(局部组件)

<body><!-- 创建一个容器(实例的视图)--><div id="app"><parent></parent><hr><hr><parent></parent></div><!-- 父组件的视图模板 --><template id="parent"><div><div>{{str}}</div><!-- 展示子组件 --><child></child></div></template><!-- 子组件的视图模板 --><template id="child"><div><div>{{str}}</div></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>//父组件Vue.component("parent", {template: "#parent",data() {return {str: "这是父组件中的数据"}},components: {"child": {template: "#child",data() {return {str: "这是子组件中的数据"}}}}})let vm = new Vue({data() {return {}}})vm.$mount("#app");</script>

4. 父子组件的生命周期钩子函数

Vue的父子组件生命周期钩子函数的执行顺序可以清晰地分为几个阶段,包括加载渲染过程、更新过程以及销毁过程。以下是详细的解释:

加载渲染过程
  1. 父组件的beforeCreate:在父组件实例被创建之前调用。
  2. 父组件的created:在父组件实例创建完成后调用。
  3. 父组件的beforeMount:在父组件开始挂载之前调用,此时模板已经编译成虚拟DOM。
  4. 子组件的beforeCreate和created:在父组件的beforeMount钩子内,子组件的beforeCreate和created钩子依次被调用。
  5. 子组件的beforeMount和mounted:子组件的虚拟DOM挂载成真实DOM后,mounted钩子被调用。
  6. 父组件的mounted:在子组件挂载完成后,父组件的mounted钩子被调用,表示整个父组件及其子组件都已经挂载完成。
更新过程(当数据变化时)
  1. 父组件的beforeUpdate:在父组件的虚拟DOM重新渲染和打补丁之前调用。
  2. 子组件的beforeUpdate和updated:子组件根据新的数据重新渲染和更新。
  3. 父组件的updated:在父组件的DOM更新后调用。
销毁过程
  1. 父组件的beforeDestroy:在父组件销毁之前调用,用于执行清理任务。
  2. 子组件的beforeDestroy和destroyed:子组件在父组件销毁之前先进行销毁。
  3. 父组件的destroyed:父组件及其所有子组件都已经被销毁。
总结

这个顺序确保了Vue组件的层次结构在生命周期中的正确管理。在加载渲染过程中,父组件的生命周期钩子会在子组件的生命周期钩子之前触发,而在销毁过程中,子组件会先被销毁,然后才是父组件。同样,在更新过程中,父组件的更新会触发子组件的重新渲染,但父组件的更新钩子会在子组件的更新钩子之后触发。这些生命周期钩子函数顺序可以帮助开发者在合适的时机执行相应的逻辑

父子组件的生命周期钩子函数执行流程:

父组件beforecreate创建前--父组件created创建后--父组件beforeMount挂载前--子组件beforecreate创建前 --子组件created创建后 --子组件beforeMount挂载前 --子组件mounted挂载后 --父组件mounted挂载后

<body><!-- 创建一个容器(实例的视图)--><div id="app"><parent></parent></div><!-- 父组件的视图模板 --><template id="parent"><div><div>{{str}}</div><!-- 展示子组件 --><child></child></div></template><!-- 子组件的视图模板 --><template id="child"><div><div>{{str}}</div></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>//父组件Vue.component("parent", {template: "#parent",data() {return {str: "这是父组件中的数据"}},beforeCreate() {console.log("【父组件】创建前");},created() {console.log("【父组件】创建后");},beforeMount() {console.log("【父组件】挂载前");},mounted() {console.log("【父组件】挂载后");},components: {"child": {template: "#child",data() {return {str: "这是子组件中的数据"}},beforeCreate() {console.log("【子组件】创建前");},created() {console.log("【子组件】创建后");},beforeMount() {console.log("【子组件】挂载前");},mounted() {console.log("【子组件】挂载后");}}}})let vm = new Vue({data() {return {}},beforeCreate() {console.log("【实例】创建前");},created() {console.log("【实例】创建后");},beforeMount() {console.log("【实例】挂载前");},mounted() {console.log("【实例】挂载后");},})vm.$mount("#app");</script>

5. 父子组件之间的数据传递

  • 1.正向传递数据(父传子):vue中支持正向传递数据父组件中通过自定义属性将数据传递给子组件,子组件中通过props属性接收数据
  • 2.逆向传递数据(子传父): vue中不支持逆向传递数据子组件通过$emit()方法,使用自定义监听事件向父组件传递数据

正向传递 数组

<body><!-- 通过自定义属性传递给子组件数据 --><div id="app"><zujian :zifuchuan="str" :tupian="path"></zujian></div><!--组件的视图模板 --><template id="zujian"><div><div>{{zifuchuan}}</div><img :src="tupian"></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>let vm = new Vue({data() {return {str: '这是实例中的数据str',path: "../img/zkt.jpg"}},components: {"zujian": {template: "#zujian",data() {return {}},props: ["zifuchuan", "tupian"]}}})vm.$mount("#app");
</script>

 正向传递 嵌套组件传递数据(分开传递)

  1. HTML结构:

    • <div id="app">: 这是Vue实例挂载的根DOM元素。
    • <parent v-for="item in arr" :key="item.title" :tupian="item.imgPath" :biaoti="item.title"></parent>: 使用v-for指令循环遍历数组arr中的每个项,并为每个项创建一个parent组件实例。传递给parent组件的属性有tupian(图片路径)和biaoti(标题)。
  2. Vue模板:

    • <template id="parent">: 定义了一个名为parent的Vue模板,它包含一个<div>元素,里面有一个图片标签和一个child组件。
    • <template id="child">: 定义了一个名为child的Vue模板,它包含一个带有标题的<div>元素。
  3. Vue脚本:

    • Vue.component("parent", {...}): 定义了一个名为parent的Vue组件,它接收tupianbiaoti两个属性,并注册了一个名为child的子组件。
    • let vm = new Vue({...}): 创建了一个新的Vue实例,并指定了数据属性arr,该数组包含了多个对象,每个对象包含imgPath(图片路径)和title(标题)属性。
    • vm.$mount("#app");: 将Vue实例挂载到页面上的#app元素。
<body><div id="app"><parent v-for="item in arr" :key="item" :tupian="item.imgPath" :biaoti="item.title"></parent></div><template id="parent"><div><img :src="tupian" alt=""><!-- {{biaoti}} --><child :childtitle="biaoti"></child></div></template><template id="child"><div><h2>{{childtitle}}</h2></div></template></body>
<script src="../js/vue.min.js"></script>
<script>Vue.component("parent", {template: "#parent",data() {return {}},// 用来接收父组件传来的数据props: ["tupian", "biaoti"],// 注册子组件components: {"child": {template: "#child",props: ["childtitle"]}}})let vm = new Vue({data() {return {arr: [{ imgPath: "../img/cxk01.png", title: "图片1" },{ imgPath: "../img/cxk02.png", title: "图片2" },{ imgPath: "../img/cxk03.png", title: "图片3" }]}}})vm.$mount("#app");
</script>

正向传递 以对象的形式接收数据

在Vue实例中,我们使用v-for指令遍历arr数组,并将每个对象传递给parent组件。parent组件再将接收到的对象中的title属性传递给child组件。最后,在child组件中显示标题

<body><div id="app"><parent v-for="item in arr" :key="item" :obj="item"></parent></div><template id="parent"><div><img :src="obj.imgPath" alt=""><child :biaoti="obj.title"></child></div></template><template id="child"><div><h2>{{biaoti}}</h2></div></template></body>
<script src="../js/vue.min.js"></script>
<script>Vue.component("parent", {template: "#parent",data() {return {}},// 用来接收父组件传来的数据props: ["obj"],// 注册子组件components: {"child": {template: "#child",props: ["biaoti"]}}})let vm = new Vue({data() {return {arr: [{ imgPath: "../img/cxk01.png", title: "图片1" },{ imgPath: "../img/cxk02.png", title: "图片2" },{ imgPath: "../img/cxk03.png", title: "图片3" }]}}})vm.$mount("#app");
</script>

逆向传递

通过子组件 $emit( 参数 1,【参数 2】 )

参数 1:定义的事件名 参数 2:要传递的数据

子组件通过$emit()方法,使用自定义监听事件向父组件传递数据

<body><div id="app"><div>子组件传递过来的数据:{{ziStr}}</div><!-- 子组件通过自定义监听事件将数据传递给父组件 --><parent @event="fun"></parent></div><template id="parent"><div><button @click="run">子组件给父组件传递数据</button></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script>Vue.component("parent", {template: "#parent",data() {return {str: '这是子组件中的数据str'}},methods: {run() {// 向上传递数据: 通过自定义监听事件传递// $emit("事件名",要传递的真实数据)this.$emit('event', this.str);}}})let vm = new Vue({data() {return {ziStr: ""}},methods: {fun(value) {console.log("value::", value);this.ziStr = value;}}})vm.$mount("#app");
</script>

二、局部路由

Vue Router 是 Vue.js 官方的路由管理器。它和 Vue.js 的核心深度集成,让构建单页面应用变得易如反掌。路由实际上就是可以理解为指向,就是我在页面上点击一个按钮需要跳转到对应的页面,这就是路由跳转;

  • router: 实例的路由属性
  • VueRouter: Vue官方提供的路由对象
  • routes: 路由的详细配置信息

首先我们来学习三个单词(route,routes,router):
1,route:首先它是个单数,译为路由,即我们可以理解为单个路由或者某一个路由;
2,routes:它是个复数,表示多个的集合才能为复数;即我们可以理解为多个路由的集合,JS中表示多种不同状态的集合的形式只有数组和对象两种,事实上官方定义routes是一个数组;所以我们记住了,routes表示多个数组的集合;
3,router:译为路由器,上面都是路由,这个是路由器,我们可以理解为一个容器包含上述两个或者说它是一个管理者,负责管理上述两个;举个常见的场景的例子:当用户在页面上点击按钮的时候,这个时候router就会去routes中去查找route,就是说路由器会去路由集合中找对应的路由;

需要导入vue-router.js 文件

<style>* {margin: 0;padding: 0;}ul {list-style: none;}#list {width: 100%;height: 50px;background-color: greenyellow;margin: 30px auto;display: flex;flex-wrap: wrap;justify-content: space-around;}#list>li {width: 30%;height: 100%;text-align: center;line-height: 50px;}
</style><body><div id="app"><ul id="list"><li><!-- router-link 代替a链接to属性代替a链接中的href属性 --><router-link to="/tianmao">天猫</router-link></li><li><router-link to="/taobao">淘宝</router-link></li><li><router-link to="/jingdong">京东</router-link></li></ul><!-- router-view 路由的占位 --><router-view></router-view></div><template id="tianmao"><div><h2>这是天猫的内容</h2><h2>这是天猫的内容</h2><h2>这是天猫的内容</h2><h2>这是天猫的内容</h2><h2>这是天猫的内容</h2></div></template><template id="taobao"><div><h2>这是淘宝的内容</h2><h2>这是淘宝的内容</h2><h2>这是淘宝的内容</h2><h2>这是淘宝的内容</h2><h2>这是淘宝的内容</h2></div></template><template id="jingdong"><div><h2>这是京东的内容</h2><h2>这是京东的内容</h2><h2>这是京东的内容</h2><h2>这是京东的内容</h2><h2>这是京东的内容</h2></div></template>
</body>
<script src="../js/vue.min.js"></script>
<script src="../js/vue-router.js"></script>
<script>let vm = new Vue({data() {return {}},/*  router: 实例的路由属性VueRouter: Vue官方提供的路由对象routes: 路由的详细配置信息 */router: new VueRouter({routes: [{path: "/",component: {template: "#tianmao"}},{path: "/tianmao",component: {template: "#tianmao"}},{path: "/taobao",component: {template: "#taobao"}},{path: "/jingdong",component: {template: "#jingdong"}}]})})vm.$mount("#app");
</script>

注意:需要使用router-view 进行路由的占位

router-link 代替a链接

                 to属性代替a链接中的href属性

这里不使用动态绑定 要不然运行不出来

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RIP路由协议之网络工程师软考中级

几种常见的路由协议 路由协议名称路由协议分类&#xff08;工作原理&#xff09;协议分类&#xff08;工作区域&#xff09;路由算法RIP距离矢量IGPBellman-FordOSPF-ISIS链路状态IGPDijkstraBGP路径向量EGP/ IGP称为内部网关协议&#xff08;I人&#xff0c;内向&#xff09…

python判断和循环语句

python判断语句 1、单个条件判断 if 条件:满足条件要做的事情1满足条件要做的事情2 else:不满足条件要做的事情3不满足条件要做的事情2 2、多个条件判断&#xff08;满足条件1就不会判断条件2&#xff09; else可以省略不写 if 条件1:满足条件1要做的事情a满足条件1要做的事…

爆款短视频素材去哪里找?做抖音短视频爆款热门素材网站分享

爆款短视频素材寻宝&#xff1a;哪里是创作者的宝藏地&#xff1f; 在短视频创作的世界里&#xff0c;找到高质量的素材是打造爆款视频的关键。无论你是初入短视频领域的新手&#xff0c;还是拥有庞大粉丝群的资深创作者&#xff0c;选择合适的视频素材网站可以极大提升你的视…

NET 定时器 Timer和线程Thread

是否可以更新UI线程的内容 》》》资源占用&#xff1a;‌ 》定时器可以的&#xff0c;不存在跨线程问题 》Thread创建的线程&#xff0c;不能更新UI线程的内容&#xff0c; 存在跨线程 Control.CheckForIllegalCrossThreadCalls false;//默认是True 》》执行方式&#xff…

软考:软件设计师 — 11.UML 建模

十一. UML 建模 UML 建模部分是下午场考试中第三个题目&#xff0c;分值 15 分。先介绍一下这类题目的考查形式。 1. 考察形式 &#xff08;1&#xff09;类图与对象图 填类名&#xff0c;方法名&#xff0c;属性名填关系填多重度 UML 中四种基本关系&#xff1a; 依赖关…

数据库连接池的深入学习

为什么需要数据库连接池&#xff1f; 正常操作数据库需要对其进行连接&#xff0c;访问数据库&#xff0c;执行sql语句&#xff0c;断开连接。 创建数据库连接是一个昂贵的过程&#xff0c;在高并发的情况下&#xff0c;频繁的创建数据库的连接可能会导致数据库宕机。 有了连…

【python015】常见成熟AI-图像识别场景算法清单(已更新)

1.欢迎点赞、关注、批评、指正&#xff0c;互三走起来&#xff0c;小手动起来&#xff01; 【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码【python015】常见成熟AI-图像识别场景算法清单及代码 文章目录 1.背景介绍2…

【ML】self-supervised Learning for speech and Image

【ML】self-supervised Learning for speech and Image 1. self-supervised Learning for speech and Image1.1 自监督学习在语音处理领域的方法及其特点1.2 自监督学习在图像处理领域的方法及其特点 2. Predictive Approach2.1 特点2.2 适用场景 3. contrastive Learning4. 语…

上架10天,下载量6W+!用AI绘画 Stable Diffusion 做表情包真的可以赚钱!(AI绘画副业教程分享)

大家好&#xff0c;我是画画的小强 拜托&#xff0c;你不会还不知道吧&#xff0c;在大家还忙着跟网友斗图的时候&#xff0c;已经有人靠做某信表情包快速变现了&#xff01;光靠一套表情包就躺赚50W&#xff01; 紫沐甜心生成的表情包胭脂公主&#xff0c;上架10天后下载量就…

C:冒泡排序

1、冒泡排序介绍&#xff1a; 冒泡排序的核心思想就是&#xff1a;两两相邻的元素进行比较。 先用一个例子来帮助大家理解一下冒泡排序的算法是怎们进行的 有一排高矮不同的人站成一列&#xff0c;要按照从矮到高的顺序重新排队。 冒泡排序的方法就是&#xff0c;从第一个人…

Python代码之特征工程基础

1. 什么是特征工程 特征工程是指从原始数据中提取、转换和创建适合于模型训练的数据特征的过程。它是机器学习和深度学习中非常重要的一步&#xff0c;因为好的特征工程可以显著提高模型的性能。特征工程涉及从数据中提取有意义的信息&#xff0c;并将其转换为模型可以理解和使…

Python实战:类

一、圆的面积、周长 class Circle:# 初始化一个类参数&#xff1a;rdef __init__(self,r):self.r r# 计算面积的方法def get_area(self):return 3.14*pow(self.r,2)# 计算周长的方法def get_perimeter(self):return 2*3.14*self.r#创建对象 r eval(input(请输入圆的半径&…

linux系统编程:(4)

1.系统时间的获取函数 1. time函数 功能: 获得1970年到现在的秒数 参数: t:存放秒数的空间首地址 返回值: 成功返回1970年到现在的秒数 失败返回-1 2.localtime 函数 功能: 将一个秒数转化成日历时间 参数: timep:保存秒数空间的地址 返回值: 成功…

深度学习入门(四):激活函数与LSTM

激活函数 激活函数在神经网络中扮演着至关重要的角色。它们的主要功能是引入非线性因素&#xff0c;这使得神经网络能够学习和近似任何非线性函数&#xff0c;从而处理复杂的数据模式和决策边界。如果没有激活函数&#xff0c;即使网络拥有很多层&#xff0c;其表达能力仍然只…

write_sdc和write_script区别

文章目录 一、set_disable_clock_gating_check二、write_sdc和write_script区别1. write_sdc2. write_script 一、set_disable_clock_gating_check set_disable_clock_gating_check对指定的cell/pin/lib_cell/lib_pin设置是否进行clock gating的时序检查。 对于工具插入或者…

多模态大语言模型的免训练视觉提示学习 ControlMLLM

ControlMLLM: Training-Free Visual Prompt Learning for Multimodal Large Language Models github paper 在本研究中&#xff0c;提出了一种无需进行训练的方法&#xff0c;通过可学习的潜变量优化将视觉提示注入到多模态大型语言模型&#xff08;MLLMs&#xff09;中。 在…

本地Linux服务器创建我的世界MC私服并实现与好友异地远程联机游戏

文章目录 前言1. 安装JAVA2. MCSManager安装3.局域网访问MCSM4.创建我的世界服务器5.局域网联机测试6.安装cpolar内网穿透7. 配置公网访问地址8.远程联机测试9. 配置固定远程联机端口地址9.1 保留一个固定tcp地址9.2 配置固定公网TCP地址9.3 使用固定公网地址远程联机 前言 本…

ttwid、x-bogus、a-bogus、msToken、byted_acrawler等直播参数说明和获取方式

可以参考开源项目&#xff1a;https://github.com/Sjj1024/douyin-live 桌面端的直播间项目&#xff1a;https://github.com/Sjj1024/LiveBox ttwid参数 ttwid类似客户端id&#xff0c;即便是游客模式&#xff0c;也可以对页面数据进行埋点统计&#xff0c;通过收集ttwid下的…

java10-集合框架

1. 集合的简介 1.1什么是集合 集合Collection&#xff0c;也是一个数据容器&#xff0c;类似于数组&#xff0c;但是和数组是不一样的。集合是一个可变的容器&#xff0c;可以随时向集合中添加元素&#xff0c;也可以随时从集合中删除元素。另外&#xff0c;集合还提供了若干个…

Java设计模式(桥接模式)

定义 将抽象部分与它的实现部分解耦&#xff0c;使得两者都能够独立变化。 角色 抽象类&#xff08;Abstraction&#xff09;&#xff1a;定义抽象类&#xff0c;并包含一个对实现化对象的引用。 扩充抽象类&#xff08;RefinedAbstraction&#xff09;&#xff1a;是抽象化角…