2015-07-08 4 views
0

Я новичок в AngularJS, и у меня есть проблема с нажатием на массив внутри JSON. (Я надеюсь, что я использую правильную терминологию)Нажатие на JSON внезапно не работает

//I have a JSON that looks like this 
var items = [ 
    {name:[ 
     {names: 'John', msg:[""]}, {names: 'Dolly', msg:[""]} 
      ]} 
       ]; 

Ниже код находится внутри контроллера:

$rootScope.items = People.list(); 
$rootScope.name = "John"; 

for(var i=0;i<$rootScope.items.name.length;i++) 
    { 
    if (name== $rootScope.items.name[i].names) 
    { 
    People.addcomment(user.comment,i); 
    } 
    } 

Ниже кода в моей службы под названием 'Люди':

this.addcomment = function(comment,x) { 
items[0].name[x].msg.push(comment); 
} 

this.list = function() { 
    return items[0]; 
} 

JSON объявляется в сервисе. HTML-код, как показано ниже:

<textarea placeholder="Enter comment" ng-model="user.comment"></textarea> 

<button ng-repeat = "x in items.name" ng-if="name==x.names" 
    ng-click="addcomment(user,name)">Submit</button> 

Теперь моя проблема заключается в том, что по нажатию на кнопку «Отправить», то «сообщение» Я набрал в teaxtarea не получает хранится в «сбщ» массив, соответствующий «Джон» (внутри JSON). Что происходит не так?

У меня был весь код Службы внутри Контроллера ранее, и код работал правильно. Полагаю, что я, должно быть, ошибся с аргументами, которые передаю функции в службе.

Может кто-нибудь, пожалуйста, помогите мне?

+0

Я вижу, что ваша служба 'People' имеет функцию' list', которая возвращает 'items [0 ] ', но возвращает ли ваша служба эту функцию' list'? –

+0

ОК, я не понимаю, что вы говорите :) Как служба может вернуть функцию? – Anusha

+0

Нет проблем. В AngularJS для возврата объектов требуются службы. Я отвечу в ответе. –

ответ

1

Так рабочий процесс из вас приложения выглядит следующим образом:

  1. Service конкретизируется, JSON хранится в рамках вашей службы
  2. Controller конкретизируется, копирует массив из People.List() в rootScope.items
  3. в нг-повторы повторяются для каждого элемента в rooScope.items - не для каждого элемента в массиве элементов в ваших Людях-служба
  4. Кто-то вводит новое сообщение
  5. Этих сообщение добавляется к элементам вашей службы с помощью People.addComment.
  6. Шаг №5 изменяет только элементы в вашем сервисе, а не элементы в вашем корневом каталоге. Вот почему ng-repeat не добавляет новый элемент.

Чтобы сохранить эти две области в синхронизации, добавить функцию к контроллеру:

function updateList() { 
    $rootScope.items = People.list(); 
} 

этот метод вызова после вызова People.addComment().

Наконец, может быть, это просто мнение, вы должны изменить свою структуру JSON. В поисках путей яснее, если вы настроите свои данные следующим образом:

var items = [ 
    {name: 'John', msg:[]}, 
    {name: 'Dolly', msg:[]} 
]; 

Теперь у вас есть массив объектов. Теперь ваша функция People.list() возвращает items, и вы можете добавить нового человека, позвонив по номеру items.push({name: 'Judith', msg:[]});, и вы можете добавить сообщение с items[i].msg.push("This is a new message");

+0

Я на самом деле делаю $ rootScope.items = People.list(); в моем контроллере, как вы меня просили. Я только включил часть всего моего кода здесь :) Комментарий не добавляется ... Возможно, я делаю что-то неправильно в другом месте моего кода. Не беспокойтесь, я пойму это ... – Anusha

+0

Не принимайте свой ответ, хотя, возможно, это поможет кому-то другому, у кого есть такая же проблема :) – Anusha

+0

Не могли бы вы разместить все ваши соответствующие фрагменты кода? Я был бы рад помочь вам. –

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