2014-08-31 72 views
3

所以我有2個指令,讓我們調用它們的輸入和自動完成。父指令通過編譯,前和後的子指令templateUrl

auto complete指令使用templateUrl加載遠程模板,它包含一個輸入。 auto complete應該可以放在input指令中。現在我遇到的問題是,在編譯auto complete之前,輸入指令正在被編譯並執行鏈接函數。這是一個問題,因爲輸入指令假定在運行鏈接函數時有一個輸入元素可用,並且由於鏈接函數在auto complete指令編譯並注入DOM之前正在運行,輸入指令未找到輸入元素。

我不得不相信編譯,前後鏈接函數的順序不會因遠程加載模板而維持,因爲它的異步特性。

這裏是不使用任何模板plunker:

http://plnkr.co/edit/gEk3GjuASxrV1L6Kp6Dq?p=preview

的編譯,前期和後期的邏輯函數是我所期望的順序。然後我嘗試同樣的事情,但我有logCompile2指令有template屬性:

http://plnkr.co/edit/EOYgf5z82mesixcb1LXU?p=preview

再次,編譯,前期和後期的邏輯函數是我所期望的順序。最後,我們有logCompile2指令與templateUrl正確,遠程加載模板:

http://plnkr.co/edit/A55sw6YRCuhvWUi6zQ4Q?p=preview

現在事情沒有按預期工作,根父指令正在經歷的所有之前的任何步驟是步驟爲兒童指令執行。我在這個版本和其他2之間唯一的區別在於模板是遠程加載的(並且我假設是以異步的方式)。

有沒有辦法讓父指令等待所有子指令在運行父級鏈接函數之前編譯和注入DOM,而無需內聯模板?

+0

下面是關於鏈路和控制器功能定時底漆。儘管如此,http://www.bennadel.com/blog/2603-directive-controller-and-link-timing-in-angularjs.htm不包括編譯。 即使它只模擬遠程調用,一個調度器也會非常有用。如果因爲加載模板文件的延遲而導致100%,我會感到驚訝 - 我經常在遠程服務器上的devmode中測試我的代碼,而無需使用模板內聯(使livereload更具響應性)。 – pfooti 2014-08-31 23:35:47

+0

@pfooti增加了應該解決問題的重磅炸彈。我同意我不認爲它與延遲有關,但我認爲它與遠程加載模板的異步性質有關。 – ryanzec 2014-09-01 13:58:15

+0

在github上創建了一個問題:https://github.com/angular/angular.js/issues/8877 – ryanzec 2014-09-01 16:50:42

回答