Я хочу поделиться данными, хранящимися в переменной от одного контроллера к другому

0

У меня есть данные в одном контроллере, и теперь я хочу поделиться им с другим, но у обоих контроллеров есть разные модули. Я использовал $ rootcope, но это не сработало. Я использовал сервис, он также не работал. ссылка здесь Сервис

Есть ли другой способ сделать. Я потратил одну неделю на это, пожалуйста, помогите мне.

toolbar.controler

(function ()
{
'use strict';

 angular
.module('app.toolbar')
.controller('ToolbarController', ToolbarController);


function ToolbarController($rootScope, $mdSidenav, msNavFoldService, $translate, $mdToast, $location, $localStorage, $http,  $scope)
{
   var vm = this;

   vm.name = $localStorage.name;
   vm.userId = $localStorage._id;

   vm.readNotifications = function(notifId){
      $http({
           url: 'http://192.168.2.8:7200/api/readNotification',
           method: 'POST',
           data: {notificationId: notifId,  userId: vm.userId}
       }).then(function(res){
          vm.rslt = res.data.result1;
          console.log(vm.rslt);
          vm.refresh();
          $location.path('/sharedwishlistdetails');
        }, function(error){
           alert(error.data);
        })
     }
  }
  })();

Данные хранятся здесь в vm.reslt.

toolbar.module.js

(function ()
{
'use strict';

angular
    .module('app.toolbar', [])
    .config(config);

/** @ngInject */
function config($stateProvider, $translatePartialLoaderProvider)
{
    $translatePartialLoaderProvider.addPart('app/toolbar');  
}
})();

Теперь я хочу получить этот результат для этого контроллера.

sharedwishlistdetails.controller.js

(function ()
{
'use strict';

angular
    .module('app.sharedwishlistdetails')
    .controller('SharedWishlistDetailsController', SharedWishlistDetailsController);

/** @ngInject */
//NotificationsController.$inject = ['$http', '$location'];
function SharedWishlistDetailsController($http, $location, $localStorage, $rootScope, $scope)
{
    var vm = this;
    vm.uid = $localStorage._id;

}
})();

shareddata.service.js

(function ()
{
'use strict';

angular
    .module('app.core')
    .factory('shareData', shareDataService);

/** @ngInject */
function shareDataService($resource,$http) {
     var shareData = {};


    return shareData;
}
})();
  • 0
    Вы пробовали угловые услуги / фабрика?
  • 0
    У вас есть два способа сделать это: 1. Используя сервис / фабрику, которая является одиночной. 2. $ rootScope
Показать ещё 4 комментария
Теги:
express

2 ответа

1
Лучший ответ

написать службу в модуле "app.toolbar"

 angular.module('app.toolbar').service('ServiceA', function() {
     this.getValue = function() {
         return this.myValue;
     };

     this.setValue = function(newValue) {
          this.myValue = newValue;
     }
  });

В панели инструментов ControlController добавьте ServiceA и установите данные -

    vm.readNotifications = function(notifId){
    $http({
       url: 'http://192.168.2.8:7200/api/readNotification',
       method: 'POST',
       data: {notificationId: notifId,  userId: vm.userId}
     }).then(function(res){
      vm.rslt = res.data.result1;
      ServiceA.setValue(vm.rslt);
      console.log(vm.rslt);
      vm.refresh();
      $location.path('/sharedwishlistdetails');
     }, function(error){
       alert(error.data);
     })
    }

Теперь напишите еще одну услугу для модуля "app.sharedwishlistdetails" -

   angular.module('app.sharedwishlistdetails',['app.toolbar']).service('ServiceB', function(ServiceA) {
     this.getValue = function() {
     return ServiceA.getValue();
   };

   this.setValue = function() {
     ServiceA.setValue('New value');
   }
   });

Теперь добавьте ServiceB в свой контроллер SharedWishlistDetailsController и получите доступ к данным -

  var sharedData = ServiceB.getValue();
  • 0
    Могу ли я создать два сервиса для этого
  • 0
    здесь есть два разных сервиса в двух разных модулях .. просто для обмена данными между двумя модулями
Показать ещё 4 комментария
0

Как может сбой $ rootScope в вашем коде, было бы полезно, если вы вставляете свой код: неважно, вот пример, который поможет вам:

Все приложения имеют $ rootScope, который является областью, созданной на элементе HTML, который содержит директиву ng-app. RootScope доступен во всем приложении. Если переменная имеет то же имя как в текущей области, так и в корневой программе, приложение использует ту, которая находится в текущей области.

angular.module('myApp', [])
 .run(function($rootScope) {
    $rootScope.test = new Date();
 })

.controller('myCtrl', function($scope, $rootScope) {
   $scope.change = function() {
      $scope.test = new Date();
   };

 $scope.getOrig = function() {
   return $rootScope.test;
 };
})

.controller('myCtrl2', function($scope, $rootScope) {
    $scope.change = function() {
       $scope.test = new Date();
    };

 $scope.changeRs = function() {
    $rootScope.test = new Date();
 };

 $scope.getOrig = function() {
    return $rootScope.test;
 };

});
  • 0
    Но у меня есть два разных модуля
  • 0
    вот что я сказал, было бы полезно, если бы вы могли отредактировать и вставить свой контроллер

Ещё вопросы

Сообщество Overcoder
Наверх
Меню