首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安古拉杰和范围问题(我认为)

安古拉杰和范围问题(我认为)
EN

Stack Overflow用户
提问于 2015-02-23 13:56:04
回答 1查看 54关注 0票数 1

我对棱角很陌生,我一直在尝试做出一个相当先进的指令。大多数指令都有效,但目前有两个问题,我认为它们都与范围有关。

以下是我的指示:

代码语言:javascript
复制
angular.module('test')
    .directive('testKitDesigner', function () {
        panels = [];

        function bindEvents() {
            console.log("bindingEvents");

            var styledElements = ["piping", "panel-1", "panel-2", "panel-3", "panel-4", "panel-5", "panel-6", "panel-7", "panel-8", "panel-9", "panel-10"];

            for (var i = 0; i < styledElements.length; i++) {
                var target = document.getElementById(styledElements[i]);

                console.log(target);

                if (target) {
                    bindEvent(target);
                }
            }
        };

        function bindEvent(target) {
            console.log(target);

            target.bindEvent("ngClick", selectPanel);
        };

        function selectPanel(event) {
            var path = angular.element(event.target);

            panels = []; // Reset

            if (attrs.testKitDesigner && attrs.testKitDesigner === 'advanced') {
                panels.push(path);
            } else {
                var parent = path.parent();
                var paths = parent.children();

                for (var i = 0; i < paths.length; i++) {
                    var current = angular.element(paths[i]);
                    var tag = current[0].nodeName;

                    if (tag === 'path' || tag === 'polyline') {
                        panels.push(current);
                    }
                }

                console.log(panels.length);
            }
        };

        return {
            restrict: 'A',
            templateUrl: 'Views/Templates/designer.html',
            link: function (scope, element, attrs) {
                scope.step = 0;
                scope.sport = 'General';
                scope.garment = 'Dress';
                scope.design = 'Angelus';

                scope.nextStep = function () {
                    scope.step++;
                };

                scope.setSport = function (sport) {
                    scope.sport = sport;

                    scope.setSvg();
                    scope.nextStep();
                };

                scope.setGarment = function (garment) {
                    scope.garment = garment;

                    scope.setSvg();
                    scope.nextStep();
                };

                scope.setDesign = function (design) {
                    scope.design = design;

                    scope.setSvg();
                    scope.nextStep();
                };

                scope.setSvg = function () {
                    var children = element.children();
                    var template = scope.sport + '/' + scope.garment + '/' + scope.design;

                    for (var i = 0; i < children.length; i++) {
                        var child = angular.element(children[0]);

                        if (child.hasClass('base')) {
                            child.attr('test-svg', template);
                            bindEvents();

                            return;
                        }
                    }
                }

                scope.setColor = function (color) {
                    for (var i = 0; i < panels.length; i++) {
                        var panel = angular.element(panels[i]);
                        var parent = panel.parent();

                        if (parent.attr('id') === 'piping') {
                            panel.css({
                                'stroke': color
                            });
                        } else {
                            panel.css({
                                'fill': color
                            });
                        }
                    }
                };

                scope.init = function () {
                    bindEvents();
                };

                scope.init(); // Set our defaults;
            }
        }
    })
    .directive('testSvg', function () {
        return {
            restrict: 'A',
            link: function (scope, element, attrs) {
                scope.contentUrl = 'Views/Templates/' + attrs.testSvg + '.svg';
                attrs.$observe('testSvg', function () {
                    console.log(attrs.testSvg);
                    scope.contentUrl = 'Views/Templates/' + attrs.testSvg + '.svg';
                });
            },
            template: '<div ng-include="contentUrl"></div>'
        };
    });

designer模板如下所示:

代码语言:javascript
复制
<div class="base" test-svg="/General/Polo/Angelus">

</div>
<div class="options">
    <h1>Simple kit designer</h1>

    <div ng-hide="step != 0">
        <p>Choose your sport.</p>

        <ul class="list-unstyled">
            <li><a href ng-click="setSport('Netball');">Netball</a></li>
            <li><a href ng-click="setSport('General');">General</a></li>
        </ul>
    </div>

    <div ng-hide="step != 1">
        <p>Choose your garment.</p>

        <ul class="list-unstyled">
            <li><a href ng-click="setGarment('Dress');">Dress</a></li>
            <li><a href ng-click="setGarment('Polo');">Polo</a></li>
        </ul>
    </div>

    <div ng-hide="step != 2">
        <p>Choose your design.</p>

        <ul class="list-unstyled">
            <li><a href ng-click="setDesign('Angelus');">Angelus</a></li>
        </ul>
    </div>

    <div class="colors" ng-hide="step != 3">
        <p>Click an area to change the colour.</p>

        <ul id="colour-picker" ng-hide="!picking" class="colours">
            <li><a class="colour-red" href ng-click="setColor('red');"></a></li>
            <li><a class="colour-orange" href ng-click="setColor('orange');"></a></li>
            <li><a class="colour-yellow" href ng-click="setColor('yellow');"></a></li>
            <li><a class="colour-green" href ng-click="setColor('green');"></a></li>
            <li><a class="colour-blue" href ng-click="setColor('blue');"></a></li>
            <li><a class="colour-indigo" href ng-click="setColor('indigo');"></a></li>
            <li><a class="colour-violet" href ng-click="setColor('violet');"></a></li>
        </ul>
    </div>
</div>

现在,应该发生的是,当用户选择运动或服装或设计时,测试- svg 属性应该更改为新值,然后加载相关的svg。属性做更改,但是观察函数从未被调用。我确信这与范围有关,但我想不出来。

EN

回答 1

Stack Overflow用户

发布于 2015-02-24 05:02:11

test-svg的链接阶段添加test-kit-designer属性。test-svg属性不作为指令编译,因此不会触发$observe,请在$compile上读取以解决问题。

但是,我建议重组您的代码。考虑在模板中使用test-svg,在test-kit-designer中公开来自setSvg的模板,并将其双向绑定到test-svg中的另一个变量。

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

https://stackoverflow.com/questions/28675404

复制
相关文章

相似问题

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