Sam*_*Sam 11 css angularjs angularjs-scope
我目前正在构建一个可以更改主题的应用程序.在这个例子中,一个主题只包括改变应用程序中几个关键元素的颜色.
所以目前,在所有需要主题颜色的元素上,我给了他们css类has-main-color
.
在控制器中,我从Web服务获取所需的颜色并将其设置为范围$scope.mainColor = color;
.
所有这一切都很好,但我遇到的问题是我找不到一种合适的方法将这种颜色应用到has-main-color
课堂上.
目前,我正在尝试以下方法:
<style>
.has-main-color {
color: {{mainColor}}
}
</style>
Run Code Online (Sandbox Code Playgroud)
你可能猜到,这不是很好.
那么使用AngularJS解决这个问题的最佳方法是什么?
Rya*_*ill 10
查看ngStyle的文档页面.它几乎完全符合你的要求.
<input type="button" value="set" ng-click="myStyle={color:'red'}">
<input type="button" value="clear" ng-click="myStyle={}">
<br/>
<span ng-style="myStyle">Sample Text</span>
<pre>myStyle={{myStyle}}</pre>
Run Code Online (Sandbox Code Playgroud)
我不认为你可以使用a class
来做到这一点,但试试这个
<div ng-app="test-app" ng-controller="MyController" theme-wrapper="{{mainColor}}">
<div class="has-main-color">Top1</div>
<div>Child 1</div>
<div class="has-main-color">Top1</div>
<div>Child 1</div>
<div class="has-main-color">Top1</div>
<div>Child 1</div>
<br />
<input type="button" value="Red" ng-click="color('red')" />
<input type="button" value="Green" ng-click="color('green')" />
<input type="button" value="Blue" ng-click="color('blue')" />
</div>
Run Code Online (Sandbox Code Playgroud)
JS
var app = angular.module('test-app', []);
app.controller('MyController', function($scope, $rootScope, $timeout){
$scope.mainColor = 'grey';
$scope.color = function(color) {
$scope.mainColor = color;
}
});
app.directive('themeWrapper', function(){
var counter = 0, regex = /^theme-wrapper-\d+$/;
return {
restrict: 'A',
link: function(scope, elm, attrs){
attrs.$observe('themeWrapper', function(value){
var className = 'theme-wrapper-' + (counter++);
$('<style>.' + className + ' .has-main-color{color: ' + value + ';}</style>').appendTo('head');
var classes = elm.attr('class').split(' ');
angular.forEach(classes, function(v, i){
if(regex.test(v)) {
elm.removeClass(v);
}
});
elm.addClass(className);
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
演示:小提琴
另一个容易修复
<div ng-app="test-app" ng-controller="MyController">
<div style="color: {{mainColor}}">Top1</div>
<div>Child 1</div>
<div style="color: {{mainColor}}">Top1</div>
<div>Child 1</div>
<div style="color: {{mainColor}}">Top1</div>
<div>Child 1</div>
<br />
<input type="button" value="Red" ng-click="color('red')" />
<input type="button" value="Green" ng-click="color('green')" />
<input type="button" value="Blue" ng-click="color('blue')" />
</div>
Run Code Online (Sandbox Code Playgroud)
JS
var app = angular.module('test-app', []);
app.controller('MyController', function($scope, $rootScope, $timeout){
$scope.mainColor = 'grey';
$scope.color = function(color) {
$scope.mainColor = color;
}
})
Run Code Online (Sandbox Code Playgroud)
演示:小提琴
小智 7
如果有人想用原来的方法,我碰到了同样的问题,今天来,扔在一起的(很小的!)指令的风格,允许内嵌样式表内的角度表达.
https://github.com/deanmcpherson/angular-inline-style
允许
body { background-color: {{bgColor}}; }
Run Code Online (Sandbox Code Playgroud)
将bg颜色附加到适当的范围.
归档时间: |
|
查看次数: |
29687 次 |
最近记录: |