Deepsy
Deepsy

Reputation: 3810

Custom directive value with bindonce in Angularjs

I got a ng-repeat with thousands of item in it, so I decided to tryout bindonce to reduce the number of watches. But I couldn't figure out how to use it properly. So now I got the following code:

<div ng-repeat="card in cards">  
    <div class="item-box" draggable="{{card.category}}" itemId="{{card._id}}">
       <img ng-src="{{card.image}}" width="100%" height="100%">
    </div>
</div>

As I read in the bindonce doc, I should add the directive and use the bo-* directives, so I fugured out this:

 <div ng-repeat="card in cards" bindonce>  
    <div class="item-box" draggable="{{card.category}}" itemId="{{card._id}}">
       <img bo-src="card.image" width="100%" height="100%">
    </div>
</div>

So my question is how I can also use {{card.category}} and {{card._id}} using bind-once?

bo-attr bo-attr-draggable="card.category" bo-attr-itemId="card._id"

seems not to work, I'm not getting any errors, just nothing happens.

Result looks like

<div class="item-box ng-scope" bo-attr="" bo-attr-draggable="card.category" bo-attr-itemid="card._id" draggable="Pants" itemid="m--Pi">

Upvotes: 2

Views: 1554

Answers (1)

hassassin
hassassin

Reputation: 5054

bo-attr doesn't actually seem like what you want to be doing, you just want a directive to evaluate and bind data without creating any watches. I made a plnkr that I think is what you want: http://plnkr.co/edit/sFPAjlRCkDuXU5UiM1U1?p=preview

app.controller('MainCtrl', function($scope) {
  $scope.name = 'World';
 });

// html
<div directive="name"></div>
// Dummy directive
app.directive('directive', function() {
  return {
    template: '<div bindonce bo-text="val"></div>',
    compile: function() {
      return {
        pre: function(scope, elt, attrs) {
          scope.val = scope.$eval(attrs.directive);
        }
      };
    }
  }
})

Woo no watches!

Let me know if I misunderstood something.

Upvotes: 2

Related Questions