ホームページ  >  に質問  >  本文

angular.js - directive里的link和controller区别?非directive的scope能否用link?

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

PHP中文网PHP中文网2714日前657

全員に返信(2)返信します

  • 高洛峰

    高洛峰2017-05-15 16:53:39

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

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

    返事
    0
  • 某草草

    某草草2017-05-15 16:53:39

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

    特定のディレクティブの場合、リンクはより複雑であり、基本的に 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 オブジェクトを監視しないためです。

    返事
    0
  • キャンセル返事