javascript ,从mozilla 官方网站学习语法,非常不错_org.mozilla.javascript-程序员宅基地

技术标签: foreach  nodejs  javascript  

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/81153733

博主地址是:http://blog.csdn.net/freewebsys

1,关于mozilla 开发者


https://developer.mozilla.org/zh-CN/
还有这么一个开发者中心呢,上面搜索写JavaScript的东西也相当的全面。
开始是使用 firefox,现在使用了 chrome就再也不看 mozilla 的东西了。
但是人家有个号东西也去学习。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Introduction
学习javascript

2,学习


虽然写javascript好多年,但是一些高级的用法不会。
造成代码感觉上冗余的多,不优美。
比如昨天写的CURD 项目设置属性为空,就相当难看的代码:

filters: {
          id: '',
          userName: '',
          password: '',
          nickName: '',
          role: '',
          status: '',
          type: '',
        },
        loading: false,
        dataForm: {
    //编辑界面数据
          id: '',
          userName: '',
          password: '',
          nickName: '',
          role: '',
          status: '',
          type: '',
          createTime: '',
          updateTime: '',
        },

感觉上肯定有啥高级的用法,能将属性的默认值设置空啥的。
或者使用啥foreach的函数。

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

拼接字符串:

let tmpDataForm = this.dataForm //赋值变量
          Object.keys(tmpDataForm).forEach(function(key){
    
            data += "&"+key+"=" + tmpDataForm[key]
          })
进行filter查询:
let query = ""
        let tmpFilters = this.filters //赋值变量
        Object.keys(tmpFilters).forEach(function(key){
    
          query += "&"+key+"=" + tmpFilters[key]
        })

3,代码优化


昨天的curd优化:
https://blog.csdn.net/freewebsys/article/details/81112630

<template>
 <section>

  <!--工具条-->
  <el-col :span="24" class="toolbar" style="padding-bottom: 0px;">
   <el-form :inline="true" :model="filters">
    <el-form-item><el-button type="primary" @click="editFunc">新建</el-button></el-form-item>
    <el-form-item><el-input v-model="filters.id" placeholder="id"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.userName" placeholder="用户名"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.password" placeholder="密码"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.nickName" placeholder="昵称"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.role" placeholder="角色"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.status" placeholder="状态"></el-input></el-form-item>
    <el-form-item><el-input v-model="filters.type" placeholder="类型"></el-input></el-form-item>
    <el-form-item>
     <el-button type="primary" v-on:click="listFunc">查询</el-button>
    </el-form-item>
   </el-form>
  </el-col>

  <!--列表-->
  <template>
   <el-table :data="dataList" v-loading="loading" style="width: 100%;">

    <el-table-column prop="id" label="id"/>
    <el-table-column prop="userName" label="用户名"/>
    <el-table-column prop="password" label="密码"/>
    <el-table-column prop="nickName" label="昵称"/>
    <el-table-column prop="role" label="角色"/>
    <el-table-column prop="status" label="状态"/>
    <el-table-column prop="type" label="类型"/>
    <el-table-column prop="createTime" label="创建时间"/>
    <el-table-column prop="updateTime" label="更新时间"/>
    <el-table-column label="操作" width="150">
     <template slot-scope="scope"><el-button-group>
      <el-button type="primary" size="mini" @click="editFunc(scope.$index, scope.row)">编辑</el-button>
      <el-button type="danger" size="mini" @click="deleteFunc(scope.$index, scope.row)">删除</el-button>
      </el-button-group></template>
    </el-table-column>
   </el-table>
  </template>
  <el-col style="text-align:right;padding-top: 30px;">
   <el-pagination @current-change="pageChangeFunc" background="" layout="prev, pager, next" :total="totalCount">
   </el-pagination>
  </el-col>

  <!--编辑弹出页面-->
  <el-dialog title="用户编辑" :visible.sync="dialogVisible">
   <el-input v-model="dataForm.id" placeholder="id" type="hidden"/>
   <el-form label-width="100px" :rules="dataFormRules" ref="dataForm">
    <el-form-item label="用户名" prop="userName"><el-input/></el-form-item>
    <el-form-item label="密码" prop="password"><el-input/></el-form-item>
    <el-form-item label="昵称" prop="nickName"><el-input v-model="dataForm.nickName"/></el-form-item>
    <el-form-item label="角色" prop="role"><el-input v-model="dataForm.role"/></el-form-item>
    <el-form-item label="状态" prop="status"><el-input v-model="dataForm.status"/></el-form-item>
    <el-form-item label="类型" prop="type"><el-input v-model="dataForm.type"/></el-form-item>
   </el-form>
   <span slot="footer" class="dialog-footer">
      <el-button @click="dialogVisible = false">取 消</el-button>
      <el-button type="primary" @click="saveFunc">确 定</el-button>
    </span>
  </el-dialog>

 </section>
</template>

<script>
export default {
    data() {
      return {
        filters: {
          id: '', userName: '', password: '', nickName: '', role: '', status: '', type: '',
        },
        loading: false,
        dataForm: {
    //编辑界面数据
          id: '', userName: '', password: '', nickName: '', role: '', status: '', type: '', createTime: '', updateTime: '',
        },
        dataFormRules: {
    //编辑界面校验规则
          userName: [{required: true, message: '请输入用户名', trigger: 'blur' } ],
          password: [{required: true, message: '请输入密码', trigger: 'blur' } ],
          nickName: [{required: true, message: '请输入昵称', trigger: 'blur' } ],
          role: [{required: true, message: '请输入角色', trigger: 'blur' } ],
          status: [{required: true, message: '请输入状态', trigger: 'blur' } ],
          type: [{required: true, message: '请输入类型', trigger: 'blur' } ],
        },
        dialogVisible: false,
        dataList: [], //列表数据
        totalCount: 0,
        currentPage: 1
      }
    },
    methods: {
      editFunc: function(index, row) {
     //新建&编辑
        if (row == undefined) {
          let tmpDataForm = this.dataForm //赋值变量,修改tmpDataForm即可
          Object.keys(tmpDataForm).forEach(function(key){
     
            tmpDataForm[key] = ''
          })
          this.dialogVisible = true
        } else {
          this.$axios.get('/userInfo/get?id=' + row.id)
          .then(resp => {
    //数据直接赋值
              this.dataForm = resp.data.data
            }).finally(() => {
            this.loading = false
            this.dialogVisible = true
          })
      }},
      saveFunc: function() {
     
        this.$refs['dataForm'].validate((valid) => {
          if (!valid) { return false }
          let data = ""
          let tmpDataForm = this.dataForm //赋值变量
          Object.keys(tmpDataForm).forEach(function(key){
     
            data += "&"+key+"=" + tmpDataForm[key]
          })
          this.$axios.post('/userInfo/save?' + data)
          .finally(() => {
            this.dialogVisible = false
            this.listFunc()
          })
        })
      },
      deleteFunc: function(index, row) {
     
        this.$confirm('确认删除该记录吗?', '提示', {
          type: 'warning'
        }).then(() => {
          this.$axios.delete('/userInfo/delete?id=' + row.id)
          .finally(() => {
            this.listFunc()
          })
        })
      },
      listFunc: function() {
     
        this.loading = true
        let query = ""
        let tmpFilters = this.filters //赋值变量
        Object.keys(tmpFilters).forEach(function(key){
     
          query += "&"+key+"=" + tmpFilters[key]
        })
        this.$axios.get('/userInfo/list?page=' + this.currentPage + query)
        .then(resp => {
          this.dataList = resp.data.data
          this.totalCount = resp.data.totalCount
        }).finally(() => {
          this.loading = false
        })
      },
      pageChangeFunc: function(idx) {
     
        this.currentPage = idx
        this.listFunc()
      }
    },
    created: function() {
     
      this.listFunc()
    }
  };
</script>

4,总结


js代码中出现大量的 set 代码其实是冗余的本来就是动态语言,不能像java那样去写:this.xxx = xxx 这样不优雅。
要用 forEach去写:

let tmpDataForm = this.dataForm //赋值变量,修改tmpDataForm即可
          Object.keys(tmpDataForm).forEach(function(key){
    
            tmpDataForm[key] = ''
          })

这个要是大表单数据,十几个 也没有啥意义。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/81153733

博主地址是:http://blog.csdn.net/freewebsys

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/freewebsys/article/details/81153733

智能推荐

CLion使用相关问题_clion不能复制粘贴-程序员宅基地

文章浏览阅读355次。Ctrl + Shift + F 搜索整个工程或指定目录 (连续按两次Esc,搜索框就会消失)Ctrl + W 可以实现一个字符、一个字符串、一行、两行代码的扩选。Alt + Shift + 快速查看最近对项目进行的变更。Ctrl+G,输入跳到的行数进行代码编辑。Ctrl + D 快速复制光标所在行。Ctrl + N 类查找。_clion不能复制粘贴

Java SPI机制详解-程序员宅基地

文章浏览阅读699次,点赞23次,收藏13次。首先需要定义一个接口,用于表示需要被扩展的功能。通过Java SPI机制,我们可以方便地为接口提供多个实现,并通过配置文件动态加载这些实现,而不需要修改代码。这种方式使得系统更加灵活和可扩展。希望对看到本文的你有帮助。上一篇CGLIB实现动态代理详解!!!!!下一篇Java的强引用、软引用、弱引用和虚引用详解。CGLIB实现动态代理详解!!!Java的强引用、软引用、弱引用和虚引用详解。

三维立方体剖分绘图(matlab)_matlab画三维图剖面-程序员宅基地

文章浏览阅读2.9k次。有限元或者其他数值计算程序中经常会涉及到对求解空间的剖分(均匀剖分或者非均匀剖分),在数据可视化过程中,需要绘制剖分单元,反映分布结果。下面给出matlab程序。function [x,y,z] = plotcube( p1, cube_x, cube_y, cube_z )%% p1: 立方体左下角顶点坐标%% cube_x, cube_y, cube_z 是立方体三个方向边长v = z..._matlab画三维图剖面

剑指offer-62.圆圈中最后剩下的数字(约瑟夫问题)★_个人围成一圈,1-m报数,叫到m的出圈,剩下继续报数,剩最后一个人的时候 他的编-程序员宅基地

文章浏览阅读171次。题目来源:https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数..._个人围成一圈,1-m报数,叫到m的出圈,剩下继续报数,剩最后一个人的时候 他的编

在右键菜单中加入BitLocker重新上锁功能-程序员宅基地

文章浏览阅读3.5k次。当使用BitLocker给磁盘上锁后,可以通过命令:manage-bde -lock d: -forcedismount 将已经解锁的磁盘重新上锁,如果觉得每次都通过命令行写命令很麻烦,那可以通过修改注册表的方式在右键菜单上增加一个上锁功能。步骤如下:1、打开注册表编辑器2、在键值【HKEY_CLASSES_ROOT\Drive\shell】下添加项【runas】,然后..._manage-bde -unlock d:

sqoop 报错:Could not load db driver class: com.microsoft.sqlserver.jdbc.SQLServerDriver-程序员宅基地

文章浏览阅读4k次。一、问题描述将sql server的数据导入hive,结果报错:Warning: /opt/cloudera/parcels/CDH-5.15.2-1.cdh5.15.2.p0.3/bin/../lib/sqoop/../accumulo does not exist! Accumulo imports will fail.Please set $ACCUMULO_HOME to th..._could not load db driver class

随便推点

C/C++MFC模拟校园卡消费记录查询系统[2024-04-10]-程序员宅基地

文章浏览阅读252次,点赞3次,收藏6次。同学们都在机房做实验或自由上机,请根据自己实际使用情况编写一份模拟校园卡消费记录查询系统,实现登录,计费,挂失,统计等相关功能。可以选择TC2.0、TC3.0、VC++6.0等开发环境,或者与老师讨论,选择自己熟悉的开发工具与平台。(5)如有可能,可使用MFC 等开发工具,实现彩色或图形操作界面。//状态 ,正常、挂失、冻结。char state;//状态 ,是否上机中。

java/php/node.js/python微信小程序的网上购物商城平台【2024年毕设】-程序员宅基地

文章浏览阅读69次。本系统带文档lw万字以上文末可领取本课题的JAVA源码参考。

51单片机学习——9--温度传感器DS18B20_ds18b02在ad中怎么搜索-程序员宅基地

文章浏览阅读3.3k次,点赞2次,收藏31次。温度传感器DS18B20简介特点实物图原理图内部结构(1) 64位(激)光刻只读存储器(2) DS18B20温度转换规则(3) DS18B20温度传感器的存储器(4) 配置寄存器ROM指令RAM指令编程原理DS18B20初始化DS18B20读时序DS18B20写时序大致过程代码实现DS18B20简介DS18B20数字温度传感器接线方便,封装后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式。主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温_ds18b02在ad中怎么搜索

专科毕业三年,从外包公司到今日头条offer,我想把面试心得分享给你-程序员宅基地

文章浏览阅读736次,点赞28次,收藏12次。WebView 与 JS 交互方式,shouldOverrideUrlLoading、onJsPrompt使用有啥区别 -Flutter、Kotlin接触使用过没有其他项目相关问题算法 - 二叉树输出第 k 层节点元素。

作为程序员,其实你并没真正努力(一)_程序员努力的方向-程序员宅基地

文章浏览阅读5.9k次,点赞11次,收藏15次。IT技术发展迅猛,新技术层出不穷,具有良好的学习能力,并及时获取新知识,成为程序员职业发展的核心竞争力。本文作者结合多年学习经验总结出提高程序员学习能力的三个要点,即要善于读书、要高效学习、要有好心态。IT技术的发展日新月异,新技术层出不穷,具有良好的学习能力,能及时获取新知识、随时补充和丰富自己,已成为程序员职业发展的核心竞争力。本文中,作者结合多年的学习经验总结出了提高程序员学习能_程序员努力的方向

FreeMarker详细介绍-程序员宅基地

文章浏览阅读6.7w次,点赞134次,收藏738次。FreeMarker概述FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。 是一个Java类库。FreeMarker 被设计用来生成 HTML Web 页面,特别是基于 MVC 模式的应用程序,将视图从业务逻辑中抽离处理,业务中不再包括视图的展示,而是将视图交给 FreeMarker 来输出。虽然 FreeMarker 具有一些编程的能力,但通常由 Java 程序准备要显示的数据,由 FreeMar_freemarker