Reputation: 1619
I set a progress in my app
I want to controll The progress in angular's directive
but how can I change data-value
and data-total
in directive's link func?
app.html
<div class="ui indicating small progress" data-value="39" data-total="50" plan-progress>
<div class="bar">
<div class="progress"></div>
</div>
</div>
In this html, I want change data-value
and data-total
I try this:
app.js
todoApp.directive('planProgress', function() {
return {
link: function(scope, elem, attrs) {
attrs.value = 10
attrs.total = 20
elem.progress();
}
};
});
But it doesn't work
so I want to know how to change it in my directive?
Upvotes: 2
Views: 4800
Reputation: 800
Use attrs.$set()
in your link function and recompile the element. Also, don't forget to inject the $compile
service to your directive.
In your html you've added the directive as an attribute but didn't mention it in the restrict value in your directive definition. You need to mention it in directive definition.
See the code bellow:
todoApp.directive('planProgress', function($compile) {
return {
restrict: 'A',
link: function(scope, elem, attrs) {
attrs.$set('value', 10);
attrs.$set('total', 20);
$compile(elem)(scope);
}
};
});
Upvotes: 6
Reputation: 7048
Simply use :
attrs["data-value"] = 10;
attrs["data-total"] = 20;
You don't want to use attrs.data-total = 20
because the -
will force a subtraction.
It's always legal in javascript to use x[keyName]
instead of x.keyName
, and you must use this second notation when keyName is a strange key such as **$^ùjsls*
or data-value
. A more useful case is when the key is a variable.
On last thing : as you do, you will always rewrite the coder's inputs. It may have sense, but it's not very elegant.
Upvotes: 0