2015-10-05 41 views
3

我有一個基本上由

var onclick = function() { 
    $window.open(url, "_blank", 'location=yes'); 
} 

在Firefox的功能,不過,當我點擊我得到:

Error: [$rootScope:inprog] $apply already in progress

這是一個相當普遍的問題,通常通過把整個東西放在一個$timeout()塊中解決。

除了從超時時間調用$window.open()激活彈出窗口阻止程序!我需要一些方法來完成同樣的事情,而不必退出線程。

+0

你打電話給'onclick'怎麼樣。我猜它的名字是一個點擊處理程序。可能是因爲你很快爲這個問題鍵入了它,但是沒有'$ scope',所以我假設angular不處理點擊?那麼你是否在調用這個函數之前手動調用'$ apply'? – ste2425

+0

這通常發生在你開始混合角度碼和非角度碼時。 http://plnkr.co/edit/tyj1K0DMryBejH0upDPU?p=preview這可以幫助你瞭解何時應該調用$ apply。 –

+0

僅供參考,這似乎是由於Firefox中的一個已知問題。詳情在這裏:https://github.com/angular/angular.js/issues/10083/ https://bugzilla.mozilla.org/show_bug.cgi?id=1127236 –

回答

-1

使用

window.open() 

刪除$窗口

使用像:

window.open(url,target,"status=no,height="100px",width="100px",resizable=yes,toolbar=yes,menubar=no,scrollbars=no); 

的Javascript窗口

+0

這將引入一個全局變量否定從angulars的任何好處注射系統,使測試非常有趣。 – ste2425

+0

其實它不起作用。有同樣的問題,如使用$ window –

0

嘗試:

var onclick = function() { 
    if($scope.$root.$$phase) { 
    $timeout(function() { 
     $window.open(url, "_blank", 'location=yes'); 
    },0,false); 
    } else { 
    $window.open(url, "_blank", 'location=yes'); 
    } 
} 

但是,您有$ window.open參數的重複性。你可以讓你的代碼更好地做:

var onclick = function() { 
    var windowArgs = [url, "_blank", 'location=yes']; 

    if($scope.$root.$$phase) { 
    $timeout(function() { 
     $window.open.apply($window,windowArgs); 
    },0,false); 
    } else { 
    $window.open.apply($window,windowArgs); 
    } 
} 
+0

$ timeout(function(){$ window.open(...)},0,false); - 這對我有用。謝謝。 –