2014-02-19 47 views
0

this tutorial的作者描述如下代碼:「stars數組的每個元素都有一個值爲'filled'的對象,根據scope.ratingValue的值計算爲true或false我們從DOM獲得。「角度指令中的瑣碎但令人困惑的javascript

directive('fundooRating', function() { 
    return { 
    restrict: 'A', 
    template: '<ul class="rating">' + 
       '<li ng-repeat="star in stars" class="filled">' + 
        '\u2605' + 
       '</li>' + 
      '</ul>', 
    scope: { 
     ratingValue: '=' 
    }, 
    link: function (scope, elem, attrs) { 
     scope.stars = []; 
     for(var i = 0; i < scope.max; i++) { 
     scope.stars.push({filled: i < scope.ratingValue}); 
    } 
} 

作爲一個js新手,我仍然無法正面或反面如何「讀」最後一行。從代碼中只提到填充的地方,我可以看到的是css文件和模板。所以沒有布爾價值,我可以看到,語法對我來說有點混亂。我應該如何思考? github code

+0

我認爲這裏可能有一個錯字:類應該沿着ng-class =「{filled:filled}」的方向行事 – BiAiB

回答

1

我檢查了源及模板說:

'<li ng-repeat="star in stars" ng-class="star" ng-click="toggle($index)">' 

ng-class指令給出一個對象,它會檢查其屬性中的每一個,如果它是truhty,它增加了屬性名的班級名稱。例如:

ng-class="{filled:true, bold:false}"將評估class="filled"

因此,這最後一行設置明星的「填充」狀態,因此填充的類將僅放置到scope.max -nth元素。