У меня есть данные в одном контроллере, и теперь я хочу поделиться им с другим, но у обоих контроллеров есть разные модули. Я использовал $ rootcope, но это не сработало. Я использовал сервис, он также не работал. ссылка здесь Сервис
Есть ли другой способ сделать. Я потратил одну неделю на это, пожалуйста, помогите мне.
(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
.
(function ()
{
'use strict';
angular
.module('app.toolbar', [])
.config(config);
/** @ngInject */
function config($stateProvider, $translatePartialLoaderProvider)
{
$translatePartialLoaderProvider.addPart('app/toolbar');
}
})();
Теперь я хочу получить этот результат для этого контроллера.
(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;
}
})();
(function ()
{
'use strict';
angular
.module('app.core')
.factory('shareData', shareDataService);
/** @ngInject */
function shareDataService($resource,$http) {
var shareData = {};
return shareData;
}
})();
написать службу в модуле "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();
Как может сбой $ 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;
};
});