Отправить данные на другой контроллер в AngularJS - PullRequest
0 голосов
/ 28 декабря 2018

Как я могу отправить array.lengh на другой контроллер.Первый контроллер: Cod bellow

                function uploader_OnAfterAddingFile(item) {

                    var doc = {item: {file: item.file}};

                    if (doc.item.file.size > 10240) {
                        doc.item.file.sizeShort = (Math.round((doc.item.file.size / 1024 / 1024) * 100) / 100) + 'MB';
                    } else {
                        doc.item.file.sizeShort = (Math.round((doc.item.file.size / 1024) * 100) / 100) + 'KB';
                    }
                    doc.item.showCancel = true;

                    if ($scope.documentStatus) {
                        item.formData.push({status: $scope.documentStatus});
                    }
                    if ($scope.tenderDraftId) {
                        item.formData.push({tenderDraftId: $scope.tenderDraftId});
                    }

                    item.getDoc = function () { return doc; };
                    doc.item.getUploadItem = function () { return item; };

                    $scope.documents.push(doc);

                    //I need send $scope.documents.length
                }

отправить эту функцию на другой контроллер Второй контроллер:

http://prntscr.com/m0oc5h

Они находятся на одной странице.

Первый контроллер - это компонент, который повторно загружает загружаемые файлы.

Второй контроллер - это модальное окно, где у нас есть 2 ввода текста и элемент с первым контроллером.

Все, что мне сейчас нужно, это array.lengh файлов, которые были загружены в режим отправки в модальном окне.Я пытался с $ rootScope, но это не помогло мне.

Ответы [ 3 ]

0 голосов
/ 28 декабря 2018

Я думаю, что вы действительно хотите здесь сделать $emit или $broadcast событие.Это позволит вам писать меньше кода и легко передавать эти данные в любое место приложения, которое вы пожелаете!Использование прослушивателей событий $on также обеспечит такой же эффект.

Пожалуйста, прочитайте эту статью, чтобы понять, какой вариант лучше всего подходит для вашего случая использования.https://medium.com/@shihab1511/communication-between-controllers-in-angularjs-using-broadcast-emit-and-on-6f3ff2b0239d

TLDR: $ rootScope. $ Широковещание против $ scope. $ Emit

0 голосов
/ 28 декабря 2018

Я столкнулся с подобной проблемой на днях.Я бы использовал привязку данных вместе с методом $ ctrl.Вот действительно хорошая статья с примером, который вы можете воспроизвести в своем случае: http://dfsq.info/site/read/angular-components-communication Надеюсь, это поможет.Эта форма общения значительно упрощает обмен данными между двумя компонентами на одной странице.Пример статьи:

Компонент заголовка: ввод и вывод

.component('headerComponent', {
   template: `
      <h3>Header component</h3>
      <a ng-class="{'btn-primary': $ctrl.view === 'list'}" ng-click="$ctrl.setView('list')">List</a>
      <a ng-class="{'btn-primary': $ctrl.view === 'table'}" ng-click="$ctrl.setView('table')">Table</a>
   `,
   controller: function( ) {
      this.setView = function(view) {
         this.view = view
         this.onViewChange({$event: {view: view}})
      }
   },
   bindings: {
      view: '<',
      onViewChange: '&'
   }
})

Таким образом, это означает, что компонент заголовка можно использовать примерно так:

<header-component view="root.view" on-view-change="root.view = $event.view"></header-component>

Основной компонент: ввод

.component('mainComponent', {
   template: `
      <h4>Main component</h4>
      Main view: {{ $ctrl.view }}
  `,
  bindings: {
     view: '<'
  }
})

Родительский компонент

<header-component view="root.view" on-view-change="root.view = $event.view"></header-component>
<main-component view="root.view"></main-component>

Я использовал описанный выше метод для передачи данных между двумя контроллерами, чтобы скрыть один компонент, когда кнопка нажата в другом компоненте.Передаваемые данные были логическими.Я ожидаю, что вы сможете сделать то же самое с array.length.

0 голосов
/ 28 декабря 2018

Вы можете создать пользовательский сервис, который хранит и возвращает нужное вам значение: см. Дополнительную информацию под заголовком "Создайте свой сервис".

Или вы можете добавить routeParams ввторой контроллер: см. дополнительную информацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...