2016-02-24 53 views
0

爲什麼這會一直重複?在chrome中出現「RangeError:Maximum Call Stack Size exceeded」錯誤。

app.controller('my_cont',function($scope,$compile){ 
    container.html('<todo></todo>') 
    $compile(container)($scope); 
}) 
app.directive('todo',function($compile){ 
    return{ 
      template:'<ul><li>Blah</li><li>Blah</li></ul>', 
    } 
}) 
+0

什麼是'容器'?你爲什麼要在控制器中進行DOM操作?你能否用實際顯示錯誤的代碼更新你的問題? –

+0

如果容器是其上具有my_cont控制器的元素,那麼您將重新編譯該元素並重新實例化該控制器(並重新設置html爲待辦事項並重新編譯整個事物......),我懷疑它是源代碼的溢出。如果您需要這樣做,請創建一個待辦事項元素,將其自行編譯,然後將其添加到HTML中。首先不要添加到HTML。 –

回答

0

我已經遇到過這個問題,雖然不是以同樣的方式在這裏。在你的控制器初始化時調用$ compile會編譯指令,因爲指令初始化一個控制器並重新編譯,你將擁有基本無限的嵌套控制器。只需將您的元素指令放入HTML中,然後讓Angular爲您編譯它。

+0

我在這裏假設todo指令的控制器是my_cont控制器。 –

+0

這是不可能的。我需要動態插入內容並進行渲染。這是編譯是正確的? –

+0

是的,編譯步驟編譯指令並將它們轉換爲您指定的HTML。你很少需要直接調用compile,而且我只需要爲遞歸HTML做這件事,就像列表中的列表一樣。如果讓Angular爲你編譯它,我建議你在HTML中編譯指令,並用ng-show/hide或ng來顯示它。 –