vue组件化实例-购物车
前言
环境准备
实现步骤
创建项目
购物车的编码
标题的编码(基础知识,可跳过)
功能一:现在我想先给我的购物车加上一个大标题,要怎么做呢?
功能二:我想要标题在页面加载2秒后,再显示。
显示商品列表
添加商品
功能四:我要向商品列表中添加新的商品(包括商品名和单价)
加入购物车
将购物车功能组件化
功能六:将购物车的相关信息放到独立的组件中。实现项目的组件化。
功能七:购物车中添加一列(价格列),自动计算各商品的价格。
功能八:在购物车中加入一列复选框,默认选中,未选中时,其字体颜色变淡。
功能九:计算购物车中被选中商品的总价格。
前言
最近,报了开课吧的web全栈课程,课程讲的干货挺多的,现将课上的例子的实现步骤写下来,当做一个课后总结,同时方便以后自己查阅,也给大家一个参考。 本案例主要是完成一个简单的购物车功能(添加商品,显示商品列表,加入购物车);先是将所有功能在一个组件中完成;然后再进行组件化,再将购物车的功能摘出来,放置另一个组件中。
以下是最终完成的效果图:
环境准备
浏览器(推荐:chrome) 编辑器(推荐:vscode、webstorm) Node.js(推荐安装8.0以上版本) Vue.js(推荐安装2.5版本)
注:装好node后 npm install -g @vue/cli 安装vue cli全局脚手架
注:我这里就不介绍怎么安装环境了,大家自己查找相关资料吧。。。
实现步骤
创建项目
创建命令 :vue create 项目名。如我的项目:vue create vue-demo2。 注意:
创建过程中,问你选择哪个preset时,直接回车选择默认即可。如下图:
大家如果觉得,它下载包太慢的话,可以 Ctrl + C 停止掉,使用 淘宝镜像下载(命令:cnpm install)。
项目创建完成 ,如下图: 项目启动: 在上图中可以看到启动命令: 1. 跳转到 项目目录下:cd vue-demo2
2. 执行启动命令:npm run serve
。出现下图,表示启动成功。 3. 在浏览器中输入http://localhost:8081
,如下图。: 项目结构,如下图。: 注意:我的vue-cli,是3.0的版本,与旧版有些不同。所以创建的项目有些不同,不过没有关系的。
购物车的编码
我就不另写组件了,直接在HelloWorld.vue组件中编写,同时也将组件中不需要的内容的删除了。此时 HelloWrold.vue的代码如下:
< template>
< div>
div>
template>
< script>
export default {
name: 'HelloWorld' ,
}
script>
< style scoped >
style>
app.vue 如下(这里为了好看成点,写了些样式):
< template>
< div id= "app" >
< HelloWorld / >
< / div>
< / template>
< script>
import HelloWorld from './components/HelloWorld.vue'
export default {
name: 'app' ,
components: {
HelloWorld
}
}
< / script>
< style>
#app {
font- family: 'Avenir' , Helvetica, Arial, sans- serif;
- webkit- font- smoothing: antialiased;
- moz- osx- font- smoothing: grayscale;
color: #2 c3e50;
width: 60 % ;
border: 1 px solid peachpuff;
margin: 50 px auto;
background: papayawhip;
padding: 0 10 px;
}
h2{ text- align: center; }
input{ margin- right: 20 px; }
ul{ padding: 0 px; margin: 0 ; }
ul li{ line- height: 30 px; list- style: none; }
ul li button{ margin- left: 10 px; }
ul li span{ margin- right: 20 px; }
ul li span: nth- child ( 2 ) { display: inline- block; min- width: 100 px; }
ul li span: nth- child ( 3 ) { display: inline- block; min- width: 60 px; }
table{ width: 100 % ; line- height: 30 px; text- align: center; }
table tr td, table tr th{ border- left: 1 px solid #a2a2a2; border- top: 1 px solid #a2a2a2; }
table tr td: last- child, table tr th: last- child{ border- right: 1 px solid #a2a2a2; }
table tr: last- child td{ border- bottom: 1 px solid #a2a2a2; }
. box{ border: 1 px solid peru; border- radius: 5 px; margin- bottom: 10 px; line- height: 30 px; }
. box . header{ border- bottom: 1 px solid peru; padding- left: 20 px; font- weight: bold;
background: palegoldenrod; border- radius: 5 px 5 px 0 0 ; }
. box . body{ padding: 20 px 40 px; }
< / style>
标题的编码(基础知识,可跳过)
这个标题并不是必须了,但我想利用它来说明vue中的“数据绑定”及“条件显示”功能,就给加上了。
功能一:现在我想先给我的购物车加上一个大标题,要怎么做呢?
实现:在 HelloWord.vue
添加数据 title
,并将其绑定到模板中。这数据绑定的方法有多种:
{{}}:插值绑定
title=“title”:属性绑定
如下:
< template>
< div>
< h2 :title = " title" > {{title}} h2>
div>
template>
< script>
export default {
name: 'HelloWorld' ,
data ( ) {
return {
title: '小诺的购物车'
}
} ,
}
script>
效果图:
功能二:我想要标题在页面加载2秒后,再显示。
实现:在组件的 created 生命周期中 设置一个定时器。在其回调中为给title
赋值;且控制模板中的标题元素根据 title是否有值来显示与否。如下:
< template>
< div>
< h2 :title = " title" v-if = " title" > {{title}} h2>
div>
template>
< script>
export default {
name: 'HelloWorld' ,
data ( ) {
return {
title: ''
}
} ,
created ( ) {
setTimeout ( ( ) => {
this . title = '小诺的购物车' ;
} , 2000 ) ;
}
}
script>
显示商品列表
功能三:显示我的商品列表
一个购物车,必须要有它的商品,我在data
中定义的是一个goods
数组来存储商品。 这个商品我定义了商品名称及价格两个属性。我给程序加入了3种原始的商品。如下:
goods: [
{ id: 1 , text: '香蕉' , price: 10 } ,
{ id: 2 , text: '苹果' , price: 12 } ,
{ id: 3 , text: '芒果' , price: 13 } ,
] ,
并在模板中循环显示。如下:
< div class = " box" >
< div class = " header" > 商品列表 div>
< div class = " body" >
< ul>
< li v-for = " (good,index) in goods" :key = " good.id" >
< span> {{index+1}} span>
< span> {{good.text}} span> < span> ¥{{good.price}} span>
li>
ul>
div>
div>
效果图: 补充 :循环语法v-for = "(item,index) in list"
, 其中item
为元素,index
为列表索引,从0开始。
添加商品
功能四:我要向商品列表中添加新的商品(包括商品名和单价)
声明两个数据变量,商品名text
, 商品价格price
,用于绑定输入框。
data ( ) {
return {
title: '' ,
text: '砂糖桔' ,
price: null ,
goods: [
{ id: 1 , text: '香蕉' , price: 10 } ,
{ id: 2 , text: '苹果' , price: 12 } ,
{ id: 3 , text: '芒果' , price: 13 } ,
] ,
}
} ,
在模板中添加用户输入需要输入框,并绑定对应的数据变量。
< div class = " box" >
< div class = " header" > 添加商品 div>
< div class = " body" >
< div>
< label> 商品名称: label>
< input type = " text" v-model = " text" >
div>
< div>
< label> 商品价格: label>
< input type = " text" v-model = " price" >
div>
< div>
< button @click = " addGood" > 提交 button>
div>
div>
div>
添加提交按钮,并绑定其对应的提交事件,这里只提交到数组中,并不逻辑后台。
addGood ( ) {
if ( this . text && this . price) {
this . goods. push ( {
id: this . goods. length+ 1 ,
text: this . text,
price: this . price
} ) ;
this . text = '' ;
this . price = null ;
}
} ,
效果图:
加入购物车
功能五:将商品加入到购物车中,并显示购物车信息
声明一个数组来存储购物车中的数据。其内的元素数据结构基本与商品数据结构一至;不过要多一个count
属性,来表示购买的商品数据。
模板中,在商品列表中商品后面添加一上“加入购物车”的按钮,并绑定加入事件。如下: 添加按钮:
< button @click = " addCart(good)" > 加购物车 button>
绑定事件:
addCart ( good) {
const ret = this . cart. find ( v=> v. id === good. id) ;
if ( ret) {
ret. count += 1 ;
} else {
this . cart. push ( { ... good, count: 1 } ) ;
}
}
显示购物信息
< div class = " box" >
< div class = " header" > 购物车 div>
< div class = " body" >
< table v-if = " cart.length>0" cellpadding = " 0" cellspacing = " 0" >
< thead>
< tr>
< th> 水果名 th>
< th> 单价 th>
< th> 数量 th>
tr>
thead>
< tbody>
< tr v-for = " c in cart" :key = " c.id" >
< td> {{c.text}} td>
< td> ¥{{c.price}} td>
< td> {{c.count}} td>
tr>
tbody>
table>
div>
div>
效果图:
将购物车功能组件化
功能六:将购物车的相关信息放到独立的组件中。实现项目的组件化。
在Component目录下创建Cart.vue组件,并将购物车相关信息提取到此。Cart.vue如下:
< template>
< table v-if = " cart.length>0" cellpadding = " 0" cellspacing = " 0" >
< thead>
< tr>
< th> 水果名 th>
< th> 单价 th>
< th> 数量 th>
tr>
thead>
< tbody>
< tr v-for = " c in cart" :key = " c.id" :class = " {inactive:!c.active}" >
< td> {{c.text}} td>
< td> ¥{{c.price}} td>
< td> {{c.count}} td>
tr>
tbody>
table>
template>
< script>
export default {
name: "cart" ,
data ( ) {
return {
cart: [ ] ,
addCart ( good) {
const ret = this . cart. find ( v=> v. id === good. id) ;
if ( ret) {
ret. count += 1 ;
} else {
this . cart. push ( { ... good, count: 1 } ) ;
}
}
}
} ,
}
script>
< style scoped >
style>
在 HelloWord.vue
组件中使用 Cart.vue
组件。 导入组件:import Cart from "./Cart";
在vue中声明组件:components: {Cart},
在模板中使用组件:
组件之间通信(父传子) :在父组件中点击“加入购物车”;然后在子组件中执行加入操作,显示购物车信息;这是一个父传子的通信。 第一种: 为 cart 添加属性 ref='cart'
,然后在HelloWord.vue
中的addCart
函数中使用this.$refs.cart.addCart()
来调用子组件的加入购物车方法;不过,这种方法不太推荐,耦合性比较强。 第二种:
在 main.js
中 定义一个全局的总线:Vue.prototype.$bus = new Vue(); // 定义全局的
。这是在Vue原型上声明的对象,所以所有的Vue组件都可以调用它,它可以实现任意两个组件之间的通信。
在父组件的 addCart()
函数中使用 this.$bus.$emit('addCart',good)
派发 addCart 事件。
在子组件的生产周期 created()
中监听这个事件,使用 this.$bus.$on('addCart',good => this.addCart(good));
补充:子传父
在子组件Cart.vue组件的 addCart() 函数中 最后一行使用 this.$emit('addCart',true);
,返回一个true
给父组件。
在父组件的
中绑定addCart
事件,即
功能七:购物车中添加一列(价格列),自动计算各商品的价格。
在Cart.vue组件的模板中,添加列头 价格
,添加列 {{c.price * c.count}}
。如下图:
功能八:在购物车中加入一列复选框,默认选中,未选中时,其字体颜色变淡。
购物车组件写一个字体变色的样式.inactive{ color: #b0b0b0; }
,用于表示未选中的状态。
修改 Cart
组件的 addCart
方法中 cart数组追加元素时的对象,让其再加一个属性 active:true
,即: this . cart. push ( { ... good, count: 1 , active: true } ) ;
在 Cart
组件的模板的表格的最前面加入一列复选框。并将复选框绑定 active
。即:< td> < input type = " checkbox" v-model = " c.active" /> td>
为表格的 标签,绑定动态样式 :class="{inactive:!c.active}"
效果图:
功能九:计算购物车中被选中商品的总价格。
写一个计算属性total
,用于计算总价格。如下: computed: {
total ( ) {
return this . cart. reduce ( ( sum, c) => {
if ( c. active) {
sum += c. price * c. count;
}
return sum;
} , 0 ) ;
}
} ,
在购物车的表格中添加一个底部,用来绑定 total
的值。如下: < tfoot>
< tr>
< td colspan = " 4" > 总结 td>
< td> ¥{{total}} td>
tr>
tfoot>
至此,所有的功能说明都完成了。
你可能感兴趣的:(Vue,前端,vue实例,vue组件化实例,购物车实例,vue父子通信)
day15|前端框架学习和算法
universe_01
前端 算法 笔记
T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的
Java | 多线程经典问题 - 售票
Ada54
一、售票需求1)同一个票池2)多个窗口卖票,不能出售同一张票二、售票问题代码实现(线程与进程小总结,请戳:Java|线程和进程,创建线程)step1:定义SaleWindow类实现Runnable接口,覆盖run方法step2:实例化SaleWindow对象,创建Thread对象,将SaleWindow作为参数传给Thread类的构造函数,然后通过Thread.start()方法启动线程step3
5G基站信号加速器!AD8021ARZ-REEL7亚德诺 超低噪声高速电压放大器 专利失真消除技术!
深圳市尚想信息技术有限公司
5G通信 高速运放 ADI黑科技 8K视频 医疗超声
AD8021ARZ-REEL7ADI:重新定义高速放大器的性能极限!一、产品简介AD8021ARZ-REEL7是ADI(亚德诺半导体)推出的超低噪声高速电压反馈放大器,采用XFCB工艺和专利失真消除技术,专为4K/8K视频处理、医疗成像、5G通信等超高频应用设计。以1.8GHz带宽和0.1nV/√Hz超低噪声,成为高速信号调理的终极解决方案!二、五大颠覆性优势军工级信号保真度1.8GHz-3dB带
5G-RAN与语义通信RAN
一去不复返的通信er
智简网络&语义通信 5G 人工智能 语义通信
1️⃣RAN协议栈与TCP/IP五层协议栈的对应关系a.物理层(TCP/IP)↔PHY(RAN)对应关系:5GNRRAN的物理层直接对应TCP/IP的物理层。功能对比:TCP/IP物理层:负责比特流的物理传输,如通过电缆、光纤或无线介质传输信号。RAN物理层:处理无线信号的调制、编码、信道估计和传输(如OFDM、LDPC编码)。在5GNR中,物理层负责将数据映射到无线信道(如PDSCH、PUSCH
北斗短报文兜底、5G-A增强:AORO P1100三防平板构建应急通信网络
公网中断的灾区现场,泥石流阻断了最后一条光缆。一支救援队却在废墟间有序穿行,队长手中的三防平板正闪烁着北斗卫星信号,定位坐标与伤亡信息化作一行行短报文,穿透通信孤岛直达指挥中心。这是AOROP1100三防平板搭载的北斗短报文功能在应急救援中的真实场景,更代表了工业移动终端在极端环境下的能力跃迁。AOROP1100三防平板作为遨游通讯2025年推出的旗舰三防设备,AOROP1100三防平板的技术基底
uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)
十一猫咪爱养鱼
前端组件与功能(开箱即用) uniapp常见问题解决 uniapp vue3 uniapp3小程序授权登录 微信小程序登录获取用户信息教程 获取用户昵称手机号头像信息登录 vue3版本小程序平台授权登录 uniap小程序端用户登录流程 uni完整的小程序平台登录源码
效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是
面试必考题:Android Binder 机制详解
大模型大数据攻城狮
android binder 面试 react native kotlin dalvik retrofit
目录第一章:Binder的基本概念什么是Binder?多角度解读Binder第二章:Binder的工作机制Binder的整体流程服务注册:从零到有的第一步服务查询:找到目标的“地图”服务调用:请求与响应的旅程Binder驱动的幕后功劳为什么Binder这么快?第三章:Binder在系统架构中的角色Activity:界面背后的通信枢纽Binder的角色实例分析Service:后台任务的跨进程支柱Bi
《UNIX网络编程卷1:套接字联网API》第8章:基本UDP套接字编程深度解析
《UNIX网络编程卷1:套接字联网API》第8章:基本UDP套接字编程深度解析(8000字图文实战)一、UDP协议核心特性与编程模型1.1UDP协议设计哲学UDP(UserDatagramProtocol)是面向无连接的传输层协议(图1),其核心特征包括:无连接通信:无需三次握手,直接发送数据报尽最大努力交付:不保证可靠性、不维护连接状态报文边界保留:接收方读取的数据与发送方写入完全一致低开销高效
vue element 封装表单
影子信息
vue vue.js javascript 前端
背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进
前端面试每日 3+1 —— 第39天
浪子神剑
今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss
大数据技术笔记—spring入门
卿卿老祖
篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据
大学社团管理系统(11831)
codercode2022
java spring boot spring echarts spring cloud sentinel java-rocketmq
有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!
前端数据库:IndexedDB从基础到高级使用指南
文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.
【Java Web实战】从零到一打造企业级网上购书网站系统 | 完整开发实录(三)
笙囧同学
java 前端 状态模式
核心功能设计用户管理系统用户管理是整个系统的基础,我设计了完整的用户生命周期管理:用户注册流程验证失败验证通过验证失败验证通过用户名已存在用户名可用失败成功用户访问注册页面填写注册信息前端表单验证显示错误提示提交到后端后端数据验证返回错误信息用户名唯一性检查提示用户名重复密码加密处理保存用户信息保存成功?显示系统错误注册成功跳转登录页面登录认证机制深度解析我实现了一套企业级的多层次安全认证机制:认
从零到一:打造基于GigaChat AI的艺术创作平台 | 笙囧同学的全栈开发实战
作者简介:笙囧同学,中科院计算机大模型方向硕士,全栈开发爱好者联系方式:
[email protected] 各大平台账号:笙囧同学座右铭:偷懒是人生进步的阶梯前言在AI技术飞速发展的今天,如何将前沿的大模型技术与实际应用相结合,一直是我们开发者关注的焦点。今天,笙囧同学将带大家从零开始,构建一个基于GigaChatAI的艺术创作平台,实现React前端+Django后端的完整全栈解决方案。这不仅仅是
如何运用深度学习打造高效AI人工智能系统
AI智能探索者
AI Agent 智能体开发实战 人工智能 深度学习 ai
如何运用深度学习打造高效AI人工智能系统关键词:深度学习、AI系统、神经网络、模型优化、实战开发摘要:本文将从深度学习的核心概念出发,结合生活实例和代码实战,系统讲解如何构建高效AI系统。我们会拆解数据准备、模型设计、训练优化、部署落地的全流程,揭秘“数据-模型-训练-推理”的协同机制,并通过具体案例演示从0到1开发AI系统的关键技巧,帮助开发者掌握打造高效AI系统的底层逻辑。背景介绍目的和范围在
VUE 座位图功能+扩展
NUZGNAW
vue.js javascript 前端
1、通过循环画出页面座位图0"style="display:table;margin:0auto;min-height:472px;position:relative;">{{i.sign}}2、画出右下角的预览图3、编写对应js方法watch:{seatList:{handler(newVal,oldVal){if(this.seatList&&!stringBlank(this.seatLis
14.tornado操作之应用Websocket协议实现聊天室功能
孤寒者
Tornado框架从入门到实战 websocket tornado 聊天室功能实现 python
目录:每篇前言:1.什么是WebSocket(1)定义(2)优点(3)和HTTP对比(4)适用场景2.WebSocket关键方法3.本tornado项目中使用WebSocket(1)准备一个聊天室的页面:第一步:编写视图:第二步:编写接口:(app.py中加入以下接口!)第三步:编写前端页面:测试接口——响应OK!(2)使用WebSocket:(3)聊天室的聊天功能的最终实现:第一步:战前准备第二
webSocket双向通信
@泽栖
websocket 网络协议 网络
webSocket基础使用webSocket小说明:作用浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。WebSocket与HTTP最大的区别HTTP通信是单向的,基于请求响应模式WebSocket支持双向通信。实现长连接适用场景:消息通信,视频弹幕,实时信息,等双向通信的使用需求使用:引入maven依赖org.springfram
CMS垃圾回收器和G1垃圾回收器区别_g1cms垃圾回收器区别
2401_89191885
jvm
该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例;加载该类的ClassLoader已经被回收;该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。3.常见的垃圾回收算法1、Mark-Sweep(标记-清除算法):(1)思想:标记清除算法分为两个阶段,标记阶段和清除阶段。标记阶段任务是标记出所有需要回收的对象,清除阶段就是清除被标
记录自己第n次面试(n>3)
Warren98
Java 面试 python 职场和发展 java 开发语言 服务器 linux
1.Spring Boot可执行JAR的内存分配答:“在Spring Boot可执行JAR中,JVM的内存通常分为两大块:堆(Heap)和栈(Stack)。堆内存:存放对象实例和数组,通过-Xms(初始)和-Xmx(最大)控制。比如java-Xms512m-Xmx1024m-jarapp.jar,表示启动时给512 MB堆,最大可以到1 024 MB。栈内存:每个线程有独立的栈帧,用来保存方法调用
为什么学习Web前端一定要掌握JavaScript?
web前端学习指南
为什么学习Web前端一定要掌握JavaScript?在前端的世界里,没有什么是JavaScript实现不了的,关于JS有一句话:凡是可以用JavaScript来写的应用,最终都会用JavaScript,JavaScript可运行在所有主要平台的所有主流浏览器上,也可运行在每一个主流操作系统的服务器端上。现如今我们在为网站写任何一个主要功能的时候都需要有懂能够用JavaScript写前端的开发人员。
小架构step系列25:错误码
秋千码途
架构 java
1概述一个系统中,可能产生各种各样的错误,对这些错误进行编码。当错误发生时,通过这个错误码就有可能快速判断是什么错误,不一定需要查看代码就可以进行处理,提高问题处理效率。有了统一的错误码,还可以标准化错误信息,方便把错误信息纳入文档管理和对错误信息进行国际化等。没有错误码的管理,开发人员就会按自己的理解处理这些错误。有些直接把堆栈直接反馈到前端页面上,使用看不懂这些信息体验很差,也暴露了堆栈信息有
USRP X440
东枫科技
fpga开发
产品概述USRPX440是EttusResearch推出的高性能、多通道、宽带软件定义无线电(SDR)系统。基于XilinxZynqUltraScale+RFSoC架构,它提供高密度、相干性的信号收发能力,帮助您快速构建雷达、电子战(EW)、卫星通信(SATCOM)及毫米波原型系统。核心特性8路独立可调谐Tx/Rx通道支持高达8路发射和8路接收,通道间时钟共享实现相位相干(同设备内< 1° RMS
Java朴实无华按天计划从入门到实战(强化速战版-66天)
岫珩
Java 后端 java 开发语言 学习 Java 时间安排 学习计划
致敬读者感谢阅读笑口常开生日快乐⬛早点睡觉博主相关博主信息博客首页专栏推荐活动信息文章目录Java朴实无华按天计划从入门到实战(强化速战版-66天)1.基础(18)1.1JavaSE核心(5天)1.2数据库与SQL(5天)1.3前端基础(8天)2.进阶(17天)2.1JavaWeb核心(5天)2.2Mybatis与Spring全家桶(6天)2.3中间件入门(4天)2.4实践项目(2天)3.高阶(1
《跨域资源共享CORS的深层逻辑与前端实践精要》
不同源头的资源交互已成为常态,而跨域资源共享(CORS)正是支撑这种交互的隐形架构。现代Web安全体系中平衡开放与防护的精妙设计。理解CORS的深层逻辑,不仅能解决实际开发中的跨域难题,更能触及网络安全与资源流通的核心矛盾,为前端工程师构建稳健的应用提供底层认知支撑。跨域资源共享的诞生,源于网络安全与应用发展的必然冲突。浏览器的同源策略,作为早期网络安全的基石,通过限制不同源文档的交互,有效阻挡了
【移动端知识】移动端多 WebView 互访方案:Android、iOS 与鸿蒙实现
问道飞鱼
前端开发技术 harmonyos android ios 多webview互访
移动端多WebView互访方案:Android、iOS与鸿蒙实现移动端多WebView互访方案:Android、iOS与鸿蒙实现一、核心架构设计二、Android平台实现1.基础通信架构2.控制器实现3.WebView安全配置三、iOS平台实现(Swift)1.WKWebView通信桥接2.AppDelegate路由控制四、鸿蒙平台实现(HarmonyOS)1.WebView通信桥接2.Abili
深入了解 Kubernetes(k8s):从概念到实践
目录一、k8s核心概念二、k8s的优势三、k8s架构组件控制平面组件节点组件四、k8s+docker运行前后端分离项目的例子1.准备前端项目2.准备后端项目3.创建k8s部署配置文件4.部署应用到k8s集群在当今云计算和容器化技术飞速发展的时代,Kubernetes(简称k8s)已成为容器编排领域的事实标准。无论是互联网巨头、传统企业还是初创公司,都在广泛采用k8s来管理和部署容器化应用。本文将带
【计算机网络】细说IP
问道飞鱼
计算机网络 计算机网络 tcp/ip 网络协议
文章目录概述IP地址的组成IP地址的分类IP地址的作用分类一、A类IP地址二、B类IP地址三、C类IP地址四、D类IP地址五、E类IP地址协议报文子网掩码一、定义与功能二、表示方法三、子网掩码与IP地址的关系四、子网掩码的设置与配置五、实例说明IPv6一、定义与背景二、地址格式与特点三、优势与功能四、过渡与部署五、应用与发展IPv6协议报文有了IPv6还需要子网掩码吗概述IP,全称Internet
Vue CSR 到 Nuxt 3 SSR 迁移:技术实现与问题解决实录
二倍速播放
前端 vue.js
1.迁移动机与技术选型1.1CSR架构的局限性基于Vue3和Vite构建的客户端渲染(CSR)单页应用(SPA)提供了良好的开发体验和用户交互流畅性。但是其核心局限在于:搜索引擎优化(SEO):初始HTML响应仅包含一个根div元素,实际内容由JavaScript在浏览器端动态生成。虽然主流搜索引擎(如Google)能够执行部分JavaScript,但其抓取效率和稳定性不如直接获取完整HTML。非
TOMCAT在POST方法提交参数丢失问题
357029540
java tomcat jsp
摘自http://my.oschina.net/luckyi/blog/213209
昨天在解决一个BUG时发现一个奇怪的问题,一个AJAX提交数据在之前都是木有问题的,突然提交出错影响其他处理流程。
检查时发现页面处理数据较多,起初以为是提交顺序不正确修改后发现不是由此问题引起。于是删除掉一部分数据进行提交,较少数据能够提交成功。
恢复较多数据后跟踪提交FORM DATA ,发现数
在MyEclipse中增加JSP模板 删除-2008-08-18
ljy325
jsp xml MyEclipse
在D:\Program Files\MyEclipse 6.0\myeclipse\eclipse\plugins\com.genuitec.eclipse.wizards_6.0.1.zmyeclipse601200710\templates\jsp 目录下找到Jsp.vtl,复制一份,重命名为jsp2.vtl,然后把里面的内容修改为自己想要的格式,保存。
然后在 D:\Progr
JavaScript常用验证脚本总结
eksliang
JavaScript javaScript表单验证
转载请出自出处:http://eksliang.iteye.com/blog/2098985
下面这些验证脚本,是我在这几年开发中的总结,今天把他放出来,也算是一种分享吧,现在在我的项目中也在用!包括日期验证、比较,非空验证、身份证验证、数值验证、Email验证、电话验证等等...!
&nb
微软BI(4)
18289753290
微软BI SSIS
1)
Q:查看ssis里面某个控件输出的结果:
A MessageBox.Show(Dts.Variables["v_lastTimestamp"].Value.ToString());
这是我们在包里面定义的变量
2):在关联目的端表的时候如果是一对多的关系,一定要选择唯一的那个键作为关联字段。
3)
Q:ssis里面如果将多个数据源的数据插入目的端一
定时对大数据量的表进行分表对数据备份
酷的飞上天空
大数据量
工作中遇到数据库中一个表的数据量比较大,属于日志表。正常情况下是不会有查询操作的,但如果不进行分表数据太多,执行一条简单sql语句要等好几分钟。。
分表工具:linux的shell + mysql自身提供的管理命令
原理:使用一个和原表数据结构一样的表,替换原表。
linux shell内容如下:
=======================开始 
本质的描述与因材施教
永夜-极光
感想 随笔
不管碰到什么事,我都下意识的想去探索本质,找寻一个最形象的描述方式。
我坚信,世界上对一件事物的描述和解释,肯定有一种最形象,最贴近本质,最容易让人理解
&
很迷茫。。。
随便小屋
随笔
小弟我今年研一,也是从事的咱们现在最流行的专业(计算机)。本科三流学校,为了能有个更好的跳板,进入了考研大军,非常有幸能进入研究生的行业(具体学校就不说了,怕把学校的名誉给损了)。
先说一下自身的条件,本科专业软件工程。主要学习就是软件开发,几乎和计算机没有什么区别。因为学校本身三流,也就是让老师带着学生学点东西,然后让学生毕业就行了。对专业性的东西了解的非常浅。就那学的语言来说
23种设计模式的意图和适用范围
aijuans
设计模式
Factory Method 意图 定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。 适用性 当一个类不知道它所必须创建的对象的类的时候。 当一个类希望由它的子类来指定它所创建的对象的时候。 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
Abstr
Java中的synchronized和volatile
aoyouzi
java volatile synchronized
说到Java的线程同步问题肯定要说到两个关键字synchronized和volatile。说到这两个关键字,又要说道JVM的内存模型。JVM里内存分为main memory和working memory。 Main memory是所有线程共享的,working memory则是线程的工作内存,它保存有部分main memory变量的拷贝,对这些变量的更新直接发生在working memo
js数组的操作和this关键字
百合不是茶
js 数组操作 this关键字
js数组的操作;
一:数组的创建:
1、数组的创建
var array = new Array(); //创建一个数组
var array = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度
var arrayObj = new Array([element0[, element1[, ...[, elementN]]]
别人的阿里面试感悟
bijian1013
面试分享 工作感悟 阿里面试
原文如下:http://greemranqq.iteye.com/blog/2007170
一直做企业系统,虽然也自己一直学习技术,但是感觉还是有所欠缺,准备花几个月的时间,把互联网的东西,以及一些基础更加的深入透析,结果这次比较意外,有点突然,下面分享一下感受吧!
&nb
淘宝的测试框架Itest
Bill_chen
spring maven 框架 单元测试 JUnit
Itest测试框架是TaoBao测试部门开发的一套单元测试框架,以Junit4为核心,
集合DbUnit、Unitils等主流测试框架,应该算是比较好用的了。
近期项目中用了下,有关itest的具体使用如下:
1.在Maven中引入itest框架:
<dependency>
<groupId>com.taobao.test</groupId&g
【Java多线程二】多路条件解决生产者消费者问题
bit1129
java多线程
package com.tom;
import java.util.LinkedList;
import java.util.Queue;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.loc
汉字转拼音pinyin4j
白糖_
pinyin4j
以前在项目中遇到汉字转拼音的情况,于是在网上找到了pinyin4j这个工具包,非常有用,别的不说了,直接下代码:
import java.util.HashSet;
import java.util.Set;
import net.sourceforge.pinyin4j.PinyinHelper;
import net.sourceforge.pinyin
org.hibernate.TransactionException: JDBC begin failed解决方案
bozch
ssh 数据库异常 DBCP
org.hibernate.TransactionException: JDBC begin failed: at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:68) at org.hibernate.impl.SessionImp
java-并查集(Disjoint-set)-将多个集合合并成没有交集的集合
bylijinnan
java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.ut
Java PrintWriter打印乱码
chenbowen00
java
一个小程序读写文件,发现PrintWriter输出后文件存在乱码,解决办法主要统一输入输出流编码格式。
读文件:
BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对基础字符或字节流进行相应的读取请求。因
[天气与气候]极端气候环境
comsci
环境
如果空间环境出现异变...外星文明并未出现,而只是用某种气象武器对地球的气候系统进行攻击,并挑唆地球国家间的战争,经过一段时间的准备...最大限度的削弱地球文明的整体力量,然后再进行入侵......
那么地球上的国家应该做什么样的防备工作呢?
&n
oracle order by与union一起使用的用法
daizj
UNION oracle order by
当使用union操作时,排序语句必须放在最后面才正确,如下:
只能在union的最后一个子查询中使用order by,而这个order by是针对整个unioning后的结果集的。So:
如果unoin的几个子查询列名不同,如
Sql代码
select supplier_id, supplier_name
from suppliers
UNI
zeus持久层读写分离单元测试
deng520159
单元测试
本文是zeus读写分离单元测试,距离分库分表,只有一步了.上代码:
1.ZeusMasterSlaveTest.java
package com.dengliang.zeus.webdemo.test;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.j
Yii 截取字符串(UTF-8) 使用组件
dcj3sjt126com
yii
1.将Helper.php放进protected\components文件夹下。
2.调用方法:
Helper::truncate_utf8_string($content,20,false); //不显示省略号 Helper::truncate_utf8_string($content,20); //显示省略号
&n
安装memcache及php扩展
dcj3sjt126com
PHP
安装memcache tar zxvf memcache-2.2.5.tgz cd memcache-2.2.5/ /usr/local/php/bin/phpize (?) ./configure --with-php-confi
JsonObject 处理日期
feifeilinlin521
java json JsonOjbect JsonArray JSONException
写这边文章的初衷就是遇到了json在转换日期格式出现了异常 net.sf.json.JSONException: java.lang.reflect.InvocationTargetException 原因是当你用Map接收数据库返回了java.sql.Date 日期的数据进行json转换出的问题话不多说 直接上代码
&n
Ehcache(06)——监听器
234390216
监听器 listener ehcache
监听器
Ehcache中监听器有两种,监听CacheManager的CacheManagerEventListener和监听Cache的CacheEventListener。在Ehcache中,Listener是通过对应的监听器工厂来生产和发生作用的。下面我们将来介绍一下这两种类型的监听器。
activiti 自带设计器中chrome 34版本不能打开bug的解决
jackyrong
Activiti
在acitivti modeler中,如果是chrome 34,则不能打开该设计器,其他浏览器可以,
经证实为bug,参考
http://forums.activiti.org/content/activiti-modeler-doesnt-work-chrome-v34
修改为,找到
oryx.debug.js
在最头部增加
if (!Document.
微信收货地址共享接口-终极解决
laotu5i0
微信开发
最近要接入微信的收货地址共享接口,总是不成功,折腾了好几天,实在没办法网上搜到的帖子也是骂声一片。我把我碰到并解决问题的过程分享出来,希望能给微信的接口文档起到一个辅助作用,让后面进来的开发者能快速的接入,而不需要像我们一样苦逼的浪费好几天,甚至一周的青春。各种羞辱、谩骂的话就不说了,本人还算文明。
如果你能搜到本贴,说明你已经碰到了各种 ed
关于人才
netkiller.github.com
工作 面试 招聘 netkiller 人才
关于人才
每个月我都会接到许多猎头的电话,有些猎头比较专业,但绝大多数在我看来与猎头二字还是有很大差距的。 与猎头接触多了,自然也了解了他们的工作,包括操作手法,总体上国内的猎头行业还处在初级阶段。
总结就是“盲目推荐,以量取胜”。
目前现状
许多从事人力资源工作的人,根本不懂得怎么找人才。处在人才找不到企业,企业找不到人才的尴尬处境。
企业招聘,通常是需要用人的部门提出招聘条件,由人
搭建 CentOS 6 服务器 - 目录
rensanning
centos
(1) 安装CentOS
ISO(desktop/minimal)、Cloud(AWS/阿里云)、Virtualization(VMWare、VirtualBox)
详细内容
(2) Linux常用命令
cd、ls、rm、chmod......
详细内容
(3) 初始环境设置
用户管理、网络设置、安全设置......
详细内容
(4) 常驻服务Daemon
【求助】mongoDB无法更新主键
toknowme
mongodb
Query query = new Query(); query.addCriteria(new Criteria("_id").is(o.getId())); &n
jquery 页面滚动到底部自动加载插件集合
xp9802
jquery
很多社交网站都使用无限滚动的翻页技术来提高用户体验,当你页面滑到列表底部时候无需点击就自动加载更多的内容。下面为你推荐 10 个 jQuery 的无限滚动的插件:
1. jQuery ScrollPagination
jQuery ScrollPagination plugin 是一个 jQuery 实现的支持无限滚动加载数据的插件。
2. jQuery Screw
S