angular.js - directive里的link和controller区别?非directive的scope能否用link?
PHP中文网
PHP中文网 2017-05-15 16:51:39
0
2
680

为什么有的要写在link里面,有的要写在controller里面?!
如果希望在module中设置一个子scope,但不用directive,这时候能否用link?
(比如说用ngRoute时候的ng-view部分,可否用link)
controller可以和服务器端通信是吧,link好像不干这事情?还是只是我没见到过?

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(2)
小葫芦

ディレクティブのリンクとコントローラーの違いについて?
1. 実行順序: 最初にコントローラー、次にリンク
2. コントローラーを使用する場合: 一般的なシナリオでは、コントローラーを使用する必要はなく、リンクにロジックを記述するだけで済みます。コントローラーが使用されるシナリオでは、命令 (と想定されます) が必要になります。他の命令(bとする)で実行した場合、b命令のlink関数でこのコントローラを渡します(requireが複数ある場合は配列を渡し、各require命令に対応するコントローラを格納します)配列) の目的は明らかに命令間の通信です。

非ディレクティブスコープにリンクを使用できますか?
リンクは命令内でのみ呼び出されます。つまり、コンパイル後に命令がスコープにバインドされるときにリンクが呼び出されます。
リンクは命令が定義されている場所でのみ使用されます。たとえば、ポップアップ ボックスを作成する場合は、テンプレート tpl を取得してから var linkFn = $compile(angular.element(tpl));此时返回的就是一个link的函数,然后linkFn(scope) を呼び出す必要があります。指定する必要があるスコープは、新規に作成したものでも、既存のものでも構いません。

いいねを押す +0
某草草

リンクとコントローラーは全く関係のない概念です。

特定のディレクティブの場合、リンクはより複雑であり、基本的に angularjs の場合は、ディレクティブを最初にコンパイルする必要があります ---> $compile を呼び出して dom を生成します。オブジェクト ---&gt ; リンクを呼び出して、対応するスコープにバインドします ---> $digest をトリガーします (その後、ディレクティブを更新するための多くのステップがあります。オブジェクトごとにコンパイル時間とタイミングが異なります。詳細については API を参照してください) )

つまり、コンパイル、リンクなどはすべて方向性を考慮したものです。対象者が jquery に精通している場合、コンパイル プロセスはいくつかの dom オブジェクト ($('<a class = //.... ') を作成するのと同じです。 ) ) link は、$().append や prepend などの dom 操作です。

では、スコープとは何ですか?スコープはモデルをバインドするために使用されます。
コントローラーとは何ですか? メソッド (ロジック) をスコープに追加するために使用されます。

link は DOM にディレクティブを埋め込むために AngularJS によって提供されるアスペクトメカニズムです。Controller はスコープ内の watch イベントがトリガーされたときのコンテキストであり、これはまったく異なります。

最後の質問に関しては、関数が実行できる限り、作成したコードは実行できますが、一般的に言えば
1) ビジネスロジックをコントローラーに書きます。ディレクティブ自体のコントローラーではなく、バインドされているスコープのコントローラーに書きます

2) コントローラー内で DOM 操作、特に prepend と append を行わないでください。これは、コンパイルされていない DOM オブジェクトは監視できず、angularjs は後で追加されコンパイルされていない DOM オブジェクトを監視しないためです。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート