TLDR:なぜAngularのngMinlengthは$補間値を使って$ observe更新を受け取りますか?
私は角1.3でカスタム検証ディレクティブに取り組んでいますし、一貫性のないと思われる何かに気づきました。角度のあるディレクティブはattrから補間された更新を得るようです$ observe、しかし私が作成するディレクティブは同じように動作しません。
$ watchを使用して修正したり、補間された値をバインドすることはできますが、既存の検証ディレクティブとは矛盾します。違いは何ですか?私のカスタムディレクティブは組み込みのバリデーションディレクティブと同様に動作させることができますか?
角度の指令ngMinlengthディレクティブは "MINLENGTH" 属性を観察$ではなく、 "ngMinlength" 属性であることを
function observeMinLength($log){
return {
restrict: 'A',
require: '?ngModel',
link: function (scope, elm, attr, ctrl) {
if (!ctrl) return;
var min;
//Problem 1: observered value is not interpolated
//Problem 2: observe is only fired one time
attr.$observe('observeMinlength', function (value) {
$log.debug('observed value: ' + value);
min = parseInt(value, 10) || 0;
ctrl.$validate();
});
ctrl.$validators.mymin = function (modelValue, viewValue) {
var len = 0;
if (viewValue){
len = viewValue.length;
}
return ctrl.$isEmpty(viewValue) || viewValue.length >= min;
};
}
};
}
ありがとうございます!それは当時の話全体のようです。 $ observeのドキュメンテーションは、値を補間することを暗示しているように見えました。欠落している接頭辞は、属性名を正規化したものと仮定しました。私は決してjqLiteファイルを見るとは思わなかったでしょう! –