私は、アプリケーションの顧客に対するコメントの管理(作成/更新/削除)のためのディレクティブを作成しました。 ユーザーに同じコメント機能(ルック・アンド・フィール)を提供したいので、唯一必要なことはCustomersServiceを私のUsersServiceに置き換えることです。 どちらのサービスも「クルドーイング」コメントと同じメソッドを持っています(可能であれば、両方ともICommentsServiceインターフェイスを実装します)。AngularJs 1:ディレクティブ宣言からコントローラにサービスを挿入する方法
私の質問は、できるだけ私が作成したビューとコントローラを再利用して、コードを複製する必要はありません。
私の初期のアプローチは、同じビューおよびコントローラを参照する2つの別個のディレクティブ(CustomerCommentsとUserComments)を作成することであるが、それぞれCustomersService又はUsersServiceを注入します。私がこれに直面している問題は、別のファイルにコントローラを持っている間に、ディレクティブ宣言に "DI定義"を保持する方法です...?
これは私のディレクティブ宣言です:
angular.module('myApp').directive('myComments', [
function() {
'use strict';
return {
restrict: 'E',
scope: {
commentId: '='
},
templateUrl:'mycomments.html',
controller: 'CommentsCtrl', //<-- How to define injected objects here?
};
}
]);
...これは私のコントローラである:
angular.module('myApp').controller('CommentsCtrl', [
'$scope',
'$q',
'CustomersService', //<-- These "DI-objects" should be defined in the directive declaration
function ($scope, $q, commentsService) {
$scope.addComment = function(comment){
commentsService.addComment(comment);
};
$scope.getComment = function(commentId){
retur commentsService.getComment(commentId);
};
//...etc...
}
]);
それともこれを解決するためのより良い方法がありますか?
_「ここに注入されたオブジェクトを定義するには?」_ - 以下のように同じように。 – zeroflagL
@zeroflagLありがとうございますが、コントローラがディレクティブ宣言のインライン関数として定義されている場合、構文を正しく取得できませんでした。 コードスニペットを少し高く評価すると...! :) – YonZo
あなたの 'templateUrl:mycomments.html''は、一重引用符が始まっていません。 'templateUrl: 'mycomments.html'' –