CommentsService を介して API にコメントを投稿するためのフォームを作成するコントローラーを使用したディレクティブがあります。
私のディレクティブはこれに少し似ています:
app.directive('appComments', function( CommentService ) {
return {
restrict: 'E',
scope: {
event: '='
},
controller: function( $rootScope, $scope, $element ) {
$scope.comments = [];
$scope.comment_text = '';
// load comments if event ID has changed
$scope.$watch( 'event', function() {
if( typeof $scope.event != 'undefined' ) {
CommentService.get( $scope.event ).then(
function( comments ) {
$scope.comments = comments;
}
);
}
});
// post comment to service
$scope.postComment = function() {
if( $scope.comment_text != '' ) {
CommentService.post(
$scope.event,
$scope.comment_text,
function() {
// code to reload comments
}
);
}
};
},
templateUrl: '/partials/comments.html'
};
});
これはディレクティブ用の私の comments.html です
<div class="event-comments">
<p ng-if="!comments.length">
<span>This event has no comments.</span>
</p>
<div
class="event-comment"
ng-repeat="comment in comments"
>
<div class="comment-text">{{comment.text}}</div>
</div>
</div>
<div class="insert-comment-container" ng-if="!loading">
<form ng-submit="postComment()">
<textarea
ng-model="comment_text"
></textarea>
<div
ng-tap="postComment()"
>Post</div>
</div>
</div>
これが私のメインビューに配置する方法です:
<app-comments event="event.id"></app-comments>
コメントが読み込まれ、イベント ID が渡されますが、コメントを投稿しようとするcomment_text
と空白になります。
スコープが混同されていると思いますが、ディレクティブについてはまだ完全に明確ではありません
** アップデート **
私が設定した場合、私はちょうど気づいた
$scope.comment_text = 'Initial text'
ディレクティブでは、テンプレートがテキストエリア内でレンダリングされるときに表示if
され、postComments() 関数のステートメントが起動します。しかし、テキストエリアのテキストを変更して投稿ボタンをタップすると、内容は$scope.comment_text
「初期テキスト」のままで、一方向バインディングのようです。