Невозможно получить данные на другом контроллере, используя общий общий сервис

Я создаю общую службу под названием Popup Service, чтобы я мог обмениваться данными между двумя контроллерами, т.е. BankController и CreateBankController.

Я могу установить объект, которым мне нужно поделиться в PopupService. PopupService вызывается в BankController (при нажатии на ссылку "Изменить" в строке данных), чтобы установить объект для совместного использования.

Затем CreateBankController вызывается всплывающей формой, но в CreateBankcontroller я не могу получить доступ к общим данным из PopupService, я получаю сообщение об ошибке, что переменная objectToEdit не определена.

  1. Подскажите, пожалуйста, как я могу заставить PopupService обмениваться данными между двумя контроллерами?
  2. Могут ли данные в общей службе Popup оказаться переопределенными конкурирующими действиями пользователя и показать устаревшие данные

РАБОЧИЙ ПЛАНКЕР https://plnkr.co/edit/y8dZNU?p=preview

Получение данных в CreateBankController

CreateBankController.$inject = ['PopupService'];

function CreateBankController(PopupService) {
var vm = this;

var data = {
  bankName: "",
  bankAddress: "",
};

 debugger;

if (PopupService.getObjectToEdit() !== null) {
  data = PopupService.getObjectToEdit();
}

УСТАНОВКА ОБЩИХ ДАННЫХ В BankController

  $scope.bankGrid = {
  dataSource: queryResult,
  columns: [{
    dataField: 'orderID',
    caption: 'Order ID'
  }, {
    width: 50,
    alignment: 'center',
    caption: 'Edit',
    cellTemplate: function(container, options) {
      $('<a/>').addClass('dx-link')
        .text('Edit')
        .on('dxclick', function() {
            PopupService.addObjecToEdit(options.data);
              $scope.showPopup = true;
        })
        .appendTo(container);
    }

служба общих данных - POPUP SERVICE

(function () {
'use strict';

angular
    .module('myApp')
    .factory('PopupService', PopupService);

function PopupService() {
    var popupInstance = {};
    var objectToEdit = {};

    var service = {
        addObjecToEdit : addObjecToEdit,
        getObjectToEdit: getObjectToEdit,
        showPopup: showPopup,
        hidePopup: hidePopup

    };
    return service;

    //Functions
    function addObjecToEdit(pObjectToEdit){
        objectToEdit = pObjectToEdit;
    }

    function getObjectToEdit() {
        return objecTtoEdit;
    }

    function showPopup(){
        popupInstance.showPopup();
    }

    function hidePopup(){
        popupInstance.hidePopup();
    }
}
}());

1 ответ

Решение

У вас есть опечатка в сервисе:

function getObjectToEdit() {
        return objecTtoEdit;
}

изменить на:

function getObjectToEdit() {
        return objectToEdit;
}
Другие вопросы по тегам