Hello因某种原因说错误:
错误:[ngRepeat:dupes]不允许在转发器中重复。使用'track by'表达式指定唯一键。 Repeater:mes in messagess,Duplicate key:string:f,Duplicate value:f
但我不明白为什么,我个人没有看到任何重复......
Here是我的Cloud9文件,用于查看代码并进行更改...
这是我的Chat.html:
<h1 style = "text-align:center; position:relative; left:-80px"> Universal Chat </h1>
<div id = "rectangle" >
<ul id="example-messages" class="example-chat-messages">
<li ng-repeat = "mes in messagess">
{{mes}}
</li>
</ul>
</div>
<textarea class="form-control" id="chatbox" rows="1" ng-model = "textValue">
</textarea>
<a class="btn right" id = "submitButton" ng-click = "submit()">
<span class="left title">Submit Comment</span>
<span class="right icon icon-comment"><span class="slant-right"></span></span>
</a>
我的chatController.js:
app.controller('chatController', ["$scope", 'AuthService', "Auth", "Ref", "$rootScope", "$firebaseArray", "$firebaseObject",
function($scope, AuthService, Auth, Ref, $rootScope, $firebaseArray, $firebaseObject) {
var postsArray = {}
console.log(AuthService.User.email) //Gives me correct Email
console.log(AuthService.User.password) //Gives me correct password
console.log(AuthService.User.uid) //Gives me correct uid
console.log(AuthService.User.username) //Gives me correct username
some = $firebaseArray(Ref.child("Posts").child(AuthService.User.username));
console.log((some))
var postsFirebase = $firebaseObject(Ref)
var username = AuthService.User.username
$scope.messagess = {}
$scope.submit = function() {
if (!($scope.textValue)) {
}
else {
some.$add({
Posts: $scope.textValue
}).then(function(authData) {
console.log(authData.path)
Ref.child("Posts").child(username).child(authData.path.o[2]).on("value", function(snapshot) {
console.log(snapshot.val().Posts)
$scope.messagess.push(snapshot.val().Posts)
snapshot.val().Posts
}, function(errorObject) {
console.log("The read failed: " + errorObject.code);
});
}).catch(function(errorObject){
alert("See the console for more details")
console.error(errorObject.code)
})
}
}
}
])
SnapShot.val就像您在我的firebase中提交的当前帖子一样:
答案 0 :(得分:1)
重复错误表明其f
重复,因此我认为消息是字符串,而不是数组。您要做的是显示每条消息。但现在,您正在迭代消息本身,即:
<li ng-repeat="mes in 'message'">
第一项为m
,第二项为e
,第三项为s
。并且,正如您可能认为的那样,当它注意到下一个(重复的)s
时,它会抛出错误。
你应该迭代一系列消息,即:
<li ng-repeat="mes in ['message']">
将正确显示它们。请查看此行中保存到范围的内容:
$scope.messagess = snapshot.val().Posts
它应该是一个数组。
但请注意,在修复之后,您仍应使用track by
,因为发布相同的消息两次会再次出现错误。
<li ng-repeat="mes in messages track by $index">
相关:Angular ng-repeat Error "Duplicates in a repeater are not allowed."]
如果您仍然遇到问题,请尝试创建Minimal, Complete, and Verifiable example,以便我们提供帮助。
更新:
根据您提供的数据结构的屏幕(Posts
是我想要的字符串),您应该将范围分配更改为:
$scope.messagess = snapshot.val()
然后,在视图中,读取所有值,即
<li ng-repeat="mes in messages">{{ mes.Posts }}</li>
但是,我觉得这个结构(和命名)很奇怪。