【问题标题】:Transfer some data from one controller to another, or how to change controller to service将一些数据从一个控制器传输到另一个控制器,或者如何将控制器更改为服务
【发布时间】:2016-03-15 09:08:28
【问题描述】:

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

.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);
    });
}) 

})

【问题讨论】:

  • 控制器之间有什么关系?如果它们没有相互嵌套,那么您需要一些临时存储,例如 localstorage,或者通过 API 保存到后端,然后通过 API 调用检索(但保存到 localstorage 更好)。
  • 有趣,我尝试使用 localStorage 但它不起作用,我会使用服务来完成

标签: javascript angularjs input controller ionic-framework


【解决方案1】:

你可以创建一个工厂来作为一个全局对象

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;
		}
	};
});

【讨论】:

    【解决方案2】:

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

    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);
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多