2013-10-12 21 views
0

我知道在Angular世界中绑定数据比操作dom元素更好。但我无法想出一个方法来实现'在时间轴上,点击推文,加载回复,点击另一个推文加载另一个回复的效果。实现在angularjs中嵌入评论像Twitter一样

这里是一些代码运行到我的想法:

<div class="tweet" ng-repeat="tweet in tweets"> 
    <div class="tweet-content">{{tweet}}</div> 
    <a class="button" ng-click="loadreplay()">load reply</a> 
    <div class="reply-container">{{reply}}</div> 
</div> 

如果我写控制器这样

app.controller('Test', function($scope){ 
    $scope.tweets = ["foo", "bar"]; 
    $scope.loadreplay = function(){ 
     $scope.reply = "reply"; 
    } 
}); 

那么所有{{reply}}领域将充满了“答复”,所以在这种情况下,是操纵dom元素的唯一解决方案吗?或更多的“角”的方式?

+0

尝试NG-点击=“回复=‘答复’” –

回答

1

为您的数据/模型使用适当的模式。考虑到你不仅可以存储文本,而且至少可以存储类似ID的东西,你仍然可以使用一个对象。所以,想想这样的事情:

$scope.tweets = [ 
    { id:1, txt: 'foo' }, 
    { id:2, txt: 'bar' } 
] 

然后,你可以存储在该对象的个别答复,以及:

$scope.loadreply = function(tweet) { 
    tweet.reply = 'Reply'; 
} 

注意:在这个功能,你可以接着还用ID来如从服务器获取的微博是这样的:

$scope.loadreply = function(tweet) { 
    tweet.reply = LoadReplies(tweet.id); 
} 

你会再使用鸣叫具体答复属性显示:

<div ng:repeat="tweet in tweets"> 
    <div>{{tweet.txt}}</div> 
    <a ng:click="loadreply(tweet)">load reply</a> 
    <div>{{tweet.reply}}</div> 
</div> 

了工作演示看到这个小提琴:http://jsfiddle.net/XnBrp/