Создание и обновление глобального списка с помощью angularjs в ionic

Я пытаюсь объявить глобальный список в своем ионном проекте с помощью переменной rootScope. Моя цель — обновить этот список конкретными сообщениями. По моему сценарию у меня разные взгляды на их формы. Я пытаюсь удерживать выполненные действия в другом представлении в приложении. Когда я нажимаю кнопку формы «x», в этот глобальный список должно быть добавлено сообщение «форма x завершена». После этого, когда я нажимаю кнопку формы «y», к этому списку должно быть добавлено сообщение «форма y завершена». Затем я отображаю содержимое глобального списка в представлении завершенных действий.

В каждом представлении у меня есть кнопка, как показано на скриншоте 2.

Кроме того, я связал эти представления с контроллером в файле controller.js ниже:

Я создал глобальный список, используя rootScope, чтобы другие контроллеры могли достигать значений этого списка.

 .controller('MainCtrl', function($scope, $rootScope, $state) {

      $rootScope.onButtonClick = function (obj) {
        $rootScope.buttons = [];
        $rootScope.buttons.push(obj); 
        $state.go('app.completed');
    }
 })

Затем я подключил представление «Выполненные действия» с другим контроллером, чтобы отобразить окончательный вид списка, чтобы увидеть все нажатые кнопки в приложении:

 .controller('CompletedCtrl', function($scope,$rootScope,$state) {

    $scope.buttons = $rootScope.buttons;

    $scope.onCompletedButtonClick = function(){
    $state.go('app.homepage');  

  }

})

Представление «Выполненные действия» (html-файл):


    <span style="color:white">COMPLETED TravelBuddy</span>

 </ion-nav-title>

 <ion-content>

  <div class="list">

  <ion-list>

  <ion-item ng-repeat="item in buttons">
   {{item}}!
  </ion-item>

  </ion-list>

  <label class="item">
      <button class="button button-block button-balanced" ng-click="onCompletedButtonClick()">+</button>
    </label>
</div>

</ion-content>

After I run my mobile application, I can not display all pushed items from the list, I only see the first pressed button message in the completed actions in screenshot1. How could I solve this problem?screenshot1screenshot2


person Gizem    schedule 24.12.2016    source источник


Ответы (2)


Вы написали, что «сообщение должно быть добавлено в этот список».

но вы очищаете его каждый раз, когда нажимаете кнопку.

переместите эту строку из onButtonClick: rootScope.buttons = [];

person Tal Bussel    schedule 24.12.2016
comment
Спасибо за ваше предложение :) Но когда я выношу объявление $rootScope.buttons[] вне функции в контроллере, я сталкиваюсь с той же проблемой, снова вижу только одно сообщение кнопки, которая нажата в этот момент. Я думаю, что делаю что-то не так с использованием $rootScope. Моя цель - объявить глобальный список, и каждый раз, когда контроллер работает, этот список должен обновляться нажатием кнопки. Возможно, ошибка связана с «MainCtrl», потому что при его срабатывании массив повторно инициализируется и становится пустым. Что вы можете предложить мне для ее решения? - person Gizem; 25.12.2016

Рабочий плункер https://plnkr.co/edit/Y2cJrUGYcygvM9i6wKx5?p=preview

  <ion-item ng-repeat="item in buttons track by $index">
   {{item}}!
  </ion-item>

Если вы хотите отправить дубликаты, track by $index должно быть там. В противном случае вы не сможете нажать, будет выброшена ошибка

Рабочий код

$rootScope.buttons = [];
$rootScope.onButtonClick = function (obj) {
        $rootScope.buttons.push(obj); 
        $state.go('app.completed');
    }

Список обязательно обновится, но если вы не использовали ng-repeat="item in buttons track by $index", приведенный выше код выдаст ошибку, если вы нажмете dupes. Итак, добавьте track by $index, чтобы получить желаемый результат

person Mr_Perfect    schedule 25.12.2016
comment
Спасибо за ваше предложение :) Но когда я выношу объявление $rootScope.buttons[] вне функции в контроллере, я сталкиваюсь с той же проблемой, снова я вижу только одно сообщение кнопки, которая нажата в этот момент. Я думаю, что делаю что-то не так с использованием $rootScope. Моя цель - объявить глобальный список, и каждый раз, когда контроллер работает, этот список должен обновляться нажатием кнопки. Возможно, ошибка связана с «MainCtrl», потому что при его срабатывании массив повторно инициализируется и становится пустым. Что вы можете предложить мне, чтобы решить эту проблему? @Tal Bussel - person Gizem; 25.12.2016
comment
Проверьте консоль. Может быть ошибка dupes. Подскажите есть ли он? - person Mr_Perfect; 25.12.2016
comment
Я добавил статамент, который вы предложили, но не могу его решить, возможно, проблема в отношениях между контроллерами и представлениями. Я не мог реализовать логику глобального массива и отобразить его содержимое на другой странице. Также я проверил ошибки с помощью команды consolelogs, но ничего не вижу. - person Gizem; 25.12.2016
comment
Очень интересно, что когда я нажимаю кнопки три или четыре раза, я вижу только сообщение одной кнопки, но после многократного нажатия кнопок я вижу содержимое списка с более чем одним сообщением. Я думаю, что есть ошибка с объявлением глобального списка. - person Gizem; 25.12.2016
comment
Сделайте плункер вашего кода. Поместите это в свой вопрос - person Mr_Perfect; 25.12.2016
comment
Я положил свои файлы html и js в ваш плункер, вы можете найти его еще раз спасибо :) - person Gizem; 25.12.2016
comment
Нет, это частный глоток. таких файлов не нашел - person Mr_Perfect; 25.12.2016
comment
О, извините:( Я пропустил это, отвечая на ваше сообщение:) вы можете найти его по ссылке plnkr. co/edit/DtxplDXpJiWmBhHwCINM?p=preview - person Gizem; 25.12.2016
comment
На самом деле, я не знаю, как использовать Plunker, потому что я не использовал его раньше, и я новичок в ionic и angularjs. Я создал свои файлы, но не знаю визуализации приложения в нем. Я только копипаст свои коды. Если это не полезно, еще раз большое спасибо за ваше внимание. - person Gizem; 25.12.2016