我想一個指令從控制器添加到我的網頁。
您應該能夠在$ scope中定義一個布爾變量來決定是否顯示登錄。
$scope.loginShouldBeShowing = false;
$scope.showLogin = function() {
$scope.loginShouldBeShowing = true;
};
如果這個變量設置爲true
<login ng-if="loginShouldBeShowing"></login>
您可以在修改的jsfiddle在看到這個然後,您可以在模板中使用,與ngIf指令,只顯示登錄模板
http://jsfiddle.net/jK9zr/2/
我還添加了一個按鈕,這樣你就可以在該link
函數只AFTE後運行控制檯中看到R您按下按鈕,loginShouldBeShowing
被設置爲true
我可以找到很多的網絡上類似的例子,當指令標籤是在加載時頁面上,並能得到那些做工精細,所以這是什麼使它認爲它與$編譯方法有關
從我的理解和以前的使用,通常在模板中包含指令僅用於某些情況下,即當某些$ scope變量是設置爲某些值,使用ngIf或ngSwitch或ngShow。我認爲,如果您試圖編譯模板的每一部分,可能會或可能不會在任何時候使用,那麼事情很快就會變得非常混亂。雖然我只在AngularJS相對初學者,所以到目前爲止,我只過使用$評估定製指令屬性時,編譯,所以
<login after-login="doThisFunction()"></login>
然後
可能需要使用$編譯在調用doThisFunction()
適當的點。
作爲一個小邊欄,你變量的名稱有點告知控制器,您關注的是正在發生的事情的模板。在控制器中保持某種模型/業務「狀態」更爲常見,然後在模板中顯示相應的內容。所以,你可能會在控制器:
$scope.loginState = 'loggedOut';
然後在模板:
<login ng-if="loginState == 'loggedOut'"></login>
編輯:我也注意到,在登錄指令是在不同的模塊,應用程序的其餘部分。我懷疑這導致了問題,所以我在JSFiddle中修改了這個方面,所以只有一個模塊。
編輯:我覺得我很困惑$之間編譯和上面$解析,所以我想覈對一下我使用$編譯文檔/其他來源。
IM也很肯定我不應該從我的控制器中添加DOM元素,如此讚賞過的任何建議! – alfonsob
如果你還沒有already..read此:** [我如何「認爲AngularJS」如果我有一個jQuery的背景(http://stackoverflow.com/questions/14994391/how-do-i-認爲,在-angularjs-IF-I-有-A-jQuery的背景)** – charlietfl
輝煌charlietfl,正是我所需要的! – alfonsob