Передача данных между контроллерами / директивами - PullRequest
0 голосов
/ 22 мая 2018

Я понимаю, что на этот вопрос был дан ответ, и использование Сервиса - это путь, но я заблудился, как его реализовать.И был бы очень признателен за некоторые рекомендации.

Я пытаюсь добиться этого в рамках Blur-Admin .

Структура выглядит следующим образом:

Вверху находится dashboard.module.js:

    (function () {
  'use strict';

      angular.module('BlurAdmin.pages.dashboard', [])
          .config(routeConfig);

      /** @ngInject */
      function routeConfig($stateProvider) {
        $stateProvider
            .state('dashboard', {
              url: '/dashboard',
              templateUrl: 'app/pages/dashboard/dashboard.html',
              title: 'Dashboard',
              sidebarMeta: {
                icon: 'ion-android-home',
                order: 0,
              },
            });
      }

    })();

А затем dashboard.html определяется элементами.

    <div class="row">
         <dashboard-line-chart></dashboard-line-chart>
    </div>
    <div class="row">
        <dashboard-todo></dashboard-todo>
    </div>
...
...

После этого каждый из этих элементов записывается с использованиемдирективы:

(function () {
    'use strict';

    angular.module('BlurAdmin.pages.dashboard')
        .directive('dashboardLineChart', dashboardLineChart);

    /** @ngInject */
    function dashboardLineChart() {
        return {
            restrict: 'E',
            controller: 'DashboardLineChartCtrl',
            templateUrl: 'app/pages/dashboard/dashboardLineChart/dashboardLineChart.html'
        };
    }
})();

А затем соответствующий контроллер как:

(function () {
  'use strict';

  angular.module('BlurAdmin.pages.dashboard')
      .controller('DashboardLineChartCtrl', DashboardLineChartCtrl);

  /** @ngInject */
  function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil) {...}

Что я хотел бы сделать, это поделиться данными между двумя такими контроллерами. Например,:

function DashboardLineChartCtrl(baConfig, layoutPaths, baUtil, sharedData) {...}

и

function DashboardDataReceiver(baConfig, layoutPaths, baUtil, sharedData) {...}

Если услуги - это путь, где я должен определить услугу?

Любая помощь с благодарностью.

Спасибо.

1 Ответ

0 голосов
/ 22 мая 2018

Например, вы можете определить новую фабрику сервисов с помощью геттера и сеттера, например:

app.factory('sharedData', function () {
    var x = "";
    return {
        'getX': function () { return x; },
        'setX': function (newVal) { x = newVal; }
    }
});

Затем вы должны внедрить свой сервис в свои контроллеры, как вы написали.Наконец, вы можете установить и получить ваши данные через службу в контроллерах, таких как:

sharedData.setX("some string"); // to set the x var into service with "some string"
sharedDate.getX(); // to get the x var content (in this case, "some string") 

Цитирование Angular Js docs:

Службы AngularJS:

Ленивый экземпляр - AngularJS создает экземпляр службы только тогда, когда от него зависит компонент приложения.

Singletons - каждый компонент, зависящий от службы получает ссылку на один экземпляр , сгенерированный фабрикой служб.

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

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