如何将js变量传递给控制器​​angularjs

时间:2014-04-27 23:17:59

标签: javascript angularjs

我试图将javascript变量传递给控制器​​角度,我不能这样做,有什么建议吗?

我的功能:

function coordenadas(position) {
            var latitud = position.coords.latitude;
            var longitud = position.coords.longitude;
        }

我的控制器:

'use strict';

/* Controllers */

var moduloMapa = angular.module('BeLiga.indexMapControllers', ['google-maps']);

moduloMapa.controller('controlIndexMap', function($scope) {
    obtener_localizacion();
    $scope.center = {
        latitude: 45,
        longitude: -73
    };

    $scope.zoom = 8;
});

我需要获得函数" coordenadas"的这两个变量的值:

 var latitud;
 var longitud;

2 个答案:

答案 0 :(得分:1)

如果页面上存在变量,只要它们在正确的范围内定义,就应该能够毫无问题地使用它们。

意味着你应该做这样的事情:

var latitud =0;
var longitud =0;

function coordenadas(position) {
   latitud = position.coords.latitude;
   longitud = position.coords.longitude;
}

在这种情况下,我可能会做的是创建一个回调函数:

function coordenadas(position, callback) {
  var latitud = position.coords.latitude;
  var longitud = position.coords.longitude;

  callback(latitud,longitud);
}

在控制器中:

moduloMapa.controller('controlIndexMap', function($scope) {
    var somePositionObject = //not specified on the demo code.

    //invoking method with callback function to get both values.    
    coordenadas(somePositionObject,function(latitude, longitude){
      $scope.center = {
        latitude: latitude,
        longitude: longitude
      };
    });

    $scope.zoom = 8;
});

答案 1 :(得分:1)

您可以将coordenadas函数放在service中。在某些方面,服务就像“全局”函数的模块化包装器一样,无需使用全局函数(您可以将服务注入到您想要的任何控制器中。)

例如:

moduloMapa.service('coordenadas', function() {
    return function(position) {
        return {
            latitude: position.coords.latitude,
            longitude: position.coords.longitude
        }
    }
});

moduloMapa.controller('controlIndexMap',['coordenadas', function(coordenadas) {
    var latitude = coordenadas(/* whatever position */).latitude;

    // Now you've injected the 'coordenadas' service
    // You can dynamically return a latitude/longitude (in the controller's -- not global -- scope)
}]);