2016-01-17 2 views
1

Здравствуйте по какой-то причине он говорит как об ошибке:Дубликат в нг-повторить ошибки

Error: [ngRepeat:dupes] Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. 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 Это не дубликат. Те методы из других мест не работали.

+0

Его не дубликат. Я уже пробовал это и не помогал мне ... @fracz – amanuel2

+0

Вы уверены, что 'messages' - это массив? Дублированная ошибка говорит о том, что ее 'f' дублируется, поэтому, возможно,' messages' является строкой, а не массивом? – fracz

+0

Да сообщения - это строка .. Что случилось? @fracz – amanuel2

ответ

1

Дублированная ошибка говорит о ее дублировании, поэтому я предполагаю, что сообщения представляют собой строку, а не массив. То, что вы пытаетесь сделать, - отображать каждое сообщение. Но теперь, вы итерация сообщения сам по себе, то есть:

<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 таким образом мы можем помочь.


UPDATE:

Основываясь на экране структуры данных вы предоставили (Posts является строка, как я должен), вы должны изменить назначение возможности для:

$scope.messagess = snapshot.val() 

, а затем, в поле зрения, прочитайте все значения, то есть

<li ng-repeat="mes in messages">{{ mes.Posts }}</li> 

Однако, я нахожу эту структуру re (и именование) странно.

+0

Показывает ту же ошибку ... Вы можете увидеть мой файл cloud9 для получения более подробной информации. Я изменил свою линию li на ваш. – amanuel2

+0

Как сделать массив. который включает все сообщения. Вот что я наткнулся на ... – amanuel2

+0

Каков пример содержимого 'snapshot.val(). – fracz

Смежные вопросы