angular.module('yourModule').directive('bindIf', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
function parser(value) {
var show = scope.$eval(attrs.bindIf);
return show ? value: '';
}
ngModel.$parsers.push(parser);
}
};
});
在angular中,当交互中$setViewValue()方法被调用时(就是要在设置内容显示时),$parsers数组中的函数会被逐个调用,前一个会将结果传给下一个,直到全部parser函数执行完毕,就得到了要显示或者验证后的值。你的代码就是将定义的parser函数加入到这个$parsers数组中,当恰当的时候就被调用了。