我是AngularJS的新手。我研究了ng-repeats背后的理论,但我找不到任何关于嵌套ng-repeats的双向数据绑定或对象创建的好例子。我知道在最近的版本中语法已经改变。我正在使用1.1.5。
我发布了具有嵌套注释对象数组的对象。我希望能够在帖子中的评论数组中添加新的评论对象。我尝试了很多不同的版本。
这是我的HTML:
<div id='posts' ng-controller="PostsCtrl">
<ul>
<div id='post' ng-repeat="post in posts track by post.id">
<div id='postMedia'>
<img ng-click="" ng-src={{post.attachment}} />
</div>
<div ng-click="">
<div ng-click="">{{post.message}}</div>
<div ng-click="">{{post.created_at}}</div>
</div>
<h1>Comments</h1>
<div id='comment' ng-repeat="comment in post.comments track by post.comment.id">
<div ng-click="">{{comment.body}}</div>
</div>
<form ng-submit="addComment()">
<input id="body" type="text" placeholder="Reply…" ng-model="post.comment.body">
<input type="submit" value="Add">
</form>
</div>
</ul>
</div>
这是控制器:
myApp.controller('PostsCtrl', ['$scope', 'angularFire',
function MyCtrl($scope, angularFire) {
var url = 'https://inviter-dev.firebaseio.com/posts';
$scope.items = angularFire(url, $scope, 'posts', {});
$scope.commentProp = 'comments';
$scope.addComment = function() {
$scope.comments.push($scope.newcomment);
}
}
]);
解决方案:
感谢Chandermani解决这个问题的答案。我稍微修改了控制器,因为我想在数据存储中使用一个名为body的键 -
myApp.controller('PostsCtrl', ['$scope', 'angularFire',
function MyCtrl($scope, angularFire) {
var url = 'https://inviter-dev.firebaseio.com/posts';
$scope.items = angularFire(url, $scope, 'posts', [] );
$scope.addComment = function(post,comment) {
post.comments.push({body:comment});
}
}
]);
答案 0 :(得分:3)
您addComment
方法的问题在于它不知道添加评论所需的帖子。注释输入也是注释的ng-repeat的一部分,可以有一个独立的模型,可以传递给控制器方法。
您需要进行以下更改。在html中
<form ng-submit="addComment(post,commentData)">
<input id="body" type="text" placeholder="Reply…" ng-model="commentData">
<input type="submit" value="Add">
</form>
在您的控制器中
$scope.addComment = function(post,comment) {
post.comments.push(comment);
}