84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
为什么有的要写在link里面,有的要写在controller里面?! 如果希望在module中设置一个子scope,但不用directive,这时候能否用link? (比如说用ngRoute时候的ng-view部分,可否用link) controller可以和服务器端通信是吧,link好像不干这事情?还是只是我没见到过?
认证高级PHP讲师
ディレクティブのリンクとコントローラーの違いについて? 1. 実行順序: 最初にコントローラー、次にリンク 2. コントローラーを使用する場合: 一般的なシナリオでは、コントローラーを使用する必要はなく、リンクにロジックを記述するだけで済みます。コントローラーが使用されるシナリオでは、命令 (と想定されます) が必要になります。他の命令(bとする)で実行した場合、b命令のlink関数でこのコントローラを渡します(requireが複数ある場合は配列を渡し、各require命令に対応するコントローラを格納します)配列) の目的は明らかに命令間の通信です。
非ディレクティブスコープにリンクを使用できますか? リンクは命令内でのみ呼び出されます。つまり、コンパイル後に命令がスコープにバインドされるときにリンクが呼び出されます。 リンクは命令が定義されている場所でのみ使用されます。たとえば、ポップアップ ボックスを作成する場合は、テンプレート tpl を取得してから var linkFn = $compile(angular.element(tpl));此时返回的就是一个link的函数,然后linkFn(scope) を呼び出す必要があります。指定する必要があるスコープは、新規に作成したものでも、既存のものでも構いません。
var linkFn = $compile(angular.element(tpl));
linkFn(scope)
リンクとコントローラーは全く関係のない概念です。
特定のディレクティブの場合、リンクはより複雑であり、基本的に angularjs の場合は、ディレクティブを最初にコンパイルする必要があります ---> $compile を呼び出して dom を生成します。オブジェクト ---> ; リンクを呼び出して、対応するスコープにバインドします ---> $digest をトリガーします (その後、ディレクティブを更新するための多くのステップがあります。オブジェクトごとにコンパイル時間とタイミングが異なります。詳細については API を参照してください) )
つまり、コンパイル、リンクなどはすべて方向性を考慮したものです。対象者が jquery に精通している場合、コンパイル プロセスはいくつかの dom オブジェクト ($('<a class = //.... ') を作成するのと同じです。 ) ) link は、$().append や prepend などの dom 操作です。
では、スコープとは何ですか?スコープはモデルをバインドするために使用されます。 コントローラーとは何ですか? メソッド (ロジック) をスコープに追加するために使用されます。
link は DOM にディレクティブを埋め込むために AngularJS によって提供されるアスペクトメカニズムです。Controller はスコープ内の watch イベントがトリガーされたときのコンテキストであり、これはまったく異なります。
最後の質問に関しては、関数が実行できる限り、作成したコードは実行できますが、一般的に言えば 1) ビジネスロジックをコントローラーに書きます。ディレクティブ自体のコントローラーではなく、バインドされているスコープのコントローラーに書きます
2) コントローラー内で DOM 操作、特に prepend と append を行わないでください。これは、コンパイルされていない DOM オブジェクトは監視できず、angularjs は後で追加されコンパイルされていない DOM オブジェクトを監視しないためです。
ディレクティブのリンクとコントローラーの違いについて?
1. 実行順序: 最初にコントローラー、次にリンク
2. コントローラーを使用する場合: 一般的なシナリオでは、コントローラーを使用する必要はなく、リンクにロジックを記述するだけで済みます。コントローラーが使用されるシナリオでは、命令 (と想定されます) が必要になります。他の命令(bとする)で実行した場合、b命令のlink関数でこのコントローラを渡します(requireが複数ある場合は配列を渡し、各require命令に対応するコントローラを格納します)配列) の目的は明らかに命令間の通信です。
非ディレクティブスコープにリンクを使用できますか?
リンクは命令内でのみ呼び出されます。つまり、コンパイル後に命令がスコープにバインドされるときにリンクが呼び出されます。
リンクは命令が定義されている場所でのみ使用されます。たとえば、ポップアップ ボックスを作成する場合は、テンプレート tpl を取得してから
var linkFn = $compile(angular.element(tpl));
此时返回的就是一个link的函数,然后linkFn(scope)
を呼び出す必要があります。指定する必要があるスコープは、新規に作成したものでも、既存のものでも構いません。リンクとコントローラーは全く関係のない概念です。
特定のディレクティブの場合、リンクはより複雑であり、基本的に angularjs の場合は、ディレクティブを最初にコンパイルする必要があります ---> $compile を呼び出して dom を生成します。オブジェクト ---> ; リンクを呼び出して、対応するスコープにバインドします ---> $digest をトリガーします (その後、ディレクティブを更新するための多くのステップがあります。オブジェクトごとにコンパイル時間とタイミングが異なります。詳細については API を参照してください) )
つまり、コンパイル、リンクなどはすべて方向性を考慮したものです。対象者が jquery に精通している場合、コンパイル プロセスはいくつかの dom オブジェクト ($('<a class = //.... ') を作成するのと同じです。 ) ) link は、$().append や prepend などの dom 操作です。
では、スコープとは何ですか?スコープはモデルをバインドするために使用されます。
コントローラーとは何ですか? メソッド (ロジック) をスコープに追加するために使用されます。
link は DOM にディレクティブを埋め込むために AngularJS によって提供されるアスペクトメカニズムです。Controller はスコープ内の watch イベントがトリガーされたときのコンテキストであり、これはまったく異なります。
最後の質問に関しては、関数が実行できる限り、作成したコードは実行できますが、一般的に言えば
1) ビジネスロジックをコントローラーに書きます。ディレクティブ自体のコントローラーではなく、バインドされているスコープのコントローラーに書きます
2) コントローラー内で DOM 操作、特に prepend と append を行わないでください。これは、コンパイルされていない DOM オブジェクトは監視できず、angularjs は後で追加されコンパイルされていない DOM オブジェクトを監視しないためです。