2016-03-22 11 views
0

Etkinlik listelemesini oluşturduktan sonra bir postMessage'e kadar bekler ve IframeHeight'ı günceller, ancak yüksekliği hemen değiştirmez, bazı etkinlikler gerçekleştirdiğimde değişiklik yalnızca ui üzerinde tetiklenir (tıklama gibi, giriş kutusuna yazın vb.).ng stili, eventListner'a göre güncelleştirilmez

$scope.getIframeHeight = function(){ 
    $scope.IframeHeight = "800"; 
    if (!window.addEventListener) { 
     // IE8 support (could also use an addEventListener shim) 
     window.attachEvent('onmessage', $scope.handleMessage); 
    } else { 
     window.addEventListener('message', $scope.handleMessage, false); 
    } 
}; 

$scope.handleMessage = function(event){ 
    var origin = event.origin || event.originalEvent.origin; // For Chrome, the origin property is in the event.originalEvent object. 
    if (origin !== "http://localhost:8060") 
     return; 
    console.log('parent received message!: ',event.data); 
    $scope.IframeHeight = event.data; 
}; 


<iframe class='iframe' id='iframe' scrolling='no' ng-style="{'height': IframeHeight + 'px'}" width="100%" 
     frameborder='0' ng-src="{{trustSrc(data.IframeSRC)}}"> 
</iframe> 

cevap

0

Yani $ scope.IframeHeight yapılan değişiklikler yansıtılmaz neden bilmiyorum, ama bu benim için çalıştı:

$scope.handleMessage = function(event){ 
var origin = event.origin || event.originalEvent.origin; // For Chrome, the origin property is in the event.originalEvent object. 
if (origin !== "http://localhost:8060") 
    return; 
console.log('parent received message!: ',event.data); 
***$scope.$apply(function(){ 
     $scope.IframeHeight = event.data; 
    });*** 
}; 
Burada
+0

Eğer $ kapsam kullanmıştır $ uygulamak, hangi. temel olarak açısal kapsamın sindirim döngüsünü elle çağırmak için eşdeğerdir. Artık açısal değişken dışındaki bazı kapsam verilerini değiştirdiğinizde, bu durumda sindirim döngüsü tetiklenmediğinden değişiklikler yansıtılmayacaktır. Burada sizin durumunuzda, olay dinleyicisini açısal görünürlükte olmayan düz javascript biçiminde eklediniz, böylece kapsam sınaması döngüsünü el ile '$ scope. $ Apply' kullanarak çalıştı. Daha fazla bilgi için açısal kapsam ömrünü ve nasıl çalıştığını gözden geçirebilirsiniz. – Harpreet

+0

@ Harpreet Teşekkürler açılışıyla başladım ve hala zayıf kavramlarla başladım, eğer başlayabileceğim yerleri paylaşırsan harika olur – banes