2014-02-06 42 views
2

我得到了一個有數千個項目的ng重複項,所以我決定試用bindonce來減少手錶的數量。但我無法弄清楚如何正確使用它。 所以,現在我得到了下面的代碼:在Angularjs中使用bindonce自定義指令值

<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讀,我要補充的指令,並使用BO- *指令,所以我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}}

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

博ATTR實際上並沒有看起來像你想幹什麼,你只想要一個指令,評估,並不會產生任何手錶數據綁定。我做了一個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); 
     } 
     }; 
    } 
    } 
}) 

嗚沒有手錶!

讓我知道我是否誤解了一些東西。

+0

只有1個問題,您認爲哪種解決方案更好。如果我只用$(document)。(「click」,「.item-box」,function());或使用此解決方案?因爲有了這個解決方案,指令將被執行100次以上。 – Deepsy

+0

如果您正在嘗試學習角度,我建議不要回頭查看jQuery,因爲稍後會發現點擊來自哪裏。如果你所做的只是點擊綁定,你應該使用ng-click。 dom類的搜索可能與爲每個重複元素附加ng-click相同。 – hassassin

+0

http://i.imgur.com/ZfTeeAz.png這是指令的外觀如何 – Deepsy