对于唯一的可视化编辑器,我正在尝试创建一个编写CSS样式的新指令。当单击一个复选框使background-color属性透明时,我一直试图让指令更新。
这是我的(非工作)指令:
myApp.directive('customstyle', function () {
return {
restrict: 'E',
link: function (scope, element, attrs) {
var bgColor;
scope.$watch(attrs.myTransparent, function (value) {
if (value) {
bgColor = 'transparent';
} else {
bgColor = attrs.myBgcolor;
}
updateStyle();
}, true);
function updateStyle() {
var htmlText = '<style>.' + attrs.myClass + '{';
htmlText += 'background-color: ' + bgColor + ';';
htmlText += "}</style>";
element.replaceWith(htmlText);
}
updateStyle();
}
}
});
和html元素:
<customstyle my-class="examplediv" my-transparent="settings.Window.Transparent" my-bgcolor="settings.Window.BackgroundColor"></customstyle>
以下是情况的问题:http://jsfiddle.net/psinke/jYQc6/
非常感谢任何帮助。
答案 0 :(得分:17)
尝试直接在要更改的元素上使用该指令,这样做更容易维护。
HTML:
<div class="examplediv customstyle"
my-transparent="settings.Window.Transparent"
my-bgcolor="{{settings.Window.BackgroundColor}}">
</div>
注意:使用{{settings.Window.BackgroundColor}}
传递属性的值而不是String。
指令:
myApp.directive('customstyle', function () {
return {
restrict: 'AC',
link: function (scope, element, attrs) {
scope.$watch(attrs.myTransparent, function (value) {
element.css('background-color', (value ? 'transparent' : attrs.myBgcolor));
});
}
}
});
注意:使用element.css()
直接在元素上更改CSS属性。
jsFiddler :http://jsfiddle.net/jYQc6/8/
答案 1 :(得分:1)
我遇到了同样的问题,并使用bmleite的解决方案解决了它。我有一个自定义元素,其自定义属性与上面的自定义属性非常相似,并且更改了应用于常规DIV的指令,而不是自定义属性为我修复了它。
在我的解决方案中,我在元素修改后也有以下代码行:
$compile(element.contents())(scope);
记得在指令函数声明中注入$ compile服务:
myApp.directive('directiveName', function ($compile) { ...
谢谢你的精彩帖子!