2013-11-20 28 views
2

我試圖在登錄頁面上添加一個類「bodyLogin」,並將其移除到所有其他頁面。 如何以角度方式完成?如何在角度中設置主體類?

+1

在'body'元素上對'html'元素使用'ng-app',然後使用'ng-class =「{'bodyLogin':isUserLoggedIn}」'和'ng-controller =「LoginController」 ? –

+0

Thansk,我的應用程序中沒有名爲isUserLoggedIn的屬性。當然,我的html上有一個ng-app。 –

+0

這是一個例子。基本的想法是在應用程序中包含'body'元素,並像其他元素一樣在其上設置一個類。 –

回答

4

正如Jeremy所建議的,我使用了ng-class,但仍然遇到了LoginPage中$ scope值的自動設置問題以影響正文類。使用Angular的範圍繼承的答案非常簡單。用於實現主體類動態更改的代碼位於此plunkr中。

app.controller('profileController', function($scope) { 
    $scope.setBodyClass('profile'); 
}); 
app.controller('loginController', function($scope) { 
    $scope.setBodyClass('login'); 
}); 

//the controller can use either the bodyService or the app.value bodyClass 
//app.controller('bodyController', function($scope, bodyService) { 
app.controller('bodyController', function($scope, bodyClass) { 
    $scope.setBodyClass = function(_bodyCLass) { 
    $scope.bodyClass = _bodyCLass; 
    $scope.inLoginPage = ($scope.bodyClass === 'login'); 
    }; 
}); 

更新:我改變了普朗克更清晰。普拉克現在顯示你可以使用服務或價值。

+0

我完全和你的例子混淆了。看,你沒有'bodyService'注入'bodyController','setBodyClass'方法如何在其範圍內工作?另外,正如你爲'app'模塊定義了一個值'bodyClass','bodyService'工廠中的局部變量'bodyClass'有什麼用? – nightire

+0

夥計,你的榜樣誤導我們! 'bodyService'完全沒用,甚至根本不工作,你可以刪除整個工廠來證明。這段代碼讓我一遍又一遍地思考......狗屎! – nightire

+0

@nightire,感謝您的評論,我很抱歉,您被這篇文章誤導了。我已經更新了該文章和plunkr,並進行了測試,看看它是否仍然有效。讓我知道它是否適合你。 歡呼聲 –

3

您可以使用ng-class指令,該指令允許您根據angularjs表達式動態定義類;你只要把這個指令您body標籤內,然後更新您的模型來反映頁面的ID

ng-class

的更多信息:http://docs.angularjs.org/api/ng.directive:ngClass

編輯:要注意語法,因爲它在文檔中寫的;最簡單的方法是使用數組語法ng-class="{{ [ myAttribute ] }}"

+0

謝謝領導傑里米。 我仍然遇到一些自動更新/雙向綁定的問題。我在這裏建立了一個蹲點[鏈接](http://plnkr.co/edit/7YCPNERm1PeUXk8AwUQC)。我試圖弄清楚我將如何改變bodyService來影響bodyClass。 –