<span>Select color : </span>
<select ng-model="myStyle">
<option value="">none</option>
<option value="{color:red}">Red</option>
<option value="{color:'green'}">Green</option>
</select>
<div ng-style="myStyle">
http://plnkr.co/edit/IOHjEGbuOzD4CjwRqIK9?p=preview
In this plunker, example 1 works perfectly fine but in example 2 select color is not working.
Thanks in advance
AngularJS ng-style DirectiveThe 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.
NgStylelinkAn attribute directive that updates styles for the containing HTML element. Sets one or more style properties, specified as colon-separated key-value pairs. The key is a style name, with an optional .
ng-style does not support ! important . So alternate is to use ng-class instead of ng-style , it will solve the problem. If you want to use ng-style specifically then try to write within html itself- please don't try to write within any function.
The prefix ng stands for "Angular;" all of the built-in directives that ship with Angular use that prefix. Similarly, it is recommended that you do not use the ng prefix on your own directives in order to avoid possible name collisions in future versions of Angular. From the FAQ: Why is this project called "AngularJS"?
This is actually a simple fix, have myStyle
be more of a myColor
type of declaration and on ng-style
have your {{'color':myColor}}
expression:
<select ng-model="myColor">
<option value="">none</option>
<option value="red">Red</option>
<option value="green">Green</option>
</select>
<div ng-style="{'color':myColor}">
<p>Text to change color</p>
</div>
There is no need for a ng-change
function in THIS instance.
Working Example
Edit, explanation:
Value in select option is not an angular directive so myStyle
is being set to literally "{color:'red'}" not the Javascript Object
{"color":"red"}
that Angular is looking for and can parse in ng-style
.
Since the literal value of "{color:'red'}" looks like the object then you will not notice the difference in batarang. But if you run a console.log()
you'll see the difference.
Set your example one, then set example 2 to red and change your clearFilter
function by adding the two logs and look at the output and you'll see what I mean:
$scope.clearFilter = function () {
console.log('myStyle1', $scope.myStyle1);
console.log('myStyle', $scope.myStyle);
$scope.query = '';
$scope.orderProp = '';
$scope.myColor = '';
};
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