ng-repeat错误重复

时间:2016-01-17 20:41:50

标签: javascript angularjs angularjs-ng-repeat

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中提交的当前帖子一样:

enter image description here 这不是重复的。来自其他地方的那些方法都没有用。

1 个答案:

答案 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>

但是,我觉得这个结构(和命名)很奇怪。