2015-04-27 22 views
5

ayarlanırken undefined özelliği 'apply' okunamıyor, bir angularjs uygulamasında ngMap kullanıyorum. Yakınlaştırmayı harita öğesinde ayarladığımda bir hatayla karşılaşıyorum. İşte Krom konsolundan hata mesajı yok:ng-map: Zum değeri

TypeError: Cannot read property 'apply' of undefined 
    at Wk.eventFunc (ng-map.js:205) 
    at Object.T.trigger (main.js:18) 
    at kf (main.js:22) 
    at Wk.N.set (main.js:21) 
    at Wk.setZoom (main.js:29) 
    at ng-map.js:1568 
    at angular.js:6837 
    at forEach (angular.js:323) 
    at Object.$get.Attributes.$set (angular.js:6835) 
    at interpolateFnWatchAction (angular.js:8157) 

benim haritası elemanının yakınlaştırma niteliği, bu tetiklediği:

app.controller("mapCtrl", function ($scope, $location, dataContext) { 
    $scope.markers = []; 

    $scope.initCenter = dataContext.center(); 
    $scope.zoom = dataContext.zoom(); 
:

<map center="{{initCenter.lat}}, {{initCenter.lng}}" zoom="{{zoom}}" on-dragend="dragend()" on-zoom_changed="zoomchanged()"> 

benim açısal denetleyiciye bağlı ediliyor

dataContext, uygulamadaki çeşitli durum değişkenlerini gösteren bir hizmettir. Aynı işlev hatasıyla bir işlev üzerinden $ scope.zoom ayarlamayı da denedim.

hata ng-map.js dosyasının hattı 1568 gerçekleşir: Ben merkezini ayarlamak için yürütme ardından neler oluyor aracılığıyla iz çalışırken ve zoom ayarı için

var observeAndSet = function(attrs, attrName, object) { 
    attrs.$observe(attrName, function(val) { 
    if (val) { 
     void 0; 
     var setMethod = parser.camelCase('set-'+attrName); 
     var optionValue = parser.toOptionValue(val, {key: attrName}); 
     void 0; 
     if (object[setMethod]) { //if set method does exist 
     /* if an location is being observed */ 
     if (attrName.match(/center|position/) && 
      typeof optionValue == 'string') { 
      _this.getGeoLocation(optionValue).then(function(latlng) { 
      object[setMethod](latlng); 
      }); 
     } else { 
      // this is the line that causes the problem 
      object[setMethod](optionValue); 
     } 
     } 
    } 
    }); 
}; 

(ayar merkezi kokan bir soruna neden olmak). Merkezin ayarlanması, hat 1568'i yürütür ve mutlu bir şekilde devam eder. (SetZoom fonksiyonu ile)

Ayar yakınlaştırma yürütmek için ng-map.js hat 196 no'lu kodu neden olur:

 var eventFunc = function(attrValue) { 
    var matches = attrValue.match(/([^\(]+)\(([^\)]*)\)/); 
    var funcName = matches[1]; 
    var argsStr = matches[2].replace(/event[ ,]*/,''); //remove string 'event' 

    var args = scope.$eval("["+argsStr+"]"); 
    return function(event) { 
     function index(obj,i) {return obj[i];} 
     var f = funcName.split('.').reduce(index, scope); 
     // this next line causes an exception in google map main.js 
     f.apply(this, [event].concat(args)); 
     scope.$apply(); 
    } 
    } 

Hat 205 google haritanın main.js içindeki hata ile sonuçlanır istisna yol açar dosya.

Bunun nedenine dair bir fikriniz var mı? Ve nasıl çözülür :)?

bu ile oynamak Olası Çözüm

biraz daha ben soruna neden yakınlaştırma düzeyini kendi başına kurmadığını fark ettik. Bu, aslında> < <'dan sonra zoom değiştirilen olayın sonucudur.

var f = funcName.split('.').reduce(index, scope); 

null değerlendirir:

ilk kez yakınlaştırma haritası, çizgi 204 üzerinde ayarlanır. Neden olduğundan emin değilim, çünkü o çizginin ne yaptığını anlamıyorum. Ancak, gelecekteki yakınlaştırma değişiklikleri, f için aynı olmayan bir değere 204 karar veren aynı çizgiye sahiptir.

Yani, geçici bir çözüm olarak, ben çizgileri böyle 205 ve 206 parantez:

if (f != null) { 
     f.apply(this, [event].concat(args)); 
     scope.$apply(); 
    } 

ve hata gitti.

cevap