angular.jsのdirectiveでlistにactiveをつける

bootstrapでよくある縦並びのメニューでactiveクラスをつけるdirectiveをつくってみる

directiveの指定種別

directiveはattribute、element、classの3つで指定できる。デフォルトはattributeなのでclassに変更する必要がある

restrict: 'A' // Attribute <div ng-custom></div>
restrict: 'E' // Element <ng-custom></ng-custom>
restrict: 'C' // Class <div class="ng-custom"></div>

directive名について

directive名はlowercaseで指定してcamelcaseで指定する

directive('ngCustom', function() {
    // これはng-customのdirectiveになる
});

link/compile

詳細な動作はlink/compileで記載。今回はactiveを付けたいのでlink内で判定を記載する

pushstate時のhandling

link/compileで記載するとリロード時には動作するが、pushstateだと動かない。イベントをScopeでWatchする必要がある

できあがり

以上を加味して記載するとこんな感じになるはず。list-group-itemのhrefを引っ張ってきて、それを現在のlocation.hrefと比較してactiveクラスをつけたり消したりしている。

	angular.module('myApp').directive('listGroupItem', function() {
			return {
				restrict:'C',
				link: function($scope, element, attrs) {
					$scope.$on('$routeChangeStart', function() {
						if(attrs.href == location.href) {
							element.addClass('active');
						} else {
							element.removeClass('active');
						}
					});
				}
			};
		}
	);

まとめ

$routeChangeStartのイベントをwatchするということがわかるまで時間がかかったけど、directiveを使って色々できそう。でもこれってカスタマイズし過ぎたら可読性が落ちる諸刃の剣だと思う。決まったところに決まったものを出すだけであれば使えばいいんじゃないかな。

nodeで「Cannot read property ‘secure’ of undefined」が出力される

node.jsで以下のエラーメッセージが出た

Cannot read property ‘secure’ of undefined

理由をググっていたらsessionに直接値を入れているのがまずいらしい

req.session = {
    hogehoge: hugahuga
}

ちゃんと1つづつ値を入れてやれば問題ない

req.session.hogehoge = hugahuga

node-validatorの使い方が変わってるから注意しなはれやっ!

「node validator」で検索すると↓が引っかかるけど、これバージョン2系の話です。3系だと違うんで注意が必要です。

http://codedehitokoto.blogspot.jp/2012/04/node-validator.html

2系だとcheck関数にcheckする値を渡して、関数でValidatorして、引っかかったらThrowされるのでそれを拾って処理する

	var check = require('validator').check;
	try {
		check(text).notEmpty();
	} catch(e) {
		console.log(e.message);
	}

3系だとvalidatorに関数があるので関数にValidateしたい値を渡してtrue/falseが返答される

	var validator = require('validator');
	if(!validator.isNull(text)) console.log('this is error message!');

関数は↓のリンクに詳細が記載されているので確認を。

https://github.com/chriso/validator.js

2系で作ってて3系に上がるとtry catchをifに変更しないといけないのが死ぬほどだるいので中止しなはれやっ!

3系の書き方のほうがきめ細やかなエラー処理ができて僕はいいと思うけどね。try catchで拾いたかったらifで判定した後にthrowすればいいんだし。

見守り続けても手を出しすぎても最終的に自分が死ぬ

なんか似たような話がFBでぽこぽこと連続して上がってきたのでなんとなく書いてみる。「経営者」と言われると自分と全く関係ない話として読めてしまうけど、「老害」と考えて読むとちょっと見え方が変わってくると思う。

経営における「クソジーコ問題」とは

経営者は監督に徹しないといけない。

若い経営者が陥りがちな罠

プレイヤーは年をとるほどに自分がやってきたことが経験として積み上がっていて、なまじ知識があるがゆえに色々口を出したくなったりするし、自分で作業した方がうまくいくし早く終わると考えてやってしまいがちだよね。でも、その行動がプロジェクトを円滑に回すためであったり、プロジェクトの道筋を律するために必要な行動でなければ、それは自分のエゴでやってるだけの作業だと思う。もし自分のエゴだけで口を出したりしているのであればそれは「クソジーコ」だし「老害」なんだよね。

じゃあ、「老害」と呼ばれないように口を出さずに見守り続ければいいのかというとそれも違うと思う。

普通の人間は年をとるほどにやれることは多くなっていくし、自分の作業を明確に指示してくる人は少なくなっていくよね。自分の作業に自由が効く代わりに責任は重くなっていくのが一般的だと思う。「別の人がやっているから監督として見守るべきだ」という判断をするのは自由なんだけど、自分が組織貢献をする上で「作業を見守る」というのが最有力の行動なのかは考えるべきだよね。「見守る」というか「作業指示を出す」ことが一番組織貢献をする上で大事なのであればそうやればいいんだろうけど、何も言わなくてもやってくれる人間というのは少なからずいて、その人間に「作業指示を出す」ことに労力を使うぐらいなら自分ができる別の作業をしたほうが組織貢献はできると思うんだよ。

指示を出し過ぎたり、任せて良い作業をやり過ぎたりすればその人は「老害」になるし「クソジーコ」になるんだと思う。けど、見守り続けていれば自分の力を発揮する場所がどんどん減っていって最終的に全く使えない人間になる。見守ったり指示を出したりしながら自分しかできなくて組織がうまくいくためにできることを見つけ出してやっていくことが年を取れば取るほど求められて来るんだろうなぁと思ってしまう今日このごろです。