2016-09-08 4 views
1

私は非常に似た機能を持っているので、ユーザーはタイトルとリンクを入力できます。モデルとコントローラ間で使用するディレクティブを作成する

私は指示を作成すると思いました。しかし、この指令は、さまざまなコントローラのコンテキストで使用する必要があります。

たとえば、my/contractsビューではコントローラーはContractsControllerで、submitでContractsControllerは契約を保存するためのAPI要求を送信します。

私の/会議メモ表示では、コントローラはMeetingNotesControllerです。これは、クライアントとの会議メモを保存するために、別のエンドポイントへの要求を処理します。

はここで、これまでの私のディレクティブです: app.js

.directive('myprefixLinkAttachment', function($timeout) { 
    return { 
     restrict: 'A', 
     templateUrl: '../partials/directives/link-attachment.html', 
     scope: {}, 
     link: function link(scope, element, attrs) { 
      $timeout(function() { 
       console.log(scope.$parent); 
       console.log(scope.title); 
      }, 5000); 
     } 
    } 
}) 

タイムアウト正しい値を返します - 私は値を得ることができるかどうかを確認するためにテストしていました。

リンクattachment.html

<md-input-container class="md-block" md-no-float flex="100" flex-gt-xs="66"> 

    <input ng-model="title" placeholder="Title..."> 

</md-input-container> 

<md-input-container class="md-block" flex="100" flex-gt-xs="33"> 

    <input ng-model="link" placeholder="Title..." ng-keypress="CtrlNameHere.save($event)"> 

</md-input-container> 

そして私はContractsController(この例では)内部からの指令を呼び出す - が、これは変化することが必要になります。要約すると

<div layout="column" layout-gt-xs="row" class="new-entry-line" myprefix-link-attachment> 

- 私はCtrlNameHere.save()メソッドを処理するために、正しいコントローラを呼び出すことができることながら、自由にディレクティブを使用したいと思います。

+0

ディレクティブにsaveメソッドを渡そうとしましたか? –

+0

どのコントローラーにそれを渡すのがどのように分かりますか?私は$親を使用することができると思うが、私はそれを読んだことはお勧めしていないのですか? – DJC

+0

データを同期するサービスを作成することができます –

答えて

1

質問はしていません。 異なるコントローラのスコープで同じディレクティブを使用するときに、コントローラの関数を呼び出す方法を聞いていると思います。

あなたがする必要があるのは、指示する関数に指示を渡すことです。

scope: { 
    controllerFn: "=" 
} 

ディレクティブを使用して、それをコントローラの機能を渡し、そのよう:最後に

<myprefix-link-attachment controller-fn="someControllerFunction"> 

はそこらで、あなたは、controllerFnプロパティを受け入れるようにようにする必要がありますディレクティブ既にスコープ内にある関数を呼び出してください:

ng-keypress="controllerFn($event)" 
+2

controllerFnは参照プロパティとして設定する必要があります。例: 'scope:{controllerFn: '&'}'また、コントローラ内だけでなくアプリケーション全体で使用できるため、 'on-save'のようなコンポーネントプロパティに適切な名前を設定することをお勧めします。 –

+0

@VasylRomanchakは正しいです。参照プロパティとして設定する必要があります。今のところ、$ eventは私のコントローラに渡されません。コントローラを保存するには、コントローラのタイトル/リンク値を取得するにはどうしたらいいですか? – DJC

関連する問題