2017-12-28 数据重复插入问题、Vue.js 事件处理
第一组:姚成栋 数据重复插入问题
在跑定时任务进行多条数据同时插入时,会遇到数据被重复插入的问题。要解决只需要用一个标志来做判断即可。
例如,我在写一个离职人员的定时任务时,需要从另一个表中查询出人员的工作情况,如果状态为QuitJob,则这个人已经离职。但是写完程序,发现每次运行都会将之前已经插入离职人员表中的人重复插一遍,很明显这是错误的。所以,在进行多条数据同时插入这个事务之前,做一个判断,如果表中已经有了数据则不执行该sql语句。具体代码如下:
foreach(var secondItem in bds) {
if (secondItem.LO_UserName == result[0].UI_UserName && secondItem.LO_UserTid == result[0].UI_UserTid) {
RepeatedFlag = 1; //一旦重复无需继续查询,直接跳出循环
break;
} else {
RepeatedFlag = 0;
}
}
//未重复则插入
if (RepeatedFlag == 0) {
sql.Add(db.GetInsertSql(loginUser));
}
第二组:暂更
第三组:黄华英 Vue.js 事件处理
方法处理器
可以用 v-on 指令监听 DOM 事件:
//绑定单击事件处理器到方法greet
<div id="example">
<button v-on:click="greet">Greet</button></div>
在vue实例中定义这个方法
var vm = new Vue({
el: '#example',
data: {
name: 'Vue.js'
},
methods: { // 在 `methods` 对象中定义方法
greet: function(event) { // 方法内 `this` 指向 vm
alert('Hello ' + this.name + '!')
}
}
})
//greet方法在单击button时被调用, 也可以在 JavaScript 代码中调用
vm.greet() // -> 'Hello Vue.js!'
内联语句处理器
除了直接绑定到一个方法,也可以在内联 JavaScript 语句中调用方法
<div id="app">
<button v-on:click="say('hi')">
Say hi
</button>
//调用say方法
<button v-on:click="say('what')">
Say what
</button>
//调用say方法
<button v-on:click="warn('Form cannot be submitted yet.', $event)">
Submit //有时也需要在内联语句处理器中访问原始的DOM事件,可以用特殊变量$event把它传入方法
</div>
<script>
new Vue({
el: '#app',
methods: {
say: function(message) {
alert(message)
}
},
Warn: function(message, event) { //访问原生事件对象
if (event) event.preventDefault() alert(message)
}
})
</script>
事件修饰符
v-on事件修饰符是由点开头的指令后缀来表示的
<!-- 阻止单击事件继续传播 -->
<a v-on:click.stop="doThis"></a>
<!-- 只有修饰符 -->
<form v-on:submit.prevent></form>
<!-- 提交事件不再重载页面 -->
<form v-on:submit.prevent="onSubmit"></form>
<!-- 修饰符可以串联 -->
<a v-on:click.stop.prevent="doThat"></a>
<!-- 添加事件监听器时使用事件捕获模式 -->
<!-- 即元素自身触发的事件先在此处处理,然后才交由内部元素进行处理 -->
<div v-on:click.capture="doThis">...</div>
<!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
<!-- 即事件不是从内部元素触发的 -->
<div v-on:click.self="doThat">...</div>
<!-- 点击事件将只会触发一次 -->
<a v-on:click.once="doThis"></a>
注意: 使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用@click.prevent.self会阻止所有的点击,而@click.self.prevent只会阻止对元素自身的点击。
按键修饰符
Vue 允许为v-on在监听键盘事件时添加按键修饰符:
<!-- 只有在 keyCode 是 13 (enter)时调用 vm.submit() -->
<input v-on:keyup.13="submit">
<input v-on:keyup.enter="submit">
<input @keyup.enter="submit">
第四组:王芳 《万历十五年》
《万历十五年》-
当时打动我的是这个开篇语:
公元1587年,在中国为明万历十五年,论干支则为丁亥,属猪,当日四海升平,全年并无大事可叙,纵是气候有点反常,夏季北京缺雨,五六月间时疫流行,旱情延及山东,南直隶却又因降雨过多而患水,入秋之后山西又有地震,但这种小灾小患,以我国幅员之大,似乎年年在所不免,只要小事未曾酿成大灾,也就无关宏旨,总之,在历史上,万历十五年实为平平淡淡的一年。 -
这是一本历史书籍,讲的是明朝万历十五年前后发生的几件事情,作者语气平淡,叙事波澜不惊、不偏不倚,很少带有个人情感,其实有时候还挺喜欢这种文风的,会觉得这种作者比较慈悲,因为书里的每个人都不是脸谱化的,没有好坏之分,一切矛盾都是一点点积累起来的,看完之后只会觉得这些事情都是历史发展的必然结果,可能这样才比较公正吧。。
编者注:所有文字都是主观的
第五组:姜葳 C#语法糖($)(?.)(??)
1. 内插字符串($)
实际上是C# 6.0对string.Format的改进,将字符串文本标识为内插字符串($)
根据微软的例子来看:
using System;
public class Example {
public static void Main() {
string name = "John";
string greeting = $ "Hello, {name}!";
Console.WriteLine(greeting);
}
}
相当于原先的string.Format这种必须使用占位符,极容易出错:
string name = "John";
string str = string.Fromat("Hello,{0}!",name);
而使用$则不容易出现错误,可以这样写:
string name = "John";2 string str = $"Hello,{name}!";
2. null条件运算符(?.)
这也是C#6.0的语法,这叫Null-Conditional Operator(null条件运算符)
我们经常需要判断对象是否为null(不判断呢就会报异常System.NullReferenceException之类的),我们一般像这样:
List<string> list = null;
if (list != null)
{
string[] strArr = list.ToArray();
}
或者这样:
List<string> list = null;
string[] strArr = (list != null ? list.ToArray() : null);
使用这个null条件运算符就可以这样简单的完成这件事了
List<string> list = null;2 string[] strArr = list?.ToArray();
解释一下,当 list 为 null 时就不进行后面的ToArray(),返回null,当 list 不为 null 就ToArray();
这里要注意一下,前面strArr这个得是个可null的值
3. null合并运算符(??)
?? 运算符称作 null 合并运算符。 如果此运算符的左操作数不为 null,则此运算符将返回左操作数;否则返回右操作数。
演示一下:
int? num = null;//前面设定了个可空的int,后面想null时变为0就好
int num1 = num ?? 0;