我想直接根据<body class="">
成员设置$scope.bodyClass
属性值,但这不起作用:
<!DOCTYPE html>
<html lang="en" ng-app="myApp">
<head>
<script src="js/angular.min.js"></script>
<script src="js/application.js"></script>
<script src="js/controllers.js"></script>
</head>
<body ng-class="{{bodyClass}}">
<div ng-view></div>
<p>{{foo}}</p>
</body>
</html>
var myControllers = angular.module("myControllers", []);
myControllers.controller("HomeController", ["$scope", function ($scope) {
$scope.foo = "bar";
$scope.bodyClass = "home";
}]);
var applicationModule = angular.module("myApp", ["ngRoute", "LocalStorageModule", "myControllers"]);
applicationModule.config(
["$routeProvider", function ($routeProvider) {
$routeProvider.
when("/home", {
templateUrl: "views/home.html",
controller: "HomeController"
});
}]
);
当我运行它时,Chrome浏览器的DOM检查器会报告class=""
属性未设置为任何内容。
答案 0 :(得分:1)
您在控制器中设置的值仅在其中作用域的DOM中可用。正文标记在该范围之外。您可以将$ rootScope注入控制器并在其上设置bodyClass以使其正常工作。
控制器的范围取决于放置ng视图的位置。
答案 1 :(得分:1)
我在不久前发布了SO Question的答案,可能有助于您解决此问题。
基本上,您创建一个提供程序,在应用程序运行时从$ routeProvider获取数据并更改当前路由,您将附加数据附加到when()
并在run()
上获取并让提供程序更改它根据指定的路线。
此外,您可以通过注入提供程序关联的服务在控制器中使用它。这是实现这一目标的一个小例子。
controller('HomeController', ['$scope', 'RouteData', function($scope, RouteData) {
RouteData.set('bodyClass', 'Home');
}]);
你的 config()看起来应该是这样的。
config(function($routeProvider, RouteData) {
RouteData.applyConfig({
bodyClass: 'Home'
});
RouteData.hookToRootScope(true);
$routeProvider.when('/home', {
RouteData: {bodyClass: 'Home'},
templateUrl: 'home.html',
controller: 'HomeController'
});
});
<强> HTML 强>
<body ng-class="RouteData.get('bodyClass')">
更新: 对不起,我提供了错误的SO问题链接.. here it is ..