I'm trying to apply the ng-style attribute on a custom directive tag, kind of like so:
<my-directive ng-style="myStyle"></my-directive>
Inside the controller I have:
$scope.myStyle = {
"background": "red"
}
This doesn't seem to work though. When I inspect the HTML 'MyStyle' does not get rendered. When I apply the same ng-style tag on a regular div it does render properly.
Why doesn't ng-style work on custom directive tags?
Combining NgStyle and NgClass Directives with our knowledge of Angular Template Syntax, we can marry conditional styling with Angular's Property & Event Binding.
ng-style is used to interpolate javascript object into style attribute, not css class. And ng-class directive translates your object into class attribute.
The ng-style directive specifies the style attribute for the HTML element. The value of the ng-style attribute must be an object, or an expression returning an object. The object consists of CSS properties and values, in key value pairs.
The restrict option is typically set to: 'A' - only matches attribute name. 'E' - only matches element name. 'C' - only matches class name.
Your directive likely defines an isolate scope: scope: { ... }
. In that case, all directives defined on that element will use the isolate scope. Therefore, ng-style will look for property myStyle
on the isolate scope, which doesn't exist.
Above, gray lines show $parents, dashed lines show prototypal inheritance.
Scope 004 is your isolate scope. Scope 003 is your controller scope. ng-style will look for myStyle
in scope 004, not find it, then it will follow the dashed line and look for it in Scope, and not find it there either.
Normally you don't want to use directives that create an isolate scope along with other directives on the same element. You have a few options:
scope: true
instead of an isolate scope in your directive. Then when ng-style looks for myStyle
in scope 004 and doesn't find it, it will then follow the dashed line (in the picture below) and find it in the parent scope:ng-style="$parent.myStyle"
in your HTML to access the myStyle
property in the parent scope (i.e., follow the gray line in the first picture).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With