2016-03-22 12 views
0

eventlistnerを作成すると、postMessageまで待ってからIframeHeightを更新しますが、直ちに高さが変更されることはありません。 (クリックして、入力ボックスに入力するなど)。ng-styleはeventListnerに基づいて更新されません

$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> 

答えて

0

だから、$ scope.IframeHeightに加えられた変更が反映されない理由を私は知らないが、これは私の仕事:

$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; 
    });*** 
}; 
ここ
+0

あなたは$スコープを利用した$適用、です。基本的には、角度範囲のダイジェストサイクルを手動で呼び出すことと同等です。角度変数の外でスコープデータを変更すると、ダイジェストサイクルがトリガされないため、変更は反映されません。ここでは、イベントリスナを角度の可視性にない単純なjavascriptの方法でアタッチしたので、 '$ scope。$ apply'を使ってスコープダイジェストサイクルを手動で呼び出すことができました。詳細については、角度範囲のライフサイクルとその実行方法を調べることができます – Harpreet

+0

@Harpreetおかげさまで私はちょっと角度をつけてコンセプトを弱め始めました。開始できる場所を共有することができれば素晴らしいでしょう – banes

関連する問題