10

基本的な「Hello、X」ディレクティブを実装するだけのこの基本的なplnkrがあります。リンク関数でログを記録していますscope.nameが、取得しundefinedますか?なんでそうなの?nameコンソールにプロパティの値を記録するべきではありませんか?

4

3 に答える 3

14

これは既知の「問題」であり@、リンク関数が呼び出された後に属性の補間が発生します。この問題を変更するためのプルリクエストが開かれていますが、これがマージされるかどうかは明確ではありません。

それまでの間、補間された値を取得する方法は、次のような属性を観察することです。

attrs.$observe('hello', function(changedValue){
     console.log(scope.name);
});

そして、プランク:http://plnkr.co/edit/Lnw6LuadTLhhcOTsPC8w?p= preview

したがって、結局のところ、これはAngularJSの少し紛らわしい動作であり、将来変更される可能性があります。

于 2013-01-27T20:56:33.963 に答える
2

Pawelは正しいです(https://stackoverflow.com/a/14552200/287070)が、問題は、リンク関数中にattrsパラメーターで{{}}補間を含むすべての属性がnullに設定されることです。これらを評価するためのコンパイルがまだ実行されていないため、最初の$digestとして。

リンク関数で@バインディングがnullであるという事実は、これの単なる症状です。

コンパイルプロセスの途中で$digestsの実行を開始できないため、現在、実際の修正はありません。したがって、$observe(または$ watch)がこれらの値を取得する唯一の実際の方法です。

于 2013-01-27T21:18:21.390 に答える
0

この投稿を読んでいる2015年の方は、Angularが"@"属性を処理する方法が変更されていることに注意してください。Angular 1.2以降では、リンク関数を呼び出す前に補間が行われます。

このトピックに関する優れた投稿がここにあります

于 2015-11-16T11:31:11.450 に答える