代码之家  ›  专栏  ›  技术社区  ›  Peter

角度2指令

  •  0
  • Peter  · 技术社区  · 7 年前

    根据Angular 2指令,我有一个问题。我想用Angular 2重新创建Angular 1应用程序,但我被一个指令卡住了。 角度1中的一个看起来像这样:

    app.directive('starRating', function () {
      return {
        restrict: 'A',
        template:   '<ul class="rating">' +
                        '<li ng-repeat="star in stars">' +
                            '<span class="glyphicon" ng-class="star.class" aria-hidden="true">' +
                        '</li>' +
                    '</ul>',
        scope: {
            ratingValue: '=',
            max: '='
        },
        link: function (scope, elem, attrs) {
            scope.stars = [];
            for (var i = 0; i < scope.max; i++) {
                if(i < scope.ratingValue){
                    scope.stars.push({
                        class: "glyphicon-star"
                    });
                } else {
                    scope.stars.push({
                        class: "glyphicon-star gray"
                    });
                }
            }
        }
      }
    });
    

    我在html文件中这样调用它:

    <div star-rating rating-value="movie.rating" max="5" ></div>
    

    这只是一个有名字和收视率的忧郁的电影演员。通过指令,我只想创建5颗星,并且根据评级,应该填充星星的数量。

    在角2中也可以这样做吗?如果是这样,将如何进行?我找不到任何合适的代码示例或教程。

    彼得

    1 回复  |  直到 7 年前
        1
  •  0
  •   Peter    7 年前

    好的,我找到了一个合适的解决方案:

    getClass(index, rating) {
        if (index < rating) {
            return 'glyphicon-star';
        } else {
           return 'glyphicon-star-empty gray';
        }
    }
    

    在我的HTML中,我这样称呼它:

    <div class="col-lg-3">
       <ul class="rating">
           <li *ngFor="let n of [0,1,2,3,4]; let i = index">
               <span class="glyphicon" [ngClass]="getClass(i, rating)"></span>
           </li>
       </ul>
    </div>