GitChat·前端 | Vue 组件库实践和设计

前端领域:Bootstrap的折叠面板样式 本文旨在为前端开发者提供关于Bootstrap折叠面板组件的全面指南。折叠面板的基本工作原理标准实现方式和最佳实践响应式设计考虑因素自定义样式和行为的技巧性能优化和可访问性建议背景介绍:提供折叠面板的基本概念和使用场景核心概念与联系:解析折叠面板的架构和交互流程实现原理与操作步骤:详细说明创建折叠面板的具体方法实际应用案例:展示不同场景下的实现示例高级定制技巧:探讨样式覆盖和功能扩展最佳实践与常见问题:总结使用经验和解决方案资源推荐:提供进一步学习的参考资料。 阅读详情

GitChat 作者: 周志祥

前言

现在前端的快速发展,已经让组件这个模式变的格外重要。对于市面上的组件库,虽然能满足大部分的项目,但是一些小型细节方面和使用方面,或者UI库存在的一些bug,会让人很头疼。

那我们应该如何面对解决这些问题。俗话说自己动手丰衣足食。有些组件不用刻意去造。应该考虑如何去打造一个快速,兼容性好,功能齐全的组件库。

  1. 先到github上和一些大公司开源的组件库官网上去看看你所需组件库的demo例子,Prop和event暴露出来了哪些接口。

  2. 货比三家。别人分别用了哪些模式设计,哪种模式最简便,更合理。

  3. 一般成熟的UI库兼容性是经过大量测试和用户使用后没有问题后的结果。省去这一部分,进行样式的借鉴。

  4. 不要太急于进行组件的大量造轮子。因为一个人的战斗是有限的。根据需要和场景项目进行一个个定位,积少成多。

Crib-zk也是我个人目前针对自己项目的需求,额外进行的组件。虽然不能用于开源市场的使用,但是可以用于大家的学习。使用和学习是两种模式。会使用不代表你懂,一旦有些需求不在开源项目组件的范围之内。此时又不能清楚内部的原理,就会措手不及。接下来进行一步一步分析。

大纲:分析组件

  1. alert 插件/组件

  2. backtop 组件

  3. sms-countDown组件(短信倒计时)

  4. search 组件

  5. infinitscroll 组件

  6. actionSheet 组件

  7. accordion 组件(手风琴)

注意 : 看这篇文章最好结合我github上发布的组件,进行比对式观看。

一、alert组件/插件

如果在alert这种弹出式组件里,首先要加一些背景layout的背景层动画化,可以简称为dialog动化,进行一个包裹。

对于alert组件/插件的区别使用性是在那里?

一般来说,先会定义一个.vue文件的alert模板。

enter image description here

<template>
    <div class="vux-alert">
        <x-dialog :value='alertShow' :isClose='false'>
            <div class="crib-confirm_hd" :style='[titleStyle]'>
                <strong class="crib-confirm_title">{{title}}</strong>
            </div>
            <div class="crib-confirm_bd">
                <slot>
                    <div v-html="content"></div>
                </slot>
            </div>
            <div class="crib-confirm_ft">
                <a href="javascript:;" class="crib-confirm_btn crib-confirm_btn_primary" @click="_onSubmit" :style='[buttonStyle]'>{{buttonText}}</a>
            </div>
        </x-dialog>
    </div>
</template>

仔细看上面模板。

  1. 我们发现唯一特别的是对content体中的定义了一个solt。这个slot就是组件模式和插件模式的区分。如果我们想对slot里面定义的是一个额外的展示模板或其它组件插入的话,此时只能用组件模式。

  2. 如果只是我们对content这个数据进填充的话,插件模式也是最方便的。

props接口的暴露
  1. value 显示消息

  2. title (标题)

  3. content 内容最好支持html格式

  4. buttonText底部的按钮文案

  5. titleStyle 标题样式

  6. buttonStyle button样式

event接口暴露
  1. onsubmit 点击时向外暴露事件

  2. onshow 显示时向外暴露的显示事件

  3. onhide 显示时向暴露事件

 data() {
        return {
            alertShow: this.value
        }
    },
    watch: {
        value(val) {
            this.alertShow = val
        }
    },
    methods: {
        _onSubmit() {
            this.alertShow = false
            this.$emit('update:value', false)
            this.$emit('on-submit')
        }
    }

对于value这个值来说,可以用.sync来进行简便的操作。不需要通过 emit来进行通知。在声明组件的时候用 on去进行监听事件,省去了开发者这一步的事。

插件模式

首先要把原本的alert的.vue的模板给引处进来,然后用Vue.extend继承一下。

  $vm = new Alert({
                el: document.createElement('div')
            })

我们自己要手动进行一个创建挂载点。

//此方法是用来把confirm上的prop属性合并到调用时的参数上
const mergeOptions = function($vm,options) {
    //声明一个默认的对象,就是comfirm上props属性的default的值
    const defaults = {}
    //循环confirm属性上的props值
    for (let i in $vm.$options.props){
       //不把value的值算上去,显示改变通过watch或者改变data代理的属性上去监听
       if(i !== 'value'){
          defaults[i] = $vm.$options.props[i].default
       }
    }
    //把confrim组件原本的值和插件传入的options合并
    const _options = Object.assign({},defaults,options)
    //把confirm组件生成的实列对象再次替换成合并的属性
    for(let i in _options) {
        $vm[i] = _options[i]
    }
}

同时要把value显示操作的默认定义的属性除外,进行自己定义后覆盖默认属性,进行显示。

$watcher = $vm.$watch('alertShow', (val) => {
                    if (!val && options && options.onHide) {
                        options.onHide()
                    }
                })

同时对alertshow进行监听,当点击submit的时候会自己动触发事件,然后会改变alertshow的值,然后进行你所想要的操作。

二、backtop 组件

对于backtop组件的话,要理解几点属性。

  1. scrollTop

  2. offsetHeight

let offsetTop = this.scrollview == window ? document.body.scrollTop : this.scrollview.scrollTop
            let offsetHeight = this.scrollview == window ? document.body.offsetHeight : this.scrollview.offsetHeight

scrollTop 是距离顶部的高度。

offsetHeight 元素的高度包括边框。

那如何去判断什么时候显示返回顶部按钮呢?

this.show = offsetTop >= offsetHeight / 2;

只要通过滚动的高度大于滚动元素的高度/2来进行一个适配是最好的。

对于如何进行那方面优化。

可以进行函数节流。节流是个什么?因为进行滚动监听的时候,scroll事件触发的太频繁了。这会影响到整个性能的问题。如果对于上下滚动也要频繁监听。用节点,不适用于防抖操作。

 throttle(func, wait) {
            var context, args;
            var previous = 0;

            return function () {
                var now = +new Date();
                context = this;
                args = arguments;
                if (now - previous > wait) {
                    func.apply(context, args);
                    previous = now;
                }
            }
        },

通过时间戳来进行对比,来进行函数节流。但是有一点需要注意,在节流的同时,不要节流的时节太长。因为mobile上面节流滚动的话,有一个自行滑动的时长。

const getScrollview = function (el) {
    //拿到当前节点
    let currentNode = el;
    //如果有节点,并且节点不等于html ,body 并且节点类型是元素节点
    while (currentNode && currentNode.tagName !== 'HTML' && currentNode.tagName !== 'BODY' && currentNode.nodeType === 1) {
       //拿到节点的overflowy的属性
        let overflowY = document.defaultView.getComputedStyle(currentNode).overflowY;
        //如果此时属性是scroll或者atuo 就返回此节点
        if (overflowY === 'scroll' || overflowY === 'auto') {
            return currentNode;
        }
        //否则就继续向父节点上找
        currentNode = currentNode.parentNode;
    }
    //一但while语句为false的时候就直接返回window对像
    return window;
};


export {getScrollview}

在外层要进行一个包裹,通overflow属性向来进行推测, 是全局滚动还是window 下的滚动,通过while来进行判断递归,来查找所对应的元素 。

三、sms-countDown 短信倒计时组件

enter image description here

对短信倒计时的认知

对于短信倒计时最重要的一点就是从父组件向sms组件通知倒计时开始的一个prop参数,用start替代。

  watch : {
        start (value) {
          if(value === true){
            this.countDown()
          }
        }
      }

同时对start在内部进行监听。一旦从外部传入开始的时候,则内部进行倒计时。

countDown () {
            this.myTime = 60;
            let time = setInterval(()=>{
                this.myTime --;
                if(this.myTime === 0){
                  this.$emit('update:start', false);
                  this.myTime = this.initText;
                  this.flag = true;
                  clearInterval(time)
                }
            },100)
        }

在这里同样要进行一个倒计时停止之后的向外通知。还是用.sync的双向绑定方法,用于简便操作。

在对于第一次倒计时和第二次倒计时的时候,也要对文案这方面进行一个设定。

 firstCkText : {
            type : String,
            default : ''
          },
          secondCKText : {
            type : String,
            default : '重新获取'
          },

第一次点击和第二次点击的按钮,也是对主要的文案的一种设计,所以对文案的变化也是要很关注的。

四、search组件

对于search组件通常能想到哪些对应的功能和想法呢?比如首次进来的时候,要进行自动获取Input的焦点。同时要向外面暴露是否要获取Input获点事的Prop :autoFocus。同时也要注意,一定要在Mounted的时候才能拿 到dom元素。

  mounted() {
        this.autoFocus && this.$refs.input.focus()
    }

一般想知道input里面的value值是否改动的时候,通常都会用keydown或者是keyup事件。但是这里不需要,可以时时把value的值给暴露出去,让外层父组件可以去进行watch监听来进行进所需要的事件操作。

watch: {
        inputValue (val) {
           if(val == ''){
               this.value = ""
           }
        },
        value: {
            handler(val, oldvalue) {
                //当值改变的时候,触发事件
                this.$emit('update:inputValue', val)
                this.$emit('change-val')

            },
            immediate: true

        }
    },

同时这里用到了.sync ,在页面一加载的时候,立马执行了。immediate使得value这个值立马值行了监听。

五、infinite-scroll 组件 (无限滚动组件)

无限滚动最关键的三个地方。第一滚动动底部触发事件;第二如果有二次加载则显示 loading;第三如何没有二次加载则结束文案。

import { getScrollview } from '../../libs/getScrollview.js';

这个不用说,继续寻找需要滚动范围的元素 。

 data() {
        return {
            isLoading: false, //是否正在加载
            isDone: false,  //是否加载完毕
        }
    },

data里面进行之前说的两种模式的状态进行定义。往下看,这一处定义之后对后面有什么好处。

 this.$on('Load', () => {
                this.isLoading = false;
            });
            this.$on('loadDone', () => {
                    this.isLoading = false;
                    this.isDone = true;
            });

需要监听两个事件:

  1. 二次加载load事件。一旦进行二次加载的时候,马上进行isloading等于false 防止重复加载。

  2. 通过loadDone对是否监听完毕。如果加载完毕的话,同样的关闭isloading 对isDone进行true的设置。

isloading和isDone分别对应的那个html 的template部分。

 <div class="list-donetip" v-show='!isLoading&& isDone'>
            <slot name='doneTip'>没有更多数据了</slot>
        </div>

        <div class="list-loading" v-show='isLoading'>
            <slot name='loadingTip'>加载中...</slot>
        </div>

当isloading 为true的时候显示“加载中… ”当isloading 为false的时候,isDone为true的时候才显示 “没有更多数据”,这也是一个标准的无限滚动。

什么时候对isloading和isDone设置为true?

 scrollHandler() {
            if (this.isLoading || this.isDone) return;
            let baseHeight = this.scrollview == window ? document.body.offsetHeight : this.scrollview.offsetHeight
            let moreHeight = this.scrollview == window ? document.body.scrollHeight : this.scrollview.scrollHeight;
            let scrollTop = this.scrollview == window ? document.body.scrollTop : this.scrollview.scrollTop
            if (baseHeight + scrollTop + this.distance > moreHeight) {
                this.isLoading = true;

                this.onInfinite()
            }

            if (!this.scrollview) {
                console.warn('Can\'t find the scrollview!');
                return;
            }
        },

当滚动到底部的时候,对isloading进行为true的设置。外部组件可以调用onInfinite,进行ajax请求等操作。

在外部如何调用呢?

this.$refs.infinite.$emit('loadDone')

对组件进行 ref的设置,然后进行触发loadDone或者load。

比对饿么的组件,它使用的是指令的模式,内部实现还是太复杂。

如何进行一个优化

这里就用到了函数防抖,同上面不用函数节流,用防抖。防抖跟节流的有什么区别?防抖比较更节省性能。如果我们在设置的时间内一直滑动,则不会进行加载,只有滑动到指定的地方,则可以进行检测,通过定时器来实现。

 debounce  (func, wait) {
            var timeout;
            return function () {
                var context = this;
                var args = arguments;

                clearTimeout(timeout)
                timeout = setTimeout(function () {
                    func.apply(context, args)
                }, wait);
            }
        },

六、actionSheet 组件

enter image description here

actionSheet 这里亮点就是巧用了。call方法来改变了this的指向。这个有什么好处?往下面看。

prpps : model 我通过Model这个数据进行递,把文案的改变,点击后所执行的方法一并封装到Model数据里来进行操作。

如果在父组件引入这个组件的时候,看下面代码。

 model: [
                { name: this.name, method(name, index) { location.href = 'tel:110' } }
            ],

如果进行this.指向的话,指向的是父组件。这里就不能直接在data里面声明了。如果是异步的话,只有在ajax请求的异步里进行声明,把值传入,是如何做的呢?

 ff (item,index,method) {
             this.$emit('update:show', false)
             method.call(this.$parent,item,index)
        }

在这里通过.call来把this.的指向到父组件,就能成功的方便的调用了。

七、accordion 手风琴组件

enter image description here

对accordion组件要进行定义两个组件合并成一个组件的模式。

  1. 一个最外层的包裹组件。

  2. 第二个是每一个item的组件。

每说 accordion-item里面的组件,通过

this.height = (this.show ? this.$refs.content.offsetHeight: 0) + 'px';

如果需要显示的话,让每一个item的元素来计算高度,展现出来。

通过_uid来进行 每个item的识别。

  methods : {
           open(uid) {
               this.$children.forEach (item => {
                   console.log(item._uid)
                   if(item._uid == uid){
                       item.show = !item.show
                   }else{
                       if(!this.repeat){
                           item.show = false
                           item.height = 0;
                       }
                   }
               })
           }
       }

能够收起的是那个item组件,则向收起的那个item组件进行一个传递。本质上通过index找到子组件对应的项也可以实现。因为_uid是唯一的。这一步也是省了一些简便的操作。

在这里把一些突出的组件,来开阔我们的思想,来进行一其它组件的封装 ,也可以基于这些组件对自己所需要的项目根据不同的需求来封装。

最后,尤大说了一句话,我最喜欢的就是看别人代码。记住这句话,你的组件能写的又快又好。


实录:《周志祥: Vue 组件库实践和设计实战解析》


这里写图片描述

基于USB总线的虚拟摄像头(UVC)原理简介 前面文章中我们分析了虚拟声卡的实现,在文章中我们展示了创建一个虚拟麦克风和虚拟扬声器的技术原理。完成了音频的虚拟化之后,这里就要谈论一下对于视频的虚拟化了——虚拟摄像头的实现。关于虚拟麦克风和虚拟扬声器的实现,可以参考。虚拟摄像头应用也是非常普遍的,例如云桌面远程摄像头的实现,直播技术。目前对于虚拟摄像头有三种实现方式:DirectShow虚拟摄像头,这个是一种比较古老的技术;在新版本应用中,该项技术基本失效了,尤其是UWP框架程序,DirectShow虚拟摄像头就失效了。 阅读详情

相关推荐

Autosar中CAN信号传输的模块化解析与实战应用

本文深入解析了AUTOSAR架构下CAN信号传输的模块化流程,详细阐述了从应用层软件组件(SWC)到COM模块打包、PduR路由、CanIf硬件抽象直至Can Driver驱动的完整“流水线”。文章通过实战案例,重点说明了模块化设计如何实现解耦与可移植性,并提供了关键模块配置要点与调试技巧,旨在帮助开发者构建高可靠、实时的车载通信系统。

g9h0i1的博客 902

个性新颖纯css手风琴效果选项卡

在这个方法中,我们使用纯CSS关键帧动画来实现选项卡的展开和收缩。通过定义`@keyframes`规则,我们可以在动画过程中逐渐改变`max-height`属性的值,从而实现选项卡的展开和收缩

一步一个脚印,踏实努力,向着目标前进 1104

Python对接海康威视机器视觉工业相机

工业相机只允许单条连接,也就是说MVS如果连接了相机,python代码就无法获取数据,此时必须。相机工具类(读者直接复制)HKCamera_class.py。博主这里出现了一个警告:获取不到相机参数。四、使用Pycharm打开Python代码示例文件夹。三、找到MVS示例代码(代码在MVS的安装位置)二、解压并安装MVS客户端。一、下载MVS客户端。安装一下opencv。

Good Luck 2万+

Vue 组件库实践和设计

现在前端的快速发展,已经让组件这个模式变的格外重要。对于市面上的组件库,虽然能满足大部分的项目,但是一些小型细节方面和使用方面,或者UI库存在的一些bug,会让人很头疼。 那我们应该如何面对解决这些问题。俗话说自己动手丰衣足食。有些组件不用刻意去造。应该考虑如何去打造一个快速,兼容性好,功能齐全的组件库。 先到github上和一些大公司开源的组件库官网上去看看你所需组件库的demo例子,Prop...

weixin_33878457的博客 250

Cyclone MAX独立编程实战:从硬件接口到SAP镜像的嵌入式烧录指南

在嵌入式系统开发与量产中,固件烧录是连接软件与硬件的关键环节。其核心原理是通过特定的调试接口(如JTAG、BDM)和编程算法,将编译后的机器码写入目标处理器的非易失性存储器。这项技术的价值在于确保软件在硬件上的可靠部署,是产品功能实现和质量保证的基础,广泛应用于汽车电子、工业控制等对一致性与可靠性要求极高的领域。独立编程器(Stand-Alone Programmer)在此基础上,通过集成存储、交互界面和任务逻辑,实现了脱离PC的自动化操作,极大提升了产线效率和现场维护的便捷性。本文以Cyclone MAX

weixin_34038293的博客 467

两轮差速机器人运动学模型

两轮差速底盘 1.1、底盘说明 两轮差速底盘由两个动力轮位于底盘左右两侧,两轮独立控制速度,通过给定不同速度实现底盘转向控制。一般会配有一到两个辅助支撑的万向轮。 主要底盘有: 1、Turtlebot; 2、扫地机器人; 3、无人仓AGV小车; 4、轮椅; 底盘主要特点: 1、控制简单、里程计计算简单。 2、只能给定X方向速度、Z轴方向角速度。 1.2、底盘运动学分析 1.2.1、底盘模型 图1.2.1 常见的两轮差速底盘模型 1.2.2、机器人本身约束方程(物理特性) 图1.2.2 a 左侧是车的两个

su_fei_ma_su的博客 3万+

python kivy 控件介绍--- Accordion 折叠控件

Accordion控件,我姑且称之为折叠控件,因为有道翻译出来后是 可折叠的 管风琴。  动画效果如上图所示。 我们先看一下源代码: from kivy.uix.accordion import Accordion, AccordionItem from kivy.uix.label import Label from kivy.app import App class Accor...

桥南玄机子的博客 2086

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

AJAX Accordion:可折叠面板的集合

Accordion:可折叠面板的集合 Accordion控件中可以包含若干个面板,让用户通过点击不同面板的标题栏一次只展开并显示其中的一个内容,就像将好多个CollapsiblePanel堆到了一起。 10.2.1 应用场景 通常来讲,将一个无比长的列表直接显示给用户是一种极不礼貌的行为。解决方案有很多,归类显示就是其中之一。例如我们常见的QQ或MSN Messenger(Wind...

dbjtimve93993的博客 248

【图像超分】论文复现:Pytorch实现ESPCN

论文精读:由于ESPCN没有公布源码,我们选择github上一个高star的项目来复现。准备数据集,以及数据预处理搭建网络模型设置参数并训练测试训练好的模型用训练好的模型测试自己的数据本文我们使用pycharm链接服务器训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1万+

YOLOv11魔改高效涨点 | 注意力篇 | SimAM注意力:基于神经科学的 3D 注意力机制,三维权重的暴力美学,无参数也能暴力涨点?代码极简,彻底疯狂!!!

在本文中,我们为卷积神经网络(ConvNets)提出了一个概念简单但非常有效的注意力模块。与现有的通道注意力(Channel-wise)和空间注意力(Spatial-wise)模块不同,我们的模块在不向原始网络添加参数的情况下,推断出层中特征图的 3D 注意力权重。具体来说,我们基于一些知名的神经科学理论,提出优化一个能量函数来寻找每个神经元的重要性。我们进一步推导出了该能量函数的快速闭式解,并表明该解可以用不到十行代码实现。

猫天意的博客 248

GitChat · 前端 | Vue 组件库实践和设计

来自 GitChat 作者:周志祥更多IT技术分享,尽在微信公众号:GitChat技术杂谈 前言 现在前端的快速发展,已经让组件这个模式变的格外重要。对于市面上的组件库,虽然能满足大部分的项目,但是一些小型细节方面和使用方面,或者UI库存在的一些bug,会让人很头疼。 那我们应该如何面对解决这些问题。俗话说自己动手丰衣足食。有些组件不用刻...

weixin_34183910的博客 118

MCAL中MCU的配置

MCAL配置中MCU配置,PLL计算配置,系统时钟以及各模块参数配置

dhyw12399999的博客 3794

【GitChat】精选——JavaScript进阶指南

GitChat 是一款基于微信平台的 IT 阅读/写作互动产品。我们的目的是通过这款产品改变 IT 知识的学习方式,让专业读者获得自主选择权,让知识分享者获得收益。关于GitChat 你想知道的都在这里在这里每周会为大家带来最新的Chat分享,挑一个你感兴趣的话题,来一场Chat,赴一场约会吧!从这里发表我的Chat本周Chat专题推荐:JavaScript 作为 GitHub 上排名第一的热门语言

优快云 官方博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【GitChat】精选——双 11 大前端工程师读书清单

GitChat 是一款基于微信平台的 IT 阅读/写作互动产品。我们的目的是通过这款产品改变 IT 知识的学习方式,让专业读者获得自主选择权,让知识分享者获得收益。关于GitChat 你想知道的都在这里在这里每天会为大家带来最新的Chat分享,挑一个你感兴趣的话题,来一场Chat,赴一场约会吧!双 11 大前端工程师读书清单在电商巨头们近期敲锣打鼓的宣传下,我们的购书车单也越来越长。“穷。”,是我们

优快云 官方博客 1万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

GitChat · 前端 | 从软件工程角度看大前端技术栈

GitChat 作者:韩亦乐 关注微信公众号:GitChat 技术杂谈 ,这里一本正经的讲技术 我们都知道,大学几乎是没有 Web 前端课的。以我所在的大学为例,唯一引导我们了解 JavaScript 的也只是‘人机界面’和‘Web应用开发’选修课。再者,由于这些选修课的课时短、面向的主要群体是大部分大学生等原因,其最终所涉及的内容层次也很难赶上近

技术杂谈 5046

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

GitChat · 前端 | JavaScript 进阶之 Vue.js + Node.js 入门实战开发

GitChat 作者:小青年 关注公众号:GitChat 技术杂谈,一本正经的讲技术 前言随着前端技术的快速迭代,JavaScript 的关注度越来越高,相关的生态链和前后端分离的解决方案愈趋完善,JavaScript 发挥着越来越重要的作用。

技术杂谈 4565

Vue 单页面项目前端架构方案设计

在《Node.js 实战》中作者提到三个开发者角色,代理开发者,产品开发者,和开源开发者。基于业务开发,大多数为代理开发者,即诉求框架封装好功能性开发,开发者将主要精力放在业务层开发上。本 Chat 提供一个基于 Vue-cli2 生成项目模板的前端架构设计方案。 在本场 Chat 中,会涉及到如下内容: 不同环境下的分别打包 CSS 的规范化 Axios 的封装 递归动态导航 全局组件注册 常...

GitChat 1694

GitChat · 前端 | Webpack 工程的 PWA 实战

GitChat 作者:Jrain’L 关注微信公众号:GitChat 技术杂谈 ,一本正经的讲技术 PWA 是前端的未来,也是已经到达的未来。本文的内容,将会从搭建一个基于 webpack 的工程开始,介绍 webpack 相关的知识,同时引入 PWA 的概念,逐步把这个工程打造成一个完整的 PWA 应用,并最终部署上线。

技术杂谈 2911

非官方GitChat客户端及代码发布

在我写《使用 Angular2+ 开发 Markdown 编辑器》时,实验Electron功能,顺手为GitChat写了一个客户端,把源码发布于:https://gitee.com/techcave/GitChatClient。程序界面如下:       更多细节请参与Chat《使用 Angular2+ 开发 Markdown 编辑器》,微信扫描下面的二维码:       ...

tedeum 184

4.24 前端日报

给「前端开发博客」加星标,每天打卡学习长按二维码即可识别“进入网页”查看哟~1、webpack基本使用npm install webpack webpack-cli webpack-...

前端开发博客 468

如何从零开始自学前端

本场 Chat 我将教会你如何快速自学编程技术,如何自己去写一份不错的简历,如何找到自己想要的工作。结合我自己学习前端找工作的经历来说,我将分享如何系统学习、模块化的经验,我将告诉你我自己是如何在3个月内自学前端,如何在实践中提升开发效率、规范开发流程的。 本场Chat的主要内容包括: 前端的自学和提高 简历的制作和投递 前端面试工作时应该掌握的技能 前端面试的一些问题设置 现在企业需要前端招聘...

GitChat 1430

20190625 前端开发日报

给「前端开发博客」加星标,每天打卡学习长按二维码即可识别“进入网页”查看哟~1、【HTTP】HTTP 的15个常见知识点复习自从入职新公司到现在,我们前端团队内部一直在做 每周一练 ...

前端开发博客 424

前端面试的那些事儿

所谓金三银四,现在正是跳槽的旺季,因此这里打算出一个专题,总结一下前端面试中经常会问的高频知识点。 分享内容大概分为以下几个方面: JS 基础知识点和常考面试题; ES6 知识点和常考面试题; React 和 Vue 常考基础知识点; 常考算法题解析; 面试当中的小技巧。 ...

GitChat 550

CSS 原生动画以及和 Vue 的结合使用

我是由 iOS 开发转向前端开发的,转型过程中 CSS 学习和使用是一大难点,而 CSS 动画作为 CSS 的高级知识点之一更是一座大山。Vue 的 &lt;transition&gt; 内置组件做了很完善的封装,让过渡和动画的使用变得更加方便。本场 Chat 会先介绍原生 CSS 过渡和动画基础,然后从 Vue &lt;transition&gt; 源码的角度分析 Vue 是怎么管理动画状态的。...

GitChat 1707

前端 「人傻钱多 」 速来!

本文推荐 | 《前端开发核心知识进阶》GitChat 作者 | 侯策责编 | 林瑟首图 | 电影《飞驰人生》都说前端“人傻钱多”我偏不信!也常听见一些前端工程师抱怨,这个...

优快云大数据 268
上一篇: GitChat·架构 | 如何从零开始搭建高性能直播平台?
下一篇: GitChat·安全 | 搭建并使用便携式 4G/LTE 伪基站研究移动安全
软件供应链安全
软件供应链安全 领域专家: 后端开发技术领域 领域专家: 后端开发技术领域
博客等级 码龄9年 1万+粉丝 347原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值