我的问题是我有多个页面,每个页面需要不同的正文类。
因此,如果不使用$rootScope
,我如何根据显示的页面在DOM中更改此内容?
<body class="class-that-needs-changing">
答案 0 :(得分:1)
让我们使用这样的指令:
.directive('bodyClasses', function() {
return {
restrict: 'A',
link: function(scope, element, attrs) {
var classes;
scope.$watch(function(scope) {
return scope.$eval(attrs.bodyClasses);
}, function(value) {
classes = value;
angular.element(document.body).addClass(value);
});
// Remove body class when scope or directive destroyed.
scope.$on('$destroy', function() {
angular.element(document.body).removeClass(classes);
});
}
};
});
现在,在单独的HTML页面中使用此指令,如下所示:
<!-- remember, use single quote for string since we are evaluating it -->
<div body-classes="'new-class another-class'"></div>
或
<span body-classes="'foo' {{someScopeVariable}}"></div>
当加载特定页面或视图时,这些类将添加到body
标记中。通过这种方式,您可以在每个单独的页面中将您的班级分开,并且您的主body
标记不会混乱。
答案 1 :(得分:0)
您有两个主要选择:
答案 2 :(得分:0)
根据您的发布,我建议更改angular.Module.run
中的正文类,此方法将注册一个任务,该任务将在角度应用程序完全加载时执行:
angular.module('myApp', [])
.run(['$scope', function($scope){
var className = 'different-classes';
angular.element(document.body).addClass(className);
}]);
由于您的多个页面是完全不同的html文件,因此每次从一个页面导航到另一个页面后,角度应用程序都会重新加载
答案 3 :(得分:0)
您可以在app.js上配置它
// app.js
angular.module('myApp', [
'ngCookies',
'ngResource',
'ngSanitize',
'ngRoute'
])
.constant('config', {
user1:'class1',
user2:'class2'
})
// main.js
angular.module('myApp').controller('MainCtrl', [ '$scope', 'config',
function ($scope, config) {
console.log(config.user1);
}
]);
答案 4 :(得分:0)
而不是使用$rootScope
你可以让监听器来检测视图更改意味着$routeChangeSuccess
(我猜你用$routeProvider
来改变视图)你应该有一个父控制器,您可以在其中创建侦听器
像:
var app = angular.module('myApp', ['ngRoute']);
app.controller('parentController', function($scope, $route) {
$scope.$on('$routeChangeSuccess', function(newValue, oldValue) {
if ( newValue !== oldValue ) {
$scope.bodyClass = $route.current.viewClass;
}
});
});
并且您的提供商应该:
app.config(function($routeProvider) {
$routeProvider.when('/list',{
controller: 'listController',
templateUrl: '/list.html',
viewClass: 'class1'
}).when('/details', {
controller: 'detailsController',
templateUrl: '/details.html',
viewClass: 'class2'
}).otherwise({
redirectTo: '/list'
});
});
所以你的HTML应该是这样的:
<body ng-controller="parentController" class="commonClasses" ng-class="bodyClass ">
可以访问PLUNKER DEMO