2014-09-02 115 views
0

據我所知,ng-if通過編譯狀態重新創建指令。但是,如果我有影響編譯HTML的指令代碼中的if/else條件,Ang-ng-if不重新編譯指令

如何重新編譯ng-if表達式的指令?因爲在刷新頁面後編譯正在進行。如果我刷新一個頁面並獲得一個編譯狀態,之後(不刷新頁面)更改記錄標誌,那麼在ng-if表達式中,編譯狀態必須是其他,但事實並非如此。

例如:

<directive-one ng-if="logged"></directive-one> 

我有這個指令的編譯狀態的2個變種:有車的物品,並沒有(空表)。

如果我刷新頁面並被記錄 - 一切都很好。如果我註銷 - 指令銷燬,如果我再次登錄 - 指令將重新創建與記錄編譯狀態。

但是,如果我刷新頁面,並且在每次登錄或註銷時將被註銷 - 編譯狀態將爲「沒有購物車項目」。因爲在上刷新頁面瞬間編譯狀態是「沒有車中的物品」 ......

指令代碼:http://pastebin.com/KpCHwpcc

+1

您是否在「$$階段」(摘要)之外更改$ scope.logged的值?如果是這樣,請調用$ scope。$ apply();在更改$ scope.logged的值後。 – 2014-09-02 08:20:00

+0

@marvin在我的代碼中它是「$ rootScope.logged」,它從角度服務(AuthService,提供所有登錄/註銷功能)發生變化。 – 2014-09-02 08:21:44

+0

rootScope是所有的父範圍,具有原型繼承,你最終會記錄在rootScope上的一個屬性,但是你的模板綁定到指令的範圍(如果指令不是透明的,我假設在這裏)。 更改發生在$ rootScope.logged上,手錶發生在「someinherititedscope.logged」。更改$ rootScope.logged不會觸發「someinheritedscope.logged」。 2個不同的「記錄」屬性。 – 2014-09-02 08:28:20

回答

0

有同樣的問題。

將指令從元素移動到屬性固定了這一點。

<directive-one ng-if="logged"></directive-one> 

重構這樣:

<div data-directive-one ng-if="logged"></div> 

(不要忘記更改要求指令形式E至A)

的指令應該在那裏工作正確的元素有關的優先級。

+0

不,它不起作用:( 在我登錄後刷新頁面後仍然不動,編譯後的狀態保持「登錄後沒有購物車項目」 – 2014-09-02 08:40:51

+0

我認爲問題是,指令代碼不會重新編譯鏈接方法應該一直重新編譯,也許你把數據取出的東西移動到鏈接方法中 – 2014-09-02 08:46:58

+0

太棒了!解決了.Thx – 2014-09-02 11:40:39