将一些数据从一个控制器传输到另一个控制器,或者如何将控制器更改为服务

Transfer some data from one controller to another, or how to change controller to service

本文关键字:控制器 或者 服务 另一个 传输 数据 一个      更新时间:2023-09-26

如何将信息从一个控制器传输到另一个控制器,或者如何从控制器提供服务?我需要获取坐标并将其与其他一些变量一起保存到对象中,如果我将依赖项一个控制器放入另一个控制器中,它不起作用。下面控制器中的大部分信息都是无关紧要的,我只需要纬度和长度,并将其保存在其他控制器中。

.controller('MapCtrl', function($scope, $cordovaGeolocation, $ionicLoading, $ionicPlatform, $cordovaScreenshot, $ionicPopup) {
$ionicPlatform.ready(function() {
    $ionicLoading.show({
        template: '<ion-spinner icon="bubbles"></ion-spinner><br/>Acquiring location!'
    });
    var posOptions = {
        enableHighAccuracy: true,
        timeout: 20000,
        maximumAge: 0
    };
    $cordovaGeolocation.getCurrentPosition(posOptions).then(function (position) {
        var lat  = position.coords.latitude;
        var long = position.coords.longitude;
        $scope.duzina = long;
        $scope.sirina = lat;
        console.log("Širina: " + lat + ''n' + "Dužina: " +  long);
        var myLatlng = new google.maps.LatLng(lat, long);
        var mapOptions = {
            center: myLatlng,
            zoom: 16,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };          
        var map = new google.maps.Map(document.getElementById("map"), mapOptions);          
        $scope.map = map;   
        $ionicLoading.hide();   
        var marker = new google.maps.Marker({
        animation: google.maps.Animation.DROP,
        draggable: true,
        label: 'A',
        position: myLatlng,

        map: map,
        title: 'Trenutna Lokacija'

    });
    var labels = 'BCDEFGHIJKLMNOPQRSTUVWXYZ';
    var labelIndex = 0;
    google.maps.event.addListener(map, 'click', function(event) {
    addMarker(event.latLng, map);
    });
    function addMarker(location, map) {
    var marker = new google.maps.Marker({
    position: location,
    label: labels[labelIndex++ % labels.length],
    map: map
    });   
    }       
    }, function(err) {
        $ionicLoading.hide();
        console.log(err);
    });
}) 

})

您可以创建一个将作为全局对象工作的工厂

myApp.factory('Data', function () {
    return { FirstName: '' };
});
myApp.controller('FirstCtrl', function ($scope, Data) {
    $scope.Data = Data;
});
myApp.controller('SecondCtrl', function ($scope, Data) {
    $scope.Data = Data;
});

或者使用服务,与geter一个seter

//services 
app.service('Shared',function(){
	var data={value :0};
	return{
		getData: function(){
			return data.value;
		},
		setData: function(value){
			data.value = value;
		}
	};
});

你必须使用称为服务或工厂的东西。它们非常相似。(查看了解差异:AngularJS:何时使用服务而不是工厂)您可以调用函数并存储要在整个应用程序中使用的数据。服务的基本设置将是:

var app = angular.module('moduleName');
app.service('serviceName', [function(){
   //Your code here
   //i.e.
   var storedValue;
   function setValue(value){
      storedValue = value;
   }
   function getValue(){
      return storedValue;
   }
}]);

使用该服务的控制器必须注入该服务。

var app = angular.module('moduleName');
app.controller('testCtrl', ['$scope', 'serviceName', function($scope, serviceName){
   //Do something with the stored value
   $scope.someVariable = serviceName.getValue();
   //Set global variable
   serviceName.setValue(someVariable);
}