據我所知,ng-if通過編譯狀態重新創建指令。但是,如果我有影響編譯HTML的指令代碼中的if/else條件,Ang-ng-if不重新編譯指令
如何重新編譯ng-if表達式的指令?因爲在刷新頁面後編譯正在進行。如果我刷新一個頁面並獲得一個編譯狀態,之後(不刷新頁面)更改記錄標誌,那麼在ng-if表達式中,編譯狀態必須是其他,但事實並非如此。
例如:
<directive-one ng-if="logged"></directive-one>
我有這個指令的編譯狀態的2個變種:有車的物品,並沒有(空表)。
如果我刷新頁面並被記錄 - 一切都很好。如果我註銷 - 指令銷燬,如果我再次登錄 - 指令將重新創建與記錄編譯狀態。
但是,如果我刷新頁面,並且在每次登錄或註銷時將被註銷 - 編譯狀態將爲「沒有購物車項目」。因爲在上刷新頁面瞬間編譯狀態是「沒有車中的物品」 ......
指令代碼:http://pastebin.com/KpCHwpcc
您是否在「$$階段」(摘要)之外更改$ scope.logged的值?如果是這樣,請調用$ scope。$ apply();在更改$ scope.logged的值後。 – 2014-09-02 08:20:00
@marvin在我的代碼中它是「$ rootScope.logged」,它從角度服務(AuthService,提供所有登錄/註銷功能)發生變化。 – 2014-09-02 08:21:44
rootScope是所有的父範圍,具有原型繼承,你最終會記錄在rootScope上的一個屬性,但是你的模板綁定到指令的範圍(如果指令不是透明的,我假設在這裏)。 更改發生在$ rootScope.logged上,手錶發生在「someinherititedscope.logged」。更改$ rootScope.logged不會觸發「someinheritedscope.logged」。 2個不同的「記錄」屬性。 – 2014-09-02 08:28:20