在我的應用程序我有一個「地圖」顯示和處理地圖上的東西。 A CtrlMap
控制器顯示地圖並顯示標記。 watchPosMap
監視位置變化。 3rd有一個名爲markerService
的服務,它包含標記的屬性(位置)。更新控制器在服務不更新視圖
結構看起來像那樣。
[CtrlMap] <-> [MarkerService] <- [watchPosMap]
這是服務:
MyMapApp.service('MarkerService', function() {
//set initial marker if no one exists
if (property == undefined)
{
var property = {
latitude: 44.49,
longitude: -108.42};
}
return {
getP: function() {
return property;
},
setP: function(lat,lng) {
consolie.info('Have new marker properties:', lat,lng);
property = {
latitude: lat,
longitude: lng};
}
};
});
在啓動時,CtrlMap
控制器獲取以這種方式默認標記設置:$scope.marker = MarkerService.getP()
。這很好。
如果設備的位置發生變化,watchPosMap
包含一個帶回調的navigator.geolocation.watchPosition
方法,該方法調用服務MarkerService
以設置新的標記參數。
這是我watchPosMap
控制器:
MyMapApp.controller('watchPosMap', ['$scope', 'MarkerService', function($scope) {
$scope.watchMyPositionChangesID =
navigator.geolocation
.watchPosition(function(data) {
mapScope=angular.element(document.getElementById('id_map'))
.scope();
angular.element(document.getElementById('id_map'))
.injector().get("MarkerService")
.setP(data.coords.latitude,data.coords.longitude);
mapScope.$apply();
},
function(e){$scope.errorMsg=e;},
{ timeout: 30000 }
);
}]);
設置標誌屬性的作品,但視圖不更新。有什麼todo來觸發視圖更新?
我還是用一個回調函數:您使用$應用()
EDIT 2之前,它已經到更新$適用於()。我編輯我的問題:請看看'watchPosMap'控制器。 –
服務屬性已更新,但恐怕標記未更新。您需要更新mapScope.marker = angular.element(document.getElementById('id_map')) .injector()。get(「MarkerService」) .getP();在使用$ apply() – Sai
耶!而已! :-)我想知道,如果我的解決方案是結合angularjs和傳統JS的正確方法? –