基本的な「Hello、X」ディレクティブを実装するだけのこの基本的なplnkrがあります。リンク関数でログを記録していますscope.name
が、取得しundefined
ますか?なんでそうなの?name
コンソールにプロパティの値を記録するべきではありませんか?
3 に答える
これは既知の「問題」であり@
、リンク関数が呼び出された後に属性の補間が発生します。この問題を変更するためのプルリクエストが開かれていますが、これがマージされるかどうかは明確ではありません。
それまでの間、補間された値を取得する方法は、次のような属性を観察することです。
attrs.$observe('hello', function(changedValue){
console.log(scope.name);
});
そして、プランク:http://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p= preview
したがって、結局のところ、これはAngularJSの少し紛らわしい動作であり、将来変更される可能性があります。
Pawelは正しいです(https://stackoverflow.com/a/14552200/287070)が、問題は、リンク関数中にattrsパラメーターで{{}}補間を含むすべての属性がnullに設定されることです。これらを評価するためのコンパイルがまだ実行されていないため、最初の$digestとして。
リンク関数で@バインディングがnullであるという事実は、これの単なる症状です。
コンパイルプロセスの途中で$digestsの実行を開始できないため、現在、実際の修正はありません。したがって、$observe(または$ watch)がこれらの値を取得する唯一の実際の方法です。
この投稿を読んでいる2015年の方は、Angularが"@"
属性を処理する方法が変更されていることに注意してください。Angular 1.2以降では、リンク関数を呼び出す前に補間が行われます。
このトピックに関する優れた投稿がここにあります。