首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角标签中连字符的意义

角标签中连字符的意义
EN

Stack Overflow用户
提问于 2015-07-11 18:17:53
回答 2查看 813关注 0票数 1

我在柱塞上找到了一些我不懂的代码。它是一个单词云,云被添加到页面中:

代码语言:javascript
复制
<tang-cloud words="words" on-click="test(word)" width="500" height="500"></tang-cloud>

这是一些用角度捡起的东西。我不明白的是,在代码的其余部分中,我找不到对“唐云”的引用。各种“唐云”,但没有连字符。

我对角度完全陌生,我偶然发现了另一种情况,似乎发生了这种情况,但我看到的所有教程案例都会使用“唐云”。如果我去掉连字符,它就会停止工作,所以我一定错过了一些简单的东西。

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-11 18:20:40

这是个指令。由于HTML是不区分大小写的,因此角将tangCloud指令转换为tang-cloud以使其可被HTML读取。

您可以在tangCloud.js中的tangCloud.js指令中找到相应的代码。

编辑:只是为了跟进,你看到了上面写着restrict: 'E'的地方吗?这告诉您可以使用指令作为自定义元素。当您创建一个指令camelcase时,像tangCloud一样,角将自动将其转换为tang-cloud

代码语言:javascript
复制
.directive('tangCloud', ['$interpolate', '$compile', '$timeout', function ($interpolate, $compile, $timeout) {

    var directive = {
        restrict: 'E',
        scope: {
            width: '=',
            height: '=',
            words: '=',
            onClick: '&',
            spin: '='
        },

        template: function (tElement, tAttrs) {
            var isClickable = angular.isDefined(tAttrs.onClick);

            var clickAttr = isClickable ? 'ng-click="onClick({word : entry.word, id : entry.id})"' : '';

            return "<div class='tangcloud'>" +
                "<span ng-repeat='entry in words'" + clickAttr + ">{{entry.word}}</span>" +
                "</div>";
        },

        compile: function (elem) {
            elem.children().children()
                .addClass('tangcloud-item-' + $interpolate.startSymbol() + 'entry.size' + $interpolate.endSymbol())
                .addClass('tangcloud-item-hidden');

            return function (scope, elem) {
                var centerX = scope.width / 2;
                var centerY = scope.height / 2;
                var outOfBoundsCount = 0;
                var takenSpots = [];

                if (scope.words) {
                    scope.words = shuffleWords(scope.words);
                    determineWordPositions();
                }

                function shuffleWords(array) {
                    for (var i = array.length - 1; i > 0; i--) {
                        var j = Math.floor(Math.random() * (i + 1));
                        var temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                    }
                    return array;
                }

                function determineWordPositions() {
                    $timeout(function () {
                        var trendSpans = elem.children().eq(0).children();
                        var length = trendSpans.length;

                        for (var i = 0; i < length; i++) {
                            setWordSpanPosition(trendSpans.eq(i));
                        }
                    });
                }

                function setWordSpanPosition(span) {
                    var height = parseInt(window.getComputedStyle(span[0]).lineHeight, 10);
                    var width = span[0].offsetWidth;
                    var spot = setupDefaultSpot(width, height);
                    var angleMultiplier = 0;

                    while (spotNotUsable(spot) && outOfBoundsCount < 50) {
                        spot = moveSpotOnSpiral(spot, angleMultiplier);
                        angleMultiplier += 1;
                    }

                    if (outOfBoundsCount < 50) {
                        takenSpots.push(spot);
                        addSpanPositionStyling(span, spot.startX, spot.startY);
                    }

                    outOfBoundsCount = 0;
                }

                function setupDefaultSpot(width, height) {
                    return {
                        width: width,
                        height: height,
                        startX: centerX - width / 2,
                        startY: centerY - height / 2,
                        endX: centerX + width / 2,
                        endY: centerY + height / 2
                    };
                }

                function moveSpotOnSpiral(spot, angleMultiplier) {
                    var angle = angleMultiplier * 0.1;
                    spot.startX = centerX + (1.5 * angle) * Math.cos(angle) - (spot.width / 2);
                    spot.startY = centerY + angle * Math.sin(angle) - (spot.height / 2);
                    spot.endX = spot.startX + spot.width;
                    spot.endY = spot.startY + spot.height;
                    return spot;
                }


                function spotNotUsable(spot) {

                    var borders = {
                        left: centerX - scope.width / 2,
                        right: centerX + scope.width / 2,
                        bottom: centerY - scope.height / 2,
                        top: centerY + scope.height / 2
                    };

                    for (var i = 0; i < takenSpots.length; i++) {
                        if (spotOutOfBounds(spot, borders) || collisionDetected(spot, takenSpots[i])) return true;
                    }
                    return false;
                }

                function spotOutOfBounds(spot, borders) {
                    if (spot.startX < borders.left ||
                        spot.endX > borders.right ||
                        spot.startY < borders.bottom ||
                        spot.endY > borders.top) {
                        outOfBoundsCount++;
                        return true;
                    } else {
                        return false;
                    }
                }

                function collisionDetected(spot, takenSpot) {
                    if (spot.startX > takenSpot.endX || spot.endX < takenSpot.startX) {
                        return false;
                    }

                    return !(spot.startY > takenSpot.endY || spot.endY < takenSpot.startY);
                }

                function addSpanPositionStyling(span, startX, startY) {
                    var style = "position: absolute; left:" + startX + "px; top: " + startY + "px;";
                    span.attr("style", style);
                    span.removeClass("tangcloud-item-hidden");
                }
            };


        }
    };

    return directive;
}]);
票数 2
EN

Stack Overflow用户

发布于 2015-07-11 18:22:56

唐云指令被定义为tangCloud --以角用于指令的文档中的示例为例

app.js

代码语言:javascript
复制
.directive('myCustomer', function() {
  return {
     template: 'Name: {{customer.name}} Address: {{customer.address}}'
  };
});

index.html

代码语言:javascript
复制
<div ng-controller="Controller">
  <div my-customer></div>
</div>

请参阅文档的这部分中的规范化部分。尝试搜索'tangCloud'

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31360331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档