2014-02-06 7 views
2

У меня есть ng-repeat с тысячами предметов в нем, поэтому я решил попробовать bindonce, чтобы уменьшить количество часов. Но я не мог понять, как правильно его использовать. Так что теперь я получил следующий код:Пользовательская директива с привязкой в ​​Angularjs

<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> 

Как я прочитал в bindonce doc, я должен добавить директиву и использовать Бо- * директивы, так что я fugured из этого:

<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> 

Так мой вопрос заключается в том, как я могу использовать {{card.category}} и {{card._id}} используя bind-once?

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

, похоже, не работает, я не получаю никаких ошибок, просто ничего не происходит.

Результат выглядит

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

Это выглядит правильно. Вы получаете два атрибута: draggable и itemid, которые были оценены draggable = «Pants» itemid = «m - Pi». В чем проблема? – hassassin

+0

Директивы не выполняются. Думаю, у меня нет ошибок, но это не работает. – Deepsy

+1

О, draggable - это директива? В этом случае вы должны просто сделать draggable = "card.category", и в вашей директиве вы будете $ eval attrs.draggable и просто не настроите на него часы. – hassassin

ответ

2

бо-атр фактически не кажется, что то, что вы хотите делать, вы просто хотите директиву для оценки и привязки данных без создания каких-либо часов. Я сделал plnkr, что я думаю, что вы хотите: 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 не часы!

Сообщите мне, если я что-то неправильно понял.

+0

Еще один вопрос, какое решение вы считаете своим лучшим. Если я делаю только одну директиву для родителя с $ (документом). («Click», «.item-box», function()); или используя это решение? потому что с этим решением директива будет выполняться сто раз или больше. – Deepsy

+0

Если вы пытаетесь научиться угловатому, я предлагаю не возвращаться к jQuery, так как это будет запутывать позже, когда появляются клики. Если все, что вы делаете, это привязка к клику, вы должны использовать ng-click. Поиск в dom-классе, вероятно, такой же, как при использовании ng-click для каждого повторяющегося элемента. – hassassin

+0

http://i.imgur.com/ZfTeeAz.png вот как выглядит директива – Deepsy

Смежные вопросы