AngularJS 给 directive scope 绑定的 function 传参

如果我们想要给directive的scope中绑定的方法传递参数,需要传递对象,而不是直接传值。

举个栗子,这里的clickOutside是从用的地方传入的一个方法,debug时我们会发现绑进来的clickOutside并不是我们传的clickOutSideAction

1
2
3
4
5
6
7
8
9
10
11
12
13
app.directive('clickOutSide', ['$document', function($document) {
return {
restrict: 'A',
scope: {
clickOutside: '&'
},
link: function (scope, el) {
$document.on('click', function (e) {
scope.clickOutside();
});
}
}
}]);
1
<div data-click-out-side click-Outside="$ctrl.clickOutSideAction()"></div>

如果需要在这里给clickOutSideAction传参数,应该这样改:

1
2
3
4
5
6
7
8
9
10
app.directive('clickOutSide', ['$document', function($document) {
return {
...
link: function (scope, el) {
...
scope.clickOutside({event: e});
...
}
}
}]);
1
<div data-click-out-side click-Outside="$ctrl.clickOutSideAction(event)"></div>

好处是在实际使用directive的地方,不需要考虑参数列表顺序,只需要保证参数名称正确。

Hamcrest 学习笔记
给Hexo博客配置Azure CI持续集成实现自动部署

给Hexo博客配置Azure CI持续集成实现自动部署

封面来源: 10th Magnitude

这是篇瞎球折腾笔记。
CI是个好东西,前段时间看了一本关于DevOps的书,对持续集成有了一定了解。
Hexo博客本身拥有很简洁的编译、部署过程:

1
2
hexo g
hexo d

但是简单的基础是前戏太多:
配置SSH,拉项目,拉子模块,安装NodeJS,安装脚手架,安装依赖……
虽然命令多,但是比较单一,便首先想到了给Hexo写CI脚本。

使用的第一个平台是腾讯云开发者平台(dev.tencent.com),它提供基于Jenkinsfile的持续集成beta版本
优点:免费,全中文界面,配置简单易于上手,支持Jenkins,国内服务速度快
缺点:目前功能较少,不支持上传secret files,无法配置SSH,npm依赖下载缓慢

hexo d命令是需要调用git push的,不支持SSH就凉了,过程就不讲了,在经过一番折腾后,我选择放弃了这个平台。

第二选择是自己搭建Jenkins,一番折腾后,发现自己的VPS性能太差,而且Windows版一些配置难以用配置文件完成,要手动配置,考虑到未来迁移起来会困难,逐放弃……

优点:完全免费,网上资料丰富
缺点:配置复杂,需要自行搭建,性能依赖于VPS性能

最后成功地在巨硬(Microsoft)Azure DevOps上配置好了,跟大家分享步骤!

优点:免费(一个月1800分钟、1个并行job),runner质量高,配置方便
缺点:Web hook不稳定,2次遇到GitHub调不通而没有自动触发Trigger的情况,与其他CI配置不兼容,参考资料较少

阅读更多

AngularJS <input> 输入框自适应内容宽度

在Gist上找到的一个directive,用来让input输入框的宽度自适应内容宽度。
https://gist.github.com/mbenford/8016984

原理是生成一个相同样式的,隐藏的span,通过span的宽度动态改变input的宽度。
同时兼顾了input有placeholder的情况。

如果是在比较大的系统中,可以用throttle节流阀包装一下resize方法,避免性能问题。

如果是textarea,对应的directive在这里:
https://github.com/monospaced/angular-elastic

阅读更多

MySQL JDBC 在查询中调用 REPLACE(UUID(),'-','') 查出重复的 UUID

MySQL版本是5.7.25,最近升级了JDBC驱动,5.1.45 -> 8.0.13,导致一个SQL报异常,SQL是用一个子查询,拿到数据后插入到另一张表用的。

1
2
3
INSERT INTO table_2 (id, title, modified_date)
(SELECT REPLACE(UUID(),'-','') AS id, table_1.title AS title, NOW() AS modified_date
FROM table_1)

可见table_2的id是在子查询中,用REPLACE(UUID(),'-','')生成的。

这样的语句在MySQL 5.7.25命令行模式下,Workbench下,JDBC 5.1.45下都没有问题,但是JDBC升级到8.0.13后,却报了主键重复的异常。

ERROR SqlExceptionHelper - Duplicate entry 'ae3867585cc611e986e30e045157562c' for key 'PRIMARY'

阅读更多
使用Termux在Android手机上搭建、编辑Hexo博客

使用Termux在Android手机上搭建、编辑Hexo博客

高级终端Termux是个强大的终端模拟器,这样的应用应该特别适合不喜欢图形界面的命令行爱好者,组合了强大的终端模拟和拓展Linux包收集支持。

  • 享受bash和zsh。
  • 使用nano和vim编辑文件。
  • 通过ssh访问服务器。
  • 使用gcc和clang编译代码。
  • 使用python控制台来作为口袋计算器。
  • 使用git和subversion检查项目。
  • 使用frotz运行基于文本的游戏。

Step:

  1. 在Google Play或酷安搜索Termux安装,link:
    https://play.google.com/store/apps/details?id=com.termux
    https://www.coolapk.com/apk/com.termux

  2. 打开Termux,更新软件源

    1
    2
    apt update
    apt upgrade -y
阅读更多