nataila
nataila

Reputation: 1619

angularJS how to change attrs in directive's link

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

Answers (2)

Md. Mahbubul Haque
Md. Mahbubul Haque

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

Nicolas Zozol
Nicolas Zozol

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

Related Questions