1
我有一個服務,我打電話$compile
編譯我的模板。 JS中的函數一個接一個地執行。但是,爲了得到我的最終HTML,我必須把html()
放在超時回調中。否則,我只能得到我的模板{{ placeholders }}
。問題是爲什麼我需要在這裏使用超時?這裏是我的代碼:是angular的編譯函數異步?
var newScope = $rootScope.$new(true);
angular.extend(newScope, data);
var compiled = $compile(template);
var linked = compiled(newScope);
$timeout(function() {
def.resolve(linked.html());
});
這是包裹在一個綁定的HTML事件?像「點擊」?你可能需要'$ scope。$ apply()'。 '$ timeout'做一個'$ apply'作爲下面的副作用,所以這可能是它工作的原因。 – 2014-12-03 18:06:27
此方法在角度事件上稱爲$。但我的問題是爲什麼我需要在$ timeout中包裝linked.HTML()'或者調用$ apply?其實,這不是因爲$申請。我也可以用0延遲設置vanilla'setTimeout',並用編譯好的模板解析promise。它似乎與JS內部函數調用隊列有關。我認爲在js函數中一個接一個地執行。無論需要多少時間來執行一個函數。但是這個案例表明它不是。 – 2014-12-03 19:46:24