您可以使用链接功能的elem.css()
和attr
参数让你达到了,没必要使用ngStyle
指令基础上,要包括在css
性能。
例如
.directive('bgImage', function() {
return function(scope, elem, attr) {
elem.css('background-image', 'url(' + attr.bgImage + ')');
};
});
UPDATE:
考虑到你上面的例子中也可以使用ngStyle
并有$编译服务与ngStyle
指令一起重新编译元素:
例如
.directive('bgImage', function($compile) {
return function(scope, elem, attr) {
elem.attr('ng-style', "{'background-image': url(" + attr.bgImage + ")}");
elem.removeAttr('bg-image');
$compile(elem)(scope);
};
});
在编译之前删除bgImage
指令可防止无限编译过程。
新更新:
HTML
<button bg-image="my-default-image.png" bg-image-hover="my-hover-image.png"></button>
JAVASCRIPT
.directive('bgImage', function() {
return function(scope, elem, attr) {
elem.css('background-image', 'url(' + attr.bgImage + ')');
elem.on('mouseover', function() {
elem.css('background-image', 'url(' + attr.bgImageHover + ')');
});
elem.on('mouseout', function() {
elem.css('background-image', 'url(' + attr.bgImage + ')');
});
scope.$on('$destroy', function() {
elem.unbind('mouseover');
elem.unbind('mouseout');
});
};
});
当你发现你可以做到这一点,而不在元素本身追加新的指令,你仍然可以以DRY方式实现添加行为。
注意:如果你创建一个指令中的事件,一定要清理它时,指令的范围是通过解除绑定它破坏了$destroy
事件
谢谢,+1,但我想申请*指令*因为不是所有的指令都可以应用相同和简单的。 – Kuraga
总之,你不想在指令本身附加新的指令? – ryeballar
是的。但是一个重要的时刻:类型'A'的指令(比如'ng-style'),但不能*我只能在模板中包含一个指令(比如'ng-form')。 – Kuraga