文章列表 - 第13页
所有文章的完整列表,按时间倒序排列 - 第13页
v-model 介绍
首先明确一点,v-model仅仅是语法糖。
<input type="text" v-model="something">
等价于
<input
type="text"
v-bind:value="something"
v-on:input="something = $event.target.value">
它将一个较复杂的input双向数据绑定简化了他的书写方式。
微信小程序绑定input
最开始我是使用微信推荐的写法
<input bindtap="input" />
然后在js里面解析event,然后再setData
uni-app下v-model的写法
本文采用
uni-app自定义组件模式
wxml
...
<form @submit="formSubmit" @reset="formReset" :model="formItem" class="tm-every-center padding bg-white">
<view class="section flex align-center">
<view class="section__title">姓名:</view>
<input name="name" placeholder="请填写您的姓名" class="bg-gray" v-model="formItem.name" />
</view>
<view class="section flex align-center">
<view class="section__title">手机:</view>
<input name="name" placeholder="请填写您的姓名" class="bg-gray" v-model="formItem.phone" />
</view>
<view class="section flex align-center">
<view class="section__title">赛点:</view>
<input name="name" placeholder="请填写您的姓名" class="bg-gray" v-model="formItem.competition" />
</view>
<view class="btn-area margin-top"><button formType="submit" class="cu-btn">提交</button></view>
</form>
...
然后在data里面设置
正则删除关键字所在行
查找:
^.*大师兄.*$
替换为:(空)
如果不留空行:
查找:
^.*大师兄.*\r?\n
替换为:(空)
正则删除HTML标签
Ctrl + H 正则匹配 <[^>]+> 替换为空
正则替换换行
Ctrl + H 正则匹配 \n 替换为你想要的
最终效果如下


代码如下
const baseURL = 'http://wxlc.wezoz.com/' // your base url
async function request(api, method, header, params) {
console.group(api)
console.log('%c' + method + ' REQUEST:', "color:green")
console.log({
'api': api,
'header': header,
'params': params
})
return await new Promise((resolve, reject) => {
uni.request({
url: baseURL + api,
method: method,
header: header,
data: params,
success: (result) => {
console.log('%c' + method + ' SUCCESS RETURN DATA:', "color:green")
console.log(result)
console.groupEnd(api)
resolve(result.data);
},
fail: (e) => {
reject(e);
}
})
})
}
async function post(api, params, success) {
const POST_METHOD = 'POST'
const POST_HEADER = {
'content-type': 'application/x-www-form-urlencoded',
'token': wx.getStorageSync('token')
}
return await request(api, POST_METHOD, POST_HEADER, params)
}
async function get(api, params, success) {
const GET_METHOD = 'GET'
const GET_HEADER = {
'content-type': 'application/x-www-form-urlencoded',
'token': wx.getStorageSync('token')
}
return await request(api, GET_METHOD, GET_HEADER, params)
}
module.exports = {
POST: post,
GET: get
}
所用到的一些consloe骚操作
console内使用CSS样式
consloe里面使用%c进行css样式格式化输出实例
大致思路
注册表新建目录右键项
填写WSL命令行
如果你觉得添加起来过于麻烦,你可以双击执行下列注册表文件
一些简介
注册表百科
注册表(Registry,繁体中文版Windows操作系统称之为登录档)是Microsoft Windows中的一个重要的数据库,用于存储系统和应用程序的设置信息。早在Windows 3.0推出OLE技术的时候,注册表就已经出现。随后推出的Windows NT是第一个从系统级别广泛使用注册表的操作系统。但是,从Microsoft Windows 95操作系统开始,注册表才真正成为Windows用户经常接触的内容,并在其后的操作系统中继续沿用至今。
打开方式
Win + R键入regedit
操作流程
目录导航输入
HKEY_CLASSES_ROOT\Directory\shell新建项
ubuntu选择ubuntu项,新建字符串值:名称为默认,值为WSL
如图:
在ubuntu项内添加command项
字符串名称为默认,值为
wsl.exe --cd "%V"
如图:
截至目前,存在的问题
就是只有在选择一个目录时才会出现这个东西,右键空白处啥都不会发生
解决方法
在HKEY_CLASSES_ROOT\Directory\Background\shell也同样操作一波
效果预览
我去,我不知道怎么截右键这个状态。
前言
为什么要使用wsl来配置呢?因为我个人感觉这个比较方便,不用安装一堆包。直接敲命令就好。
准备工作
安装好Clion后,打开toolchain是这样的。

前提是先装好wsl
选择wsl toolchain
会出现下面这个情况

这是因为wsl没有配置ssh服务
配置wsl的ssh
sudo vi /etc/ssh/sshd_config
把密码认证的no改为yes
PasswordAuthentication yes
restart ssh
sudo service ssh restart
如果出现以下提示

则需要生成key
sudo dpkg-reconfigure openssh-server
查看ssh运行状态
service ssh status
configure remote credentials


配置编译环境
在wsl里面执行
sudo apt-get install build-essential gcc g++ cmake gdb

所有的路口标号用int road[8]表示,
用bool status[8][8]表示道路可否通行。
T字路口

对于T字路口,将道路分为(左,右,下)三个流量出入口,存在的状态有:
0. 全红(特殊状态应对突发事故)
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
status[i][j] = false;
}
}
×|0|1|2|3|4|5
:–: | :–: | :–: | :–: | :–: | :–: |
0|×|×|×|×|×|×
1|×|×|×|×|×|×
2|×|×|×|×|×|×
3|×|×|×|×|×|×
4|×|×|×|×|×|×
5|×|×|×|×|×|×
正常状态下考虑红灯可右转,同向变道不受交通灯控制,即永远可通行
status[2][1] = status[4][3] = true;
status[0][1] = status[2][3] = status[4][5] = true;
×|0|1|2|3|4|5
:–: | :–: | :–: | :–: | :–: | :–: |
0||@||||
1||||||
2||@||@||
3||||||
4||||@||@
5||||||
同时需要限制逆行,即永远不可通行
// 出口不能自转和变道
status[0][0] = status[0][2] = status[0][4] = false;
status[4][4] = status[4][0] = status[4][2] = false;
status[2][2] = status[2][0] = status[2][4] = false;
// 出口不能进去
status[1][0] =status[1][4] = status[1][2] = status[1][3] = status[1][4] = status[1][5] = false;
status[3][0] =status[3][5] = status[3][2] = status[3][3] = status[3][4] = status[3][5] = false;
status[5][0] =status[5][6] = status[5][2] = status[5][3] = status[5][4] = status[5][5] = false;
×|0|1|2|3|4|5
目前,我采用的是迪杰斯特拉算法计算所有点的最短路径(感觉弗洛伊德算法会更好些?)。迪杰斯特拉算法算的是单源(V_begin)到所有点的最短距离,也就是说需要遍历一次所有的点。
遍历V_begin
for (int V_begin = 0; V_begin < G->m_CrossRoad_v.size(); V_begin++) {
}
下面是迪杰斯特拉算法的流程
1. 声明dist数组
vector<double> Determined_dist(G->m_CrossRoad_v.size(), 0.0);
2. 初始化顶点集
void calcShortestPath(Graph *G) {
int currentPointSite,nextPointSite;
ofstream PointPathFile(DIR_RES"PointPath.txt"),RoadPathFile(DIR_RES"RoadPath.txt");
//对点进行的一级遍历
for (int V_begin = 0; V_begin < G->m_CrossRoad_v.size(); V_begin++) {
// =================== 迪杰斯特拉算法开始 ===============================
vector<bool> S(G->m_CrossRoad_v.size(), false); //判断是否选中
vector<double> dist(G->m_CrossRoad_v.size(), DBL_MAX/2);// dist
vector<double> compare_dist(G->m_CrossRoad_v.size(), DBL_MAX/2);// 辅助dist用来取最短距离点
vector<int> path(G->m_CrossRoad_v.size(),-2); // path
S[V_begin] = true;
path[V_begin] = -1;
for(auto crossroad : G->m_CrossRoad_v[V_begin].JunctionRoad){
nextPointSite = G->m_Road_v[crossroad.outRoadID].m_CrossRoadToSite;
dist[nextPointSite] = G->m_Road_v[crossroad.outRoadID].m_dLength;
compare_dist[nextPointSite] = dist[nextPointSite];
}
auto min = min_element(compare_dist.begin(), compare_dist.end());
int min_element_index = distance(compare_dist.begin(), min);
compare_dist[min_element_index] = DBL_MAX/2;
// 循环size-1次
for(int i = 0; i < G->m_CrossRoad_v.size()-1; i++){
for(auto crossroad : G->m_CrossRoad_v[min_element_index].JunctionRoad){
currentPointSite = min_element_index;
nextPointSite = G->m_Road_v[crossroad.outRoadID].m_CrossRoadToSite;
if(S[nextPointSite]){
continue;
}
if(dist[nextPointSite] > dist[currentPointSite] + G->m_Road_v[crossroad.outRoadID].m_dLength) {
dist[nextPointSite] = dist[currentPointSite] + G->m_Road_v[crossroad.outRoadID].m_dLength;
compare_dist[nextPointSite] = dist[nextPointSite];
path[nextPointSite] = currentPointSite;
}
}
min = min_element(compare_dist.begin(), compare_dist.end());
min_element_index = distance(compare_dist.begin(), min);
S[min_element_index] = true;
compare_dist[min_element_index] = DBL_MAX/2;
}
for(int i = 0;i<path.size();i++){
int j = i;
bool flag = false;
while( path[j] >= 0) {
flag = true;
PointPathFile << path[j] << " ";
for(auto node:G->m_CrossRoad_v[j].JunctionRoad){
if(G->m_Road_v[node.outRoadID].m_CrossRoadToSite == path[j]){
RoadPathFile << node.outRoadID << " ";
}
}
j = path[j];
}
if(flag){RoadPathFile << endl;PointPathFile << endl ;}
}
}
}
引言
我在很久之前就想研究这个项目,然后再进行些自定义的修改了。就以本文作为笔记开始吧。
项目目录树
.
├── Action.php
├── Plugin.php
├── Users.php
├── res //一些图片资源
│ ├── cvbg.jpeg
│ ├── cvborder.jpeg
│ ├── resend.png
│ └── test.bin
├── sql // 创建了两个数据库
│ ├── wetypecho.sql
│ └── wetypecholike.sql
└── tree.txt
查看数据库结构
wetypecho.sql
CREATE TABLE `typecho_wetypecho` (
`id` int(10) unsigned NOT NULL auto_increment,
`openid` varchar(255) default '' ,
`createtime` int(10) default 0 ,
`lastlogin` int(10) default 0 ,
`nickname` varchar(255) default '' ,
`avatarUrl` varchar(255) default '' ,
`city` varchar(255) default '' ,
`country` varchar(255) default '' ,
`gender` varchar(255) default '' ,
`province` varchar(255) default '' ,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
看内容可以推测,这是微信用户数据表。
js类似于printf那样的格式化字符串
安装包
npm install sprintf-js
调用包
var sprintf = require('sprintf-js').sprintf,
操作实例:时间前补零操作
for (let i = 46; i >= 0; i--) {
console.log(sprintf('%2d:%02d', i / 2, (i % 2 ? 0 : 30)))
}
