属性を介していくつかの構成オプションを受け入れる angularJs で単純なディレクティブを構築しようとしていますが、属性が設定されていない場合は、属性のデフォルト値を設定したいと考えています。
これが私の範囲を説明する方法です:
scope : {
classes: '@',
progress: '@'
}
これらの属性は、次の方法でビューに表示されます。
<div class="{{classes}}">
<div style="width: {{progress}}%;" class="bar"></div>
</div>
リンク関数では、次のようにデフォルト値を設定しようとしています:
link: function(scope, el, attrs)
{
console.log( scope.classes, scope.progress );
if (typeof scope.classes === 'undefined')
scope.classes = 'progress progress-warning';
if (typeof scope.progress === 'undefined')
scope.progress = 99;
console.log( scope.classes, scope.progress );
}
コンソール出力は次のとおりです。
undefined undefined
progress progress-warning 99
したがって、スコープ内で値が正しく設定されているようです。ただし、実際の html 出力では、属性はレンダリングされていません。結果の HTML は次のとおりです。
<div class="">
<div class="bar" style="width: %;"></div>
</div>
ただし、html から属性を呼び出すときにこれらの属性をインラインで指定すると、次のようになります。
<my-directive data-progress="60" data-classes="progress" />
それはうまく表示されます:
<div class="progress" data-progress="60" data-classes="progress">
<div class="bar" style="width: 60%;"></div>
</div>
私の質問は、 を呼び出すだけで<my-directive />
、リンク関数から、進行状況とクラスのデフォルト値が想定どおりに設定されないのはなぜですか? (そして、それがコンソールに表示されたにもかかわらず)