2014-04-27 92 views
0

我想將一個javascript變量傳遞給控制器​​角度,我不能這樣做,有什麼建議嗎?如何將js變量傳遞給控制器​​angularjs

我的功能:

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; 
+0

obtener_localizacion()的定義是什麼?此功能正在使用,但從未在您顯示的代碼中定義。另外,你必須記住'latitud'和'longitudinal'是隻存在於'coordenadas'函數範圍內的變量。 – user1620696

+1

我建議你看看角度模塊對象上的'factory','service','constant'和'value'方便函數。 –

+0

如果橫座標和縱座標在父範圍內可用,則可以通過繼承訪問它們。如果沒有,角度的方法是創建一個服務,將這些值提供給您的控制器。絕對不要考慮使用$ rootScope – mortsahl

回答

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

使自己依賴全局變量通常不是一個好主意。在Angular世界中,這應該可以使用'factory','service','constant'或'value'提供者來解決。 –

+0

@ robert.westerlund我完全同意,我只是想說明一點。我只是用我親自遵循的方法更新了答案,但花了我更長的時間才寫出來 – Dalorzo

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) 
}]); 
相關問題