Nano Hash - криптовалюты, майнинг, программирование

Передача данных между контроллерами разных модулей

Мы создаем панель управления приложением Telecom. Мы пытаемся получить журналы с помощью поиска Logstash и Elastic и отобразить их в пользовательском интерфейсе с помощью директивы ng-Table Angularjs.

Мы можем получить журналы, но проблема заключается в отправке ответа между двумя контроллерами разных модулей.

Вот код,

Для получения журналов эластичного поиска:

// We define an EsConnector module that depends on the elasticsearch module.     

var EsConnector = angular.module('EsConnector', ['elasticsearch']);

// Create the es service from the esFactory
EsConnector.service('es', function (esFactory) {
  return esFactory({ host: 'localhost:9200' });
});

// We define an Angular controller that returns the server health
// Inputs: $scope and the 'es' service

EsConnector.controller('ServerHealthController', function($scope, es) {
es.cluster.health(function (err, resp) {
        if (err) {
        $scope.data = err.message;
    } else {
        $scope.data = resp;
   }
});
});
// We define an Angular controller that returns query results,
// Inputs: $scope and the 'es' service
EsConnector.controller('QueryController', function($scope, es) {
// search for documents
    es.search({
    index: 'logstash-2014.08.29',
    size: 500,
    body: {
    "query":
        {
            "match": {
                "CallId":-1            }   
        },
    }      
    }).then(function (response) {
      $scope.hits = response.hits.hits;
    });

});

Нам нужно передать данные, т.е. хиты, полученные из QueryController (модуля EsConnector) в MainController (модуля приложения).

Вот модуль приложения:-

var app = angular.module('SnapshotApp',['ngTable']);

app.controller('MainController', function($scope, ngTableParams){
 $scope.query = {} 
 $scope.queryBy = '$'
 var data = ; \\ we want to populate 'data' with 'hits' of QueryController
  $scope.tableParams = new ngTableParams({
        page: 1,            // show first page
        count: 10           // count per page
    }, {
        total: data.length, // length of data
        getData: function($defer, params) {
        $defer.resolve(data.slice((params.page() - 1) * params.count(), params.page() * params.count()));
    }
});

});

Другой подход может заключаться в объединении обоих модулей.

Спасибо.


Ответы:


1

Вы можете сделать это разными способами, но самым чистым (слабо связанным способом) будут события.

Если модули загружаются на одну и ту же страницу, это означает, что они являются как минимум дочерними элементами $rootScope, и вы можете прослушивать и вызывать события в $rootScope для передачи этой информации ($rootScope.$on('myEvent', function (data) {}) - $rootScope.$emit('myEvent', {...}).

Менее чистым решением было бы иметь какие-то диспетчеры данных (сервисы AngularJS), в которых вы могли бы хранить эту информацию и получать ее из нескольких мест. Контроллер приемника затем $наблюдает за ответом этого service.getLogs(), и при изменении у вас будут самые последние данные (это немного ЖЕСТКОЕ с точки зрения производительности, поэтому на самом деле не рекомендуется).

РЕДАКТИРОВАТЬ: И в случае, если вам нужно отобразить определенный блок информации, когда эта информация поступает, вы можете просто пометить модель данных контроллера приемника ("$scope.myModel.logs") с нулевым значением и добавить условие ng-if на блок, который должен показывать эти логи с myModel.logs (при получении события модель данных обновится и блок отобразится)

02.09.2014

2

вы можете проверить один из моих предыдущих постов -

http://stackoverflow.com/questions/25301581/angular-js-newbie-link-in-a-controller-view-that-triggers-another-controller-a/25305951#25305951

Я добавил планк в качестве демонстрации - http://plnkr.co/edit/1dhdPfmB1WwAkYhsz4Hv

02.09.2014
  • Это для двух контроллеров в модуле. Что если мы хотим передавать данные между двумя модулями 02.09.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..