前端css样式小知识点(2)

news2024/12/24 0:08:53

文章目录

    • 前言
    • 图文实操讲解
      • 1、微信小程序之页面跳转方法
        • 页面跳转有很多种方式,先简单说一下它们的区别吧
        • 简单实现
      • 2、微信小程序this.setData修改对象、数组中的值
      • 3、微信小程序-获取input值的方法
      • 4、微信小程序-常用的三种弹窗
      • 5、dataset 简单小知识 误区
      • 6、that.setData is not a function报错
      • 7、em、rem、vh、vw作用
      • 8、简单-模态框效果基础版
      • 9、转换日期,比较日期是否相等
      • 10、js数组添加对象
      • 11、微信小程序实现同时单击、双击、长按

前言

微信小程序,前端开发小知识点。

图文实操讲解

1、微信小程序之页面跳转方法

页面跳转有很多种方式,先简单说一下它们的区别吧

wx.navigateTo:
用于保留当前页面、跳转到应用内的某个页面,使用 wx.navigateBack可以返回到原页面。对于页面不是特别多的小程序,通常推荐使用 wx.navigateTo进行跳转, 以便返回原页面,以提高加载速度。当页面特别多时,则不推荐使用。
wx.redirectTo:
当页面过多时,被保留页面会挤占微信分配给小程序的内存,或是达到微信所限制的 5 层页面栈。这时应该考虑选择 wx.redirectTo。wx.redirectTo()用于关闭当前页面,跳转到应用内的某个页面。这样的跳转,可以避免跳转前页面占据运行内存,但返回时页面需要重新加载,增加了返回页面的显示时间。
wx.reLaunch:
wx.reLaunch()与 wx.redirectTo()的用途基本相同, 只是 wx.reLaunch()先关闭了内存中所有保留的页面,再跳转到目标页面。
wx.switchTab:
对于跳转到 tab bar 的页面,最好选择 wx.switchTab(),它会先关闭所有非 tab bar 的页面。其次,也可以选择 wx.reLaunch(),它也能实现从非 tab bar 跳转到 tab bar,或在 tab bar 间跳转,效果等同 wx.switchTab()。使用其他跳转 API 来跳转到 tab bar,则会跳转失败。
switchTab无法携带参数跳转
wx.navigateBack:
用于关闭当前页面,并返回上一页面或多级页面。开发者可通过 getCurrentPages() 获取当前的页面栈,决定需要返回几层。这个 API 需要填写的参数只有 delta,表示要返回的页面数。若 delta 的取值大于现有可返回页面数时,则返回到用户进入小程序的第一个页面。当不填写 delta 的值时,就默认其为 1(注意,默认并非取 0),即返回上一页面。

简单实现

wx.navigateTo
index.wxml

<view bindtap="Click" class="btn">
  点击按钮
</view>

index.js

Click: function () {
    let name = '传递的数据'; // 跳转传参的参数
    wx.navigateTo({ //在接收页面的url后面加上“?自定义名称=字符串”就可以通过url传值
      url: '../test/index?name=' +name//此处注意中文符号与引文符号的?
    })
  },

第二个页面
index.wxml

<text>第二个页面的测试页</text>
<view> 显示内容:{{name}}</view>

index.js

onLoad: function (options) {
    console.log(options.name)
    this.setData({
      name:options.name
    })
},

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

多参数传递

  Click: function () {
    let name = '传递的数据'; // 跳转传参的参数
    let name2='传递的数据2';
    let name3='传递的数据3';
    wx.navigateTo({ //在接收页面的url后面加上“?自定义名称=字符串”就可以通过url传值
      url: '../test/index?name=' +name+"&name2"+name2+"&name3"+name3//此处注意中文符号与引文符号的?
    })
  },

**带参数传参长度超过限制被截取时,需要使用encode **
第一个.js页面代码

// xxxx是跳转传的数组,先转字符串,再encode
let xxxx = posters.toString()
console.log( encodeURIComponent(xxxx))
wx.navigateTo({
  url: '../test/index?posters=' + encodeURIComponent(xxxx)
})

第二个.js页面接收代码

// onload接收传参数据
onLoad: function (options) {
    let xxxx = decodeURIComponent(options.posters) // 先decode再把字符串转数组
    let objectList = xxxx.split(",");
    console.log(objectList)
    this.setData({
      objectList: objectList
    })
  },

2、微信小程序this.setData修改对象、数组中的值

在微信小程序的前端开发中,使用this.setData方法修改data中的值,其格式为:

this.setData({
   '参数名1': 值1,
   '参数名2': 值2
)}

假设原数据为:

data: {
    user_info:{
      name: 'li',
      age: 10
    },
    cars:['nio', 'bmw', 'wolks']
},

方式一:
使用[‘字符串’],例如:

this.setData({
      ['user_info.age']: 20,
      ['cars[0]']: 'tesla'
})

方式二:
构造变量,重新赋值,例如:

var temp = this.data.user_info
temp.age = 30
   
this.setData({
    user_info: temp
})
var temp = this.data.cars
temp[0] = 'volvo'
    
this.setData({
    cars: temp
})

3、微信小程序-获取input值的方法

bindinput
方式一:

<input  bindinput='getInputValue'  name='price' type='text' placeholder='输入内容'></input>

其中 e.detail 是获取 input 数据 其中包含value值, cursor 是获取光标的位置。

getInputValue(e){
  console.log(e.detail)// {value: "ff", cursor: 2}  
}

方式二:

<form bindsubmit='loginForm'>
  <text class='login-title'>用户登录:</text>
  <input type='text' name='username' placeholder="请输入用户名"></input>
  <input type='password' name='password' placeholder="请输入账号密码"></input>
  <view class='ligin-button'>
    <button formType="submit" type='primary'>点击提交</button>
    <button formType="reset" type='primary'>重置数据表单</button>
  </view>
</form>

在js 中获取数据,通过data.detail.value获取数据,获得的是json对象数据键值对一一对应

loginForm: function(data) {
    console.log(data.detail.value)//  {username: "hgj", password: "fsdfsd"}
    var username = data.detail.value.username
    var password = data.detail.value.password;
}

4、微信小程序-常用的三种弹窗

表示操作成功,文字上方会显示一个表示操作成功的图标。

wx.showToast({
  title: '操作成功!', // 标题
  icon: 'success',  // 图标类型,默认success
  duration: 1500  // 提示窗停留时间,默认1500ms
})

表示加载中,显示为加载中图标。

wx.showToast({
  title: '加载中...',
  icon: 'loading',
  duration: 1500
})

不显示图标,一般用作提示。

wx.showToast({
  title: '该功能未上线!',
  icon: 'none',
  duration: 1500
})

以上3种弹窗均使用wx.showToast接口,调用后会根据设定的duration停留一定时间。
此外,表示加载中的弹窗还可以使用wx.showLoading接口,但调用该接口时弹窗并不会自动消失,而是需要手动调用wx.hideLoading接口使弹窗消失。

// 开始加载数据
wx.showLoading({
 title: '加载中',
})
// 数据加载中... // 数据加载中...
// 数据加载完成,隐藏弹窗
wx.hideLoading()

5、dataset 简单小知识 误区

在组件节点中可以附加一些自定义数据。这样,在事件中可以获取这些自定义的节点数据,用于事件的逻辑处理。
在 WXML 中,这些自定义数据以 data- 开头,多个单词由连字符 - 连接。这种写法中,连字符写法会转换成驼峰写法,而大写字符会自动转成小写字符。如:

  • data-element-type ,最终会呈现为 event.currentTarget.dataset.elementType ;
  • data-elementType ,最终会呈现为 event.currentTarget.dataset.elementtype 。

示例:

<view data-alpha-beta="1" data-alphaBeta="2" bindtap="bindViewTap"> DataSet Test </view> 
Page({
  bindViewTap:function(event){
    event.currentTarget.dataset.alphaBeta === 1 // - 会转为驼峰写法
    event.currentTarget.dataset.alphabeta === 2 // 大写会转为小写
  }
})

6、that.setData is not a function报错

1、不要把var that=this定义在了第二层函数里,如果设置了就获取到index.js里的公共变量this,因此拿不到定义的空data。
2、当全局定义时,必须刷新才不报错,Ctrl+S保存没有进行全局刷新
为什么使用var that=this?
javascript语言中,this代表着当前的对象,它在程序中随着执行的上下文随时会变化。在本例中回调函数对象相对于showactionsheet点击事件函数对象已经发生了变化。所以已经不是原来的页面对象了。自然就没有了data属性,也没有了data.itemLists属性了。解决的办法就是复制一份当前的对象。所以我们有了这个重要的语句:

var that=this;//把this对象复制到临时变量that.

这时候我们使用that 就不会找不到原来的对象了。

console.log(that.data.itemLists[res.tapIndex]);//使用that.data 属性

7、em、rem、vh、vw作用

em
在做手机端的时候经常会用到的做字体的尺寸单位
说白了 em就相当于“倍”,比如设置当前的div的字体大小为1.5em,则当前的div的字体大小为:当前div继承的字体大小*1.5
但是当div进行嵌套的时候,em始终是按照当前div继承的字体大小来缩放,参照后面的例子。
rem
这里的r就是root的意思,意思是相对于根节点来进行缩放,当有嵌套关系的时候,嵌套关系的元素的字体大小始终按照根节点的字体大小进行缩放。
参照后面给的demo
vh
vh就是当前屏幕可见高度的1%,也就是说
height:100vh == height:100%;
但是有个好处是当元素没有内容时候,设置height:100%该元素不会被撑开,
但是设置height:100vh,该元素会被撑开屏幕高度一致。
vw
vw就是当前屏幕宽度的1%
补充一句,当设置width:100%,被设置元素的宽度是按照父元素的宽度来设置,
但是100vw是相对于屏幕可见宽度来设置的,所以会出现50vw 比50%大的情况

8、简单-模态框效果基础版

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

index.wxml

<view class="mask" catchtouchmove="preventtouchmove" wx:if="{{showmodal}}"></view>

<view class="modaldlg" wx:if="{{showmodal}}">
  <text>欢迎来到模态对话框~</text>
  <button bindtap="go">点我可以关掉对话框</button>
</view>

<button bindtap="submit">点我弹窗</button>

index.js

Page({
  /**
   * 页面的初始数据
   */
  data: {
    showmodal: false
  },
  submit() {
    this.setData({
      showmodal: true
    })
  },
  go(){
    this.setData({
      showmodal: false
    })
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {

  },
})

index.wxss

.mask{
  width: 100%;
  height: 100%;
  position: fixed;
  top: 0;
  left: 0;
  background: #000;
  z-index: 9000;
  opacity: 0.7;
}
 
.modaldlg{
  width: 580rpx;
  height: 620rpx;
  position: fixed;
  top: 50%;
  left: 0;
  z-index: 9999;
  margin: -370rpx 85rpx;
  background-color: #fff;
  border-radius: 36rpx;
  display: flex;
  flex-direction: column;
  align-items: center;
}

9、转换日期,比较日期是否相等

var dateee = new Date(值为标准国际化时间).toJSON(); //国际化时间为2022-12-12T12:12:12
var time1 = new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')
// time1 样式为 2022-12-12 12:12:12
var date2 = /\d{4}-\d{1,2}-\d{1,2}/g.exec(time1) //去除时分秒 变成2022-12-12

比较日期是否相等
第一种:
if(date1.getTime()date2.getTime()){ … }
第二种:
if(date1-date2
0){ … }
1.为什么”“判断返回false?
日期对象是引用类型,而非值类型。
引用类型与值类型的区别在于:
值类型的变量:值就保存在栈内存中,访问变量时操作的就是实际的数据值。
引用类型的变量:变量只是保存了一个引用或者说是指针,这个引用或指针指向一个堆内存中的位置,这个位置才是保存了真正的数据值。访问引用性变量时,先从栈中取得这个内存位置,然后找到数据值。
所以用“
”比较today和valentine时,比较的不是两个数据值,而是两个不同的引用,这两个引用分别指向两个不同位置的对象,所以返回false。
2.getTime()用法
表示时间距1970年1月1日午夜之间的毫秒数,返回一个整数值,所以可直接比较。
3.date1-date2
返回两个日期相差的毫秒数。

10、js数组添加对象

最常见的方法:push(尾部添加)

arr =[{'num':1},{'num':2},{'num':3}];
 
newArr = arr.push({'num':4})
 
console.log(arr)

unshift(头部添加)

arr =[{'num':3},{'num':4},{'num':5}];
 
newArr = arr.unshift({'num':2})
 
console.log(arr)

使用splice方法插入,比如在索引为1的地方插入对象

arr =[{'num':1},{'num':3},{'num':4}];
 
arr.splice(1, 0, {'id': 2})
 
console.log(arr)

微信小程序之删除数组中的某一个数据
方法一:

const index=accounts.collectId.findIndex(res=>res==carInfo.id)
    if (index!=-1) {
        accounts.collectId.splice(index,1)
    }

代码说明:先用findIndex()找到要删除的数据的下标index,当index!=-1的时候说明数组中存在这个数据,再用splice()来删除数据,splice(index,1)中的1是说只删除该下标对应的数据,如果省略1则会默认删除从index开始往后的所有数据
方法二:
1.如果你的数组是像这样的a:[‘1’,‘2’],那就可以考虑直接用lodash的_.pull(array, [values])
参数

  1. array (Array): 要修改的数组。
  2. [values] (…*): 要删除的值。

例子:

var array = [1, 2, 3, 1, 2, 3];
 
_.pull(array, 2, 3);
console.log(array);
// => [1, 1]

2.如果你的数组是像这样的a:[{x:1},{x:2}],可以用lodash的_.pullAllBy(array, values, [iteratee=_.identity])
参数

  1. array (Array): 要修改的数组。
  2. values (Array): 要移除值的数组。
  3. [iteratee=_.identity] (Array|Function|Object|string): iteratee(迭代器)调用每个元素。

例子:

var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
 
_.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
console.log(array);
// => [{ 'x': 2 }]

11、微信小程序实现同时单击、双击、长按

首先,需要在js中定义几个变量

  // 触摸开始时间
  touchStartTime: 0,
  // 触摸结束时间
  touchEndTime: 0,  
  // 最后一次单击事件点击发生时间
  lastTapTime: 0, 
  // 单击事件点击后要触发的函数
  lastTapTimeoutFunc: null, 

然后定义两个记录触摸事件的函数

  /// 按钮触摸开始触发的事件
  touchStart: function(e) {
    this.touchStartTime = e.timeStamp
  },

  /// 按钮触摸结束触发的事件
  touchEnd: function(e) {
    this.touchEndTime = e.timeStamp
  },

在界面中需要绑定点击事件的地方,需要加入bindtouchstart 和bindtouchend,以便记录下按钮开始触摸和结束触摸的时间。其他的分别绑定好单击、双击、长按事件就好了。

<!--index.wxml-->
<view class="container">


  <view class = "split"></view>
  <view class = "btn" bindtap="tap" bindtouchstart="touchStart" bindtouchend="touchEnd">
    单击
  </view>


  <view class = "split"></view>
  <view class = "btn" bindtap="doubleTap" bindtouchstart="touchStart" bindtouchend="touchEnd">
    双击
  </view>


  <view class = "split"></view>
  <view class = "btn" bindlongtap="longTap" bindtouchstart="touchStart" bindtouchend="touchEnd">
    长按
  </view>


  <view class = "split"></view>
  <view class = "btn" bindtap="multipleTap" bindlongtap="longTap" bindtouchstart="touchStart" bindtouchend="touchEnd">
    单击/双击/长按
  </view>

</view>

仅有单击不用做特殊的处理:

  /// 单击
  tap: function(e) {
    var that = this
    wx.showModal({
      title: '提示',
      content: '单击事件被触发',
      showCancel: false
    })
  },

双击和单击并存时的实现,这里实现双击和单击是参考了手机点击网页的300ms延时的方式,原来在iPhone4出来的时候,手机网页比较小,所以iPhone浏览器上加入了双击放大网页的操作,导致网页的点击需要延时300ms才会触发,即300ms内点击两次算双击事件。这里实现是在单击时,将单击事件延迟300ms执行,如果300ms内又有一次点击,则把单击事件取消,然后触发单击事件。

 /// 双击
  doubleTap: function(e) {
    var that = this
    // 控制点击事件在350ms内触发,加这层判断是为了防止长按时会触发点击事件
    if (that.touchEndTime - that.touchStartTime < 350) {
      // 当前点击的时间
      var currentTime = e.timeStamp
      var lastTapTime = that.lastTapTime
      // 更新最后一次点击时间
      that.lastTapTime = currentTime

      // 如果两次点击时间在300毫秒内,则认为是双击事件
      if (currentTime - lastTapTime < 300) {
        console.log("double tap")
        // 成功触发双击事件时,取消单击事件的执行
        clearTimeout(that.lastTapTimeoutFunc);
        wx.showModal({
          title: '提示',
          content: '双击事件被触发',
          showCancel: false
        })
      }
    }
  },

单击、双击和长按同时存在的实现:


  /// 长按
  longTap: function(e) {
    console.log("long tap")
    wx.showModal({
      title: '提示',
      content: '长按事件被触发',
      showCancel: false
    })
  },

  /// 单击、双击
  multipleTap: function(e) {
    var that = this
    // 控制点击事件在350ms内触发,加这层判断是为了防止长按时会触发点击事件
    if (that.touchEndTime - that.touchStartTime < 350) {
      // 当前点击的时间
      var currentTime = e.timeStamp
      var lastTapTime = that.lastTapTime
      // 更新最后一次点击时间
      that.lastTapTime = currentTime
      
      // 如果两次点击时间在300毫秒内,则认为是双击事件
      if (currentTime - lastTapTime < 300) {
        console.log("double tap")
        // 成功触发双击事件时,取消单击事件的执行
        clearTimeout(that.lastTapTimeoutFunc);
        wx.showModal({
          title: '提示',
          content: '双击事件被触发',
          showCancel: false
        })
      } else {
        // 单击事件延时300毫秒执行,这和最初的浏览器的点击300ms延时有点像。
        that.lastTapTimeoutFunc = setTimeout(function () {
          console.log("tap")
          wx.showModal({
            title: '提示',
            content: '单击事件被触发',
            showCancel: false
          })
        }, 300);
      }
    }
  },

持续更新
在这里插入图片描述

各位看官》创作不易,点个赞!!!
诸君共勉:万事开头难,只愿肯放弃。

免责声明:本文章仅用于学习参考

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

git status查看本地库状态、git add添加暂存区

假设目前我处于我的项目之下。 查看状态命令 git status 可以看到如下的状态 现在我新建一个文件hello.txt 在里面写了16行的内容。&#xff08;这个vim之前也没有使用过&#xff0c;在最后记录一下。&#xff09; 再看一下状态 那我们现在就add一下&#xff0c;使用命令&…

新冠确诊阳性的第六篇博客,Linux防火墙管理

Linux防火墙管理1.防火墙的下载2.演示&#xff1a;关闭防火墙3.防火墙端口管理4.防火墙的其他命令1.防火墙的下载 Centos7下默认的防火墙是 Firewall 如果提示&#xff1a;Unit firewalld.service could not be found. 说明防火墙没有安装&#xff0c;需要安装 sudo yum ins…

redux及react-redux

redux 这篇文章谈一谈仓库redux。 首先&#xff0c;学习任何东西都离不开官网。在此附上官网网址 Redux - A predictable state container for JavaScript apps. | Redux 1.什么是redux&#xff1f; 从如下几个方面&#xff1a; redux在一个项目中可集中管理状态(数据)和逻…

【Pandas入门教程】如何操作文本数据

如何操作文本数据 来源&#xff1a;Pandas官网&#xff1a;https://pandas.pydata.org/docs/getting_started/intro_tutorials/index.html 笔记托管&#xff1a;https://gitee.com/DingJiaxiong/machine-learning-study 文章目录如何操作文本数据导包数据准备【小结】导包 imp…

怎么录屏?5 款免费无水印的录屏神器

无论您是想记录游戏中令人难忘的时刻、与他人分享视频教程&#xff0c;还是做更多类似的事情&#xff0c;都必须使用屏幕录像机。从 Internet 上很容易获得屏幕录像机&#xff1b;然而&#xff0c;找到一个“好”的并不是那么简单。当我们试用一些免费的屏幕录像机来捕捉电脑屏…

springboot整合之版本号统一管理

特别说明&#xff1a;本次项目整合基于idea进行的&#xff0c;如果使用Eclipse可能操作会略有不同&#xff0c;不过总的来说不影响。 springboot整合之如何选择版本及项目搭建 springboot整合之版本号统一管理 springboot整合mybatis-plusdurid数据库连接池 springboot整合…

华舞依旧,未来不远:智能光伏十大趋势告诉我们什么?

在“碳中和”时代&#xff0c;光伏正在日渐成为能源舞台的主角。我们知道&#xff0c;想要实现“碳中和”目标就需要降低能源带来的碳排放。而在能够实现这个目标的能源体系中&#xff0c;水电、风电受到环境限制较强&#xff0c;而氢能、核聚变为代表的下一代能源体系还不够成…

D59|单调栈进阶版

503.下一个更大元素II 1.题目 给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这意味…

node.js+uni计算机毕设项目“宠到家”宠物领养小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

“千万别奶睡,以后很难戒”,宝宝为啥喜欢奶睡,真有这么可怕?

我还记得懒妈妈哺乳的时候&#xff0c;身边有一个“过来人”提醒&#xff1a;不要奶睡&#xff0c;否则以后就戒不掉了&#xff0c;宝宝会一直吃着睡觉。事实上&#xff0c;当时懒惰的母亲更抗拒这种说法&#xff0c;主要原因是哄睡更困难&#xff0c;每天花更多的时间哄睡觉&a…

《C++程序设计原理与实践》笔记 第8章 函数相关的技术细节

在本章和下一章中&#xff0c;我们将注意力从程序设计转移到主要的编程工具——C语言上。我们会介绍一些语言的技术细节&#xff0c;来给出一个C的基本功能的稍宽的视角&#xff0c;并从更系统化的角度讨论这些功能。 8.1 技术细节 程序设计(programming)&#xff08;即如何用…

Podman QuickStart

Install Install Link brew install podman podman machine init podman machine startpodman machine init --cpus4 --disk-size64 --memory6144 podman machine start podman-machine-default开启和关闭root 权限 Tips: 切换root 模式前后&#xff0c;相互看不到对方模式下…

vue学习笔记(七)-vue3新特性

概念 vue3简介 2020年9月18日&#xff0c;Vue.js发布3.0版本&#xff0c;代号&#xff1a;One Piece&#xff08;海贼王&#xff09;耗时2年多、2600次提交、30个RFC、600次PR、99位贡献者github上的tags地址&#xff1a;https://github.com/vuejs/vue-next/releases/tag/v3.0…

C#实现QQ窗体功能

C#实现QQ窗体功能案例简述预备知识导图功能结构知识点分析C#基础知识Windows系统知识控件和组件案例简述 通过C#使用类似QQ窗体的功能&#xff0c;当窗体放置到屏幕的边缘&#xff0c;可以将窗体隐藏&#xff0c;当鼠标再次放置到屏幕边缘时&#xff0c;窗体可再次显示。 预备…

我的MEM管理类研究生,在路上

——生死看淡&#xff0c;不服就干。 一直怀揣着研究生梦的我&#xff0c;当年没能保研&#xff0c;也没能认真考研&#xff0c;在考取国家中级软件师证书后&#xff0c;意外发现了MEM&#xff08;Master of Engineering Management &#xff09;——工程管理硕士。 2021-11-…

Git - windows下操作 SSH Key

Git - windows下操作 SSH Key 流程 SSH密钥介绍 简单说&#xff0c;SSH是一种网络协议&#xff0c;用于计算机之间的加密登录。如果一个用户从本地计算机&#xff0c;使用SSH协议登录另一台远程计算机&#xff0c;我们就可以认为&#xff0c;这种登录是安全的&#xff0c;即使…

Nature:剑桥大学的研究人员找到了终结新冠的新药了吗?

本月初&#xff08;即2022年12月5日&#xff09;&#xff0c;《Nature》杂志发布了剑桥大学Teresa Brevini等人的一篇关于新冠研究的论文。在该论文中&#xff0c;作者首先发现法尼酯 X 受体&#xff08;FXR&#xff09;能够直接调节人体的ACE2的表达。过去的研究已经表明&…

手把手教你搭建Hexo博客

导读&#xff5c;很多开发者搭建自己的博客&#xff0c;会选择现有的博客系统方案&#xff0c;比如&#xff1a;Wordpress、Hexo和Halo等。其中Hexo博客作为全静态博客&#xff0c;没有数据库、对服务器资源消耗也极低&#xff0c;而且可定制化程度极高。本文将带领各位开发者基…

【Linux】编译的四个步骤

目录 平常的使用&#xff1a; 安装软件 编写&#xff1a;vi/vim vscode 编译 执行 路径/文件名 计算机五大部件 编译四步 1.预编译&#xff08;处理#&#xff09; 2.编译&#xff08;查错&#xff0c;代码到汇编&#xff09; 3.汇编(汇编到二进制指令) 4.链接 平常的…

157. 答读者疑问:为什么我的 manifest.json 文件无法正确被加载?

有教程的读者向我提问:已经完成了下列两个步骤的学习: SAP UI5 应用开发教程之十 - 什么是 SAP UI5 应用的描述符 DescriptorSAP UI5 应用开发教程之一百三十三 - SAP UI5 应用元数据文件 manifest.json 的加载和解析原理讲解自己本地 Visual Studio Code 开发了一个 SAP UI5…