Vue组件之间的通信和路由

vue.js-生命周期-组件间通讯-网络请求及路由模块 《vue.js 组件的生命周期、组件之间的通讯、处理网络请求及路由模块》 https://blog.youkuaiyun.com/m0_37696296/article/details/82344888 博客相对应的代码例子 立即下载

Vue组件之间的通信和路由

一、组件化

在大型应用开发的时候,页面可以划分成很多部分。往往不同的页面,也会有相同的部分。例如可能会有相同的头部导航。

但是如果每个页面都独自开发,这无疑增加了我们开发的成本。所以我们会把页面的不同部分拆分成独立的组件,然后在不同页面就可以共享这些组件,避免重复开发。

在vue里,所有的vue实例都是组件

1.1 全局组件

我们通过Vue的component方法来定义一个全局组件。

<div id="app">
    <!--使用定义好的全局组件-->
    <counter></counter>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
    // 定义全局组件,两个参数:1,组件名称。2,组件参数
    Vue.component("counter",{
        template:'<button v-on:click="count++">你点了我 {{ count }} 次,我记住了.</button>',
        data(){
            return {
                count:0
            }
        }
    })
    var app = new Vue({
        el:"#app"
    })
</script>
  • 组件其实也是一个Vue实例,因此它在定义时也会接收:data、methods、生命周期函数等
  • 不同的是组件不会与页面的元素绑定,否则就无法复用了,因此没有el属性。
  • 但是组件渲染需要html模板,所以增加了template属性,值就是HTML模板
  • 全局组件定义完毕,任何vue实例都可以直接在HTML中通过组件名称来使用组件了。
  • data必须是一个函数,不再是一个对象。

效果:
在这里插入图片描述

1.2.组件的复用

定义好的组件,可以任意复用多次:

<div id="app">
    <!--使用定义好的全局组件-->
    <counter></counter>
    <counter></counter>
    <counter></counter>
</div>

效果:
在这里插入图片描述
你会发现每个组件互不干扰,都有自己的count值。怎么实现的?

组件的data属性必须是函数!

当我们定义这个 <counter> 组件时,它的data 并不是像之前直接提供一个对象 :

data: {
  count: 0
}

取而代之的是,一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝:

data: function () {
  return {
    count: 0
  }
}

如果 Vue 没有这条规则,点击一个按钮就会影响到其它所有实例!

1.3 局部组件

一旦全局注册,就意味着即便以后你不再使用这个组件,它依然会随着Vue的加载而加载。

因此,对于一些并不频繁使用的组件,我们会采用局部注册。

子组件中声明的各种需要的数据和方法:

普通组件:

  • template //定义子组件模板
  • props //通过props来接收一个父组件传递的数据,是一个数组。
  • methods //vue提供了一个内置的 this.$emit() 函数,用来调用父组件绑定的函数

vue-route 路由:

  • routes //里面有多个组件的path路由路径和component组件名称
    • 通过<router-link>指定一个跳转链接,当点击时,会触发vue-router的路由功能,路径中的hash值会随之改变
    • 通过<router-view>来指定一个锚点,当路由的路径匹配时,vue-router会自动把对应组件放到锚点位置进行渲染
  • ``

我们先在外部定义一个对象,结构与创建组件时传递的第二个参数一致:

const counter = {
    template:'<button v-on:click="count++">你点了我 {{ count }} 次,我记住了.</button>',
    data(){
        return {
            count:0
        }
    }
};

然后在Vue中使用它:

var app = new Vue({
    el:"#app",
    components:{
        counter:counter // 将定义的对象注册为组件
    }
})
  • components就是当前vue对象子组件集合。
    • 其key就是子组件名称
    • 其值就是组件对象名
  • 效果与刚才的全局注册是类似的,不同的是,这个counter组件只能在当前的Vue实例中使用

1.4.组件通信

通常一个单页应用会以一棵嵌套的组件树的形式来组织:
在这里插入图片描述

  • 页面首先分成了顶部导航、左侧内容区、右侧边栏三部分
  • 左侧内容区又分为上下两个组件
  • 右侧边栏中又包含了3个子组件

各个组件之间以嵌套的关系组合在一起,那么这个时候不可避免的会有组件间通信的需求。

1.4.1 props(父向子传递)

  • 父向子传递:
    • 传递数据模型:需要通过自定义属性
    • 传递方法:需要通过自定义事例(子向父传递中用到)
  1. 父组件使用子组件时,自定义属性(属性名任意,属性值为要传递的数据)属性名需要通过 v-bind 方法进行绑定
  2. 子组件通过props接收父组件数据,通过自定义属性的属性名

父组件使用子组件,并自定义了title属性:

<div id="app">
    <h1>打个招呼:</h1>
    <!--使用子组件,同时传递title属性-->
    <introduce title="大家好,我是锋哥"/>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
    Vue.component("introduce",{
        // 直接使用props接收到的属性来渲染页面
        template:'<h1>{{title}}</h1>',
        props:['title'] // 通过props来接收一个父组件传递的属性
    })
    var app = new Vue({
        el:"#app"
    })
</script>

效果:
在这里插入图片描述

1.4.2 props验证

我们定义一个子组件,并接收复杂数据:

    const myList = {
        template: '\
        <ul>\
        	<li v-for="item in items" :key="item.id">{{item.id}} : {{item.name}}</li>\
        </ul>\
        ',
        props: {
            items: {
                type: Array,
                default: [],
                required: true
            }
        }
    };
  • 这个子组件可以对 items 进行迭代,并输出到页面。
  • props:定义需要从父组件中接收的数据
    • items:是要接收的属性名称
      • type:限定父组件传递来的必须是数组
      • default:默认值
      • required:是否必须

当 prop 验证失败的时候,(开发环境构建版本的) Vue 将会产生一个控制台的警告。

我们在父组件中使用它:

<div id="app">
    <h2>课程如下:</h2>
    <!-- 使用子组件的同时,传递属性,这里使用了v-bind,指向了父组件自己的属性lessons -->
    <my-list :items="lessons"/>
</div>
var app = new Vue({
    el:"#app",
    components:{
        myList // 当key和value一样时,可以只写一个
    },
    data:{
        lessons:[
            {id:1, name: 'java'},
            {id:2, name: 'php'},
            {id:3, name: 'ios'},
        ]
    }
})

效果:
在这里插入图片描述
type类型,可以有:
在这里插入图片描述

1.4.3 子向父的通信:$emit

来看这样的一个案例:

<div id="app">
    <h2>num: {{num}}</h2>
    <counter :count="num" @inc="increment" @dec="decrement"></counter>
</div>
<script src="./node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
     Vue.component("counter", {
            template:'\
                <div>\
                    <button @click="plus">加</button>  \
                    <button @click="reduce">减</button>  \
                </div>',
            props:['count'],
            methods:{
                plus(){
                    this.$emit("inc");
                },
                reduce(){
                    this.$emit("dec");
                }
            }
        })
    var app = new Vue({
    	el:"#app",
    	data:{
        	num:0
	    },
    	methods:{ // 父组件中定义操作num的方法
        	increment(){
            	this.num++;
	        },	
    	    decrement(){
	       	    this.num--;
    	    }
    	}
	})
</script>
  • 子组件接收父组件的num属性

  • 子组件定义点击按钮,点击后对num进行加或减操作

  • vue提供了一个内置的 this.$emit() 函数,用来调用父组件绑定的函数

效果:
在这里插入图片描述

二、路由 vue-router

2.1.场景模拟

现在我们来实现这样一个功能:
一个页面,包含登录和注册,点击不同按钮,实现登录和注册页切换:
在这里插入图片描述 在这里插入图片描述

2.1.1.编写父组件

为了让接下来的功能比较清晰,我们先新建一个文件夹:src

然后新建一个HTML文件,作为入口:index.html
在这里插入图片描述
然后编写页面的基本结构:

<div id="app">
    <span>登录</span>
    <span>注册</span>
    <hr/>
    <div>
        登录页/注册页
    </div>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el:"#app"
    })
</script>

样式:
在这里插入图片描述

2.1.2.编写登录及注册组件

接下来我们来实现登录组件,以前我们都是写在一个文件中,但是为了复用性,开发中都会把组件放入独立的JS文件中,我们新建一个user目录以及login.js及register.js:
在这里插入图片描述
编写组件,这里我们只写模板,不写功能。

login.js内容如下:

const loginForm = {
    template:'\
    <div>\
    <h2>登录页</h2> \
    用户名:<input type="text"><br/>\
    密码:<input type="password"><br/>\
    </div>\
    '
}

register.js内容:

const registerForm = {
    template:'\
    <div>\
    <h2>注册页</h2> \
    用&ensp;户&ensp;名:<input type="text"><br/>\
    密&emsp;&emsp;码:<input type="password"><br/>\
    确认密码:<input type="password"><br/>\
    </div>\
    '
}

2.1.3.在父组件中引用

<div id="app">
    <span>登录</span>
    <span>注册</span>
    <hr/>
    <div>
        <!--<loginForm></loginForm>-->
        <!--
            疑问:为什么不采用上面的写法?
            由于html是大小写不敏感的,如果采用上面的写法,则被认为是<loginform></loginform>
            所以,如果是驼峰形式的组件,需要把驼峰转化为“-”的形式
         -->
        <login-form></login-form>
        <register-form></register-form>
    </div>
</div>
<script src="../node_modules/vue/dist/vue.js"></script>
<script src="user/login.js"></script>
<script src="user/register.js"></script>
<script type="text/javascript">
    var vm = new Vue({
        el: "#app",
        components: {
            loginForm,
            registerForm
        }
    })
</script>

效果:
在这里插入图片描述

2.2 vue-router 简介和安装

使用vue-router和vue可以非常方便的实现复杂单页应用的动态路由功能。
官网:https://router.vuejs.org/zh-cn/
使用npm安装:npm install vue-router --save
在这里插入图片描述在index.html中引入依赖:

<script src="../node_modules/vue-router/dist/vue-router.js"></script>

2.3 快速入门

新建vue-router对象,并且指定路由规则:

// 创建VueRouter对象
const router = new VueRouter({
    routes:[ // 编写路由规则
        {
            path:"/login", // 请求路径,以“/”开头
            component:loginForm // 组件名称
        },
        {
            path:"/register",
            component:registerForm
        }
    ]
})
  • 创建VueRouter对象,并指定路由参数
  • routes:路由规则的数组,可以指定多个对象,每个对象是一条路由规则,包含以下属性:
    • path:路由的路径
    • component:组件名称

在父组件中引入router对象:

var vm = new Vue({
    el:"#app",
    components:{// 引用登录和注册组件
        loginForm,
        registerForm
    },
    router // 引用上面定义的router对象
})

页面跳转控制:

<div id="app">
    <!--router-link来指定跳转的路径-->
    <span><router-link to="/login">登录</router-link></span>
    <span><router-link to="/register">注册</router-link></span>
    <hr/>
    <div>
        <!--vue-router的锚点-->
        <router-view></router-view>
    </div>
</div>
  • 通过<router-link>指定一个跳转链接,当点击时,会触发vue-router的路由功能,路径中的hash值会随之改变
  • 通过<router-view>来指定一个锚点,当路由的路径匹配时,vue-router会自动把对应组件放到锚点位置进行渲染

效果:
在这里插入图片描述 在这里插入图片描述
注意:单页应用中,页面的切换并不是页面的跳转。仅仅是地址最后的hash值变化。

事实上,我们总共就一个HTML:index.html

react-window 大数据列表和表格数据渲染组件之虚拟滚动 ReactWindow是一个高性能的React虚拟滚动组件库,专门用于高效渲染大型列表和表格数据。它通过“窗口化”技术,仅渲染用户可见区域的内容,大幅提升性能并减少内存消耗。主要特点包括:支持固定/可变大小列表项、多种布局类型(垂直/水平/网格)、轻量级设计(不足5KB)以及平滑的滚动体验。相比传统渲染方式,它能轻松处理成千上万条数据,并提供自动滚动、自适应容器大小等高级功能。与同类库相比,ReactWindow具有更简洁的API和更优的性能表现,是处理大数据量渲染场景的理想选择。 阅读详情

相关推荐

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 509

字节一面:你来讲讲Vue路由组件间通信方式

我们可以通过配置路由时的props属性,将params/query携带的参数,在组件中用props属性来接收,这样用时可以直接使用,就不需要$route.params.xxx/$route.query.xxx的形式了。params传参类似于网络请求中的post请求,当使用编程式路由导航使用path跳转时,如果没有在对应的位置添加params参数,params传过去的参数就不会显示在地址栏中(并且不能刷新)。编程式导航使用path跳转时,在刷新界面后,query传递的参数不会丢失,而params会丢失。

zjjcchina的博客 221

Gazebo仿真平台模型搭建与修改

ROS里踩过的坑(一)Gazebo仿真平台模型搭建与修改文件讲解Models 文件World文件Launch文件模型编辑可视化编辑配置文件编辑模型展示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...

Redglass的博客 1万+

vue组件间通信传递数据的四种方式(路由传参、父子组件传参、兄弟组件传参、深层次传参)

1. props 和 emits传参 2. 路由传参(query、params) 3. 第三方库(pubsub-js)

前端、python爱好者 8383

【机器学习入门】1.4 吃透这些基本术语,才算真正入门

本文通过"挑西瓜"的生活案例,形象解释了机器学习的基本术语。样本对应单个西瓜,特征如色泽、根蒂等是观察维度,特征值是其具体表现,标签是西瓜的好坏判断。数据集是样本集合,特征向量是样本的数学表达,特征空间是所有可能的样本组合。文章强调数据集需划分为训练集、验证集和测试集,以评估模型的泛化能力。最后整理了术语对照表,并解答了常见问题。这些基础概念是理解机器学习的关键,建议读者重点掌握。

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 654

利用Python实现纬度加权平均(即NCL中的wgt_areaave)

当处理全球数据的时候,最常见的分析就是全球、北半球平均了,这时候一定要注意要根据纬度等信息进行加权,求加权平均,要不然结果肯定会不准。但是对于Python中,常规的计算包里面是没有的,或许现在有其他包可以实现,也可以告诉我~。

记录基于python语言处理气象问题的一些代码,包括不限于气象数据读取、机器学习和深度学习建模。 5744

在Vue项目中实现跨域通信的4种常用方法

Four common methods for implementing cross-domain communication in a Vue project在 Vue 项目中实现跨域通信通常有以下几种方法:JSONP(JSON with Padding)是一种在浏览器端实现跨域通信的技术,它通过在页面中插入 标签来加载远程数据。下面是一个使用 的示例: 上面的代码中,我们在组件的方法中创建一个 标签,并将它的 属性设置为远程接口的 URL,同时将回调函数的名称作为参数传递给接口。当浏览器加载

qq_35770694的博客 1629

Diffusion Models扩散模型与深度学习(数学原理和代码解读)

​ 此前GANs霸占各大顶会很多年,DDPM的出现让人耳目一新!经过这两年的发展,Diffusion Models能在图像生成、超分辨率重建、点云生成、语音生成等领域达到SOTA。这篇文章旨在帮助没有了解过的读者入门,《Diffusion Models与深度学习专栏》已经写了将近三十篇文章,既有原理公式和必备基础知识的讲解,也有代码详细实战解读,还有前沿热门应用,欢迎读者订阅。

沉迷单车的追风少年 4万+

Vue:Vue的路由,组件通讯、传值的多种方式

Vue里面的所有通信方式(组件,动态路由等等)

lyj15390447067的博客 2493

零基础学写《扫雷》游戏(Qt扫雷源码)

扫雷游戏是在windows系统中自带的游戏,他的游戏玩法其实很简单,20世纪初期电脑上没有啥游戏可以玩,所以扫雷游戏也算是当时是最常火爆的一个电脑游戏。以下文章详细介绍扫雷游戏的实现。实现语言为C++。

啊渊的专栏 1万+

在 SAP ABAP 里可靠地对接 FTP 服务器:从连接、命令到传输与排错的完整实战

本文详细介绍了在SAP ABAP中实现FTP文件交换的完整技术方案。文章首先解析了FTP协议的双连接特性(控制连接与数据连接),强调保持控制连接的重要性。随后详细说明了ABAP中FTP操作的四步标准流程:建立连接(包含HTTP_SCRAMBLE加密)、执行命令、断开连接和关闭RFC通道。文章提供了实战案例代码,演示如何将FTP文件复制到应用服务器再读取进内表处理,特别指出后台作业与前台操作的关键差异。最后总结了常见错误排查要点,包括连接模型、路径设置和资源释放等问题。全文通过SAP标准函数模块的调用顺序、典

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 305

vuel路由间通讯_vue路由传参的三种基本方式

方案一:getDescribe(id) {//直接调用$router.push 实现携带参数的跳转this.$router.push({path: `/describe/${id}`,})方案一,需要对应路由配置如下:{path:'/describe/:id',name:'Describe',component: Describe}很显然,需要在path中添加/:id来对应 $router.pus...

weixin_39758229的博客 245

Linux故障排查和性能优化面试题及参考答案

在 Linux 系统中,负载(Load Average)是衡量系统繁忙程度的一个重要指标,它表示系统在特定时间间隔内运行队列中的平均进程数。负载值反映了系统当前的工作压力,主要包括 CPU 等待运行的进程数量和处于不可中断睡眠状态(通常是等待 I/O 操作完成)的进程数量。负载平均值通常有三个数值,分别代表过去 1 分钟、5 分钟和 15 分钟内的系统平均负载。例如,在使用uptime命令或查看文件时,会看到类似这样的输出,这三个数值依次表示过去 1 分钟、5 分钟和 15 分钟的负载平均值。

大模型大数据攻城狮的专栏 1081

Vue 组件之间的引入

index.html:<div id="app"></div> 运行完index.html之后自动寻找运行main.js文件main.js:import Vue from 'vue' import App from './App' import router from './router'Vue.config.productionTip = falsenew Vue({ el: '#app',

霸霸霸霸天虎丶的博客 6987

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Vue Element UI Tree 路由组件 树形菜单组件 视图组件 组件通信 (详解)

实现 菜单 树形 视图 动态显示bus.js同级组件通信 el-tree router-link :to="'/manor'" @click.native="searchtree('home')"> handleNodeClick bus.$on bus通信 bus.$emit

Bnana博客 2845

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

组件和路由

router-link tag="div" :to="{path:'/datel',query:{courseid:103}}">去详情页</router-link><son v-on:click-son='clickParent($event,"自定义参数")' v-on:click-son2='clickParent2'></son><input type="button" value="获取元素" @click="getElement" ref="mybtn">// 2. 在子组件中触发这个事件。

ShenWangNian的博客 729

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

vue路由以及页面跳转的使用

博客已经好久没更新,今天突然想起写一些基础的东西,其中会附上代码,把代码运行起来再理解会比较容易,新手可以搭配上一篇《创建一个VUE项目运行》一起看,会事半功倍哦,忘记说上一篇安装init以后一直回车等到所有步骤执行完以后再运行。 vue项目运行完以后你会看到有一个App.vue文件,里面的东西我们不用改,新建一个跳转的子页面child还有存放公共组件的public,新建完以后就是这样的 然后...

Rux子兮的博客 317

vue的通信传值方式

一、路由通信传值 路由通信是通过路由跳转用query把参数带过去,也是vue常用的通信手段。 eg:list.vue跳转到update.vue,需要传递id list.vue this.router.push(path:"/update",query:id:"213")update.vueletid=this.router.push({ path:"/update" , query:{ id:"213" } }) update.vue let id = this.router.push(path:"/u.

admin_mvip的博客 576

Vue2组件,插槽,路由和数据共享

Vue组件开发与通信指南 本文介绍了Vue组件开发的两种注册方式(局部/全局)及其使用步骤,重点讲解了组件间的数据通信方法: 组件注册: 局部注册:创建组件→引入→注册→使用 全局注册:创建组件→main.js引入并注册→直接使用 通过scoped实现样式隔离 组件通信: 父→子:通过props属性传递 子→父:使用$emit触发自定义事件 子组件间:通过EventBus事件总线实现 每种通信方式都给出了详细代码示例,包括参数传递和接收处理的具体实现方法。文中特别强调了样式隔离的重要性,并提供了样式冲突的解

EvanSun_ 的博客 614

分享vue 组件间通信7种方法(父子组件间传参,兄弟组件传参)

vue 组件间通信(父子组件间传参,兄弟组件传参) 前言 :vue 项目中简单可以分为【父向子传参】、【子向父传参】、【组件间传参】,整理后再下面已娓娓道来 1.父向子传参 老规矩先上图 代码: 父页面 <template> <div class="home" style="background:red"> <h1>父页面</h1> <!-- 前面(parentData)自定义名称便于子组件调用,后面(userName)要传递数据

Navy 1895

beego+vue父子组件通信(父子页面传值、父子组件传值、父子路由传值)

场景:有head和foot,为父组件 侧栏tree为子组件 点击tree,右侧孙组件根据点击tree的id,来更改表格内容。 首先是父子(本例中是子组件与孙组件)通信,目前是父传到子,暂时还没有子传到父。 vue中路由设置如下: export default new...

chongxun8303的博客 212

vue-组件直接的参数传递

组件之间的参数传递 1.父传子 这个是子组件 {{MyTitle}} 2.这是父组件: props是表示一个组件的参数部分,那么props的写法有两种 props[参数列表] 比如props:[‘Mytitle’] Mytitle为参数名 props:{ ‘Mytitle’:{ type:String, required:true, default:'xxx, } } 路由的实现:(组件之间的跳转)也就是页面之间的跳转 在数据通信时,帮你选择通信功能 在vue中

qiangyanwne0201的博客 251

Vue几种传值方式的分析

在学习vue过程中自己总结了几种组件间传值的方式 1、路由传参 步骤: ①定义路由时加上参数props: true,在定义路由路径时要留有参数占位符: name『用法: to=”’路径/’+value”』 ②在跳转到的页面加上参数props:[‘name’] ③在跳转到的页面就获取到了name『用法: js中直接this. name;html中直接插值{{ name}}...

rainbow8300的博客 6048

Vue-router(路由)

由于Vue在开发时对路由支持的不足,于是官方补充了vue-router插件。vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来。传统的页面应用,是用一些超链接来实现页面切换和跳转的。在vue-router单页面应用中,则是路径之间的切换,实际上就是组件的切换。路由就是SPA(单页应用)的路径管理器。再通俗的说,vue-router就是我们WebApp的链接路径管理系统。   有的小伙伴会有疑虑,为什么我们不能像原来一样直接用a标签编写链接呢?因为我们一般用Vue做的都是单页.

bocai_xiaodaidai的博客 442

Vue 组件的使用

1、引入组件 import Week from '../week/main.vue' export default { name: "classMain", components: { Week: Week }, data(){ return { schoolID: this.$rou...

weixin_30622107的博客 77

自存 vue路由通信

这里我使用方法是点击搜索时在父路由发送query参数跳转到子路由,然后子路由监听query的变化,如果变化了就发送请求查询数据库。监听路由变化,如果父路由点击搜索了就代表route.query发送了变化,发送变化了就给搜索值复制然后查数据库赋值给新的文章值。好像从me这个路由跳转到对应的子路由不需要用params传递id,在子路由一样可以接受到。关于搜索,搜索的组件是在父组件里面,然后我要搜索的是各个子路由的内容。如图个人中心是一个大组件,个人文章,博客,关注,粉丝是一个小组件。点击的时候把id传过来。

hsstjigdita的博客 314
上一篇: Vue入门案例
下一篇: 商城项目后台前端
Xxacker的Latitude
博客等级 码龄9年 64粉丝 107原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值