javascript - 自定义 AngularJS 指令的部分内容应该保存在哪里?

标签 javascript angularjs kineticjs

我正在尝试创建一个自定义 Angular 指令,该指令使用 KineticJS 根据范围内的值在 Canvas 上进行绘制。我打算创建一个服务,然后根据接收 JSON 响应的 $http 调用来更新范围。此时,我希望指令循环遍历范围中的值并为每个值创建一个动力学节点。

但是,我不确定是否应该在 Controller 内或指令的链接函数内执行此操作。如果我要在链接函数内进行更新,我会使用scope.$watch 还是其他东西?

我创建了这样的自定义指令:

angular.module('history.directives', [])
    .directive('kinetic', function() {
        var kineticContainer = '<div id="container"></div>';
        return {
            restrict: 'E',
            compile:function (tElement, tAttrs, transclude) {
                tElement.html(kineticContainer);
            },
            controller: KineticCtrl
        };
});

Controller 看起来像这样:

function KineticCtrl($scope) {
    $scope.stage = new Kinetic.Stage({
        container: 'container',
        width: window.innerWidth,
        height: window.innerHeight - $('.navbar').outerHeight()
    });

    $scope.drawNode = function(posx, posy) {
        var layer = new Kinetic.Layer();
        var group = new Kinetic.Group({
            x: posx,
            y: posy
        });

        var line = new Kinetic.Line({
            points: [0, 25, 500, 25],
            stroke: 'black',
            strokeWidth: 4
        });

        var text = new Kinetic.Text({
            text: 'www.google.com',
            fontSize: 18,
            fontFamily: 'FontAwesome',
            fill: '#555',
            width: 300
        });

        group.add(line);
        group.add(text);
        layer.add(group);
        $scope.stage.add(layer);
    };

    $scope.drawNode(200, 400);
    $scope.drawNode(800, 400);
    $scope.drawNode(400, 100);
}

如有任何帮助,我们将不胜感激!

最佳答案

参见Difference between the 'controller', 'link' and 'compile' functions when defining a directive

总之,指令的 Controller 和链接函数之间几乎没有什么区别。 Controller 将首先运行,如果这很重要,但我不认为它在这里运行 - 因为您是通过 $http 检索数据,所以您必须在 Controller 或链接函数中使用 $watch 以便在以下情况下触发您的逻辑:数据可用。

关于javascript - 自定义 AngularJS 指令的部分内容应该保存在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15423339/

相关文章:

javascript - 模式关闭/隐藏时停止/暂停视频

node.js - 将私钥存储在静态 Angular 站点上

javascript - Firebase 安全规则自定义字段

angularjs - ng-bootstrap ngbDropdown 在 Angular 4 中不起作用

javascript - 调试 Easeljs 或 Kineticjs.js

javascript - Firefox 无法读取获取响应 header

javascript - 使用 useState Hook 时只更新部分状态并保持其他状态不变

javascript - Kinetic.js 获取具有颜色变化的形状命中区域

javascript - 跨域 Ajax 调用在 Safari 4 和 Safari 5 中不起作用

kineticjs - 无法从保存的 KineticJS Canvas 状态检索图像属性