我可以像其他库一样将 JointJS 作为 AngularJS 模块注入吗?

2023-11-24

我有一个带有角度的应用程序,我需要使用这个库http://www.jointjs.com/,所以我下载了 joint.min.js 和 joint.min.css 并将它们的路由放在 index.html 中,但我不知道在 app.js 中放入什么来注入它,并且我不断收到来自 Angular 的注入错误。有没有可能这不是办法呢?我用谷歌搜索了很多,但没有找到任何方法。我将不胜感激任何帮助,提前致谢!


如果您想在 Angular 应用程序中渲染 Jointjs 图表,那么这很容易做到。就我而言,我将 Jointjs 代码封装在一个角度指令内,并传入 Jointjs 图形对象。 (简化的)指令如下所示:

(function () {
    'use strict';

    var app = angular.module('app');

    app.directive('jointDiagram', [function () {

        var directive = {
            link: link,
            restrict: 'E',
            scope: {
                height: '=',
                width: '=',
                gridSize: '=',
                graph: '=',
            }
        };

        return directive;

        function link(scope, element, attrs) {

            var diagram = newDiagram(scope.height, scope.width, scope.gridSize, scope.graph, element[0];

            //add event handlers to interact with the diagram
            diagram.on('cell:pointerclick', function (cellView, evt, x, y) {

                //your logic here e.g. select the element

            });

            diagram.on('blank:pointerclick', function (evt, x, y) {

                // your logic here e.g. unselect the element by clicking on a blank part of the diagram
            });

            diagram.on('link:options', function (evt, cellView, x, y) {

                // your logic here: e.g. select a link by its options tool
            });
        }

        function newDiagram(height, width, gridSize, graph, targetElement) {

            var paper = new joint.dia.Paper({
                el: targetElement,
                width: width,
                height: height,
                gridSize: gridSize,
                model: graph,
            });

            return paper;
        }

    }]);

})();

如果您需要通过图表与模型进行交互,请使用 Jointjs 事件处理程序并将它们连接到指令中范围内的函数(如上面的代码所示)。

要在您的视图中使用它:

<joint-diagram graph="vm.graph" width="800" height="600" grid-size="1" />

在我的例子中,我使用 Jointjs 在第一种情况下创建图表graph.fromJSON我的控制器中的函数(严格来说,这是在从我的控制器调用的数据服务组件中),然后将其添加到范围中。

function getDiagram() {
    return datacontext.getDiagram($routeParams.diagramId).then(function (data) {
        vm.graph.fromJSON(JSON.parse(diagramJson));
    });
}

这种方法适用于在图表中添加和删除元素和链接以及拖动内容。您的控制器代码仅适用于图形对象,并且图表渲染的所有更新均由 Jointjs 处理。

function addCircle(x, y, label) {

    var cell = new joint.shapes.basic.Circle({
        position: { x: x, y: y },
        size: { width: 100, height: 100 },
        attrs: { text: { text: label } }
    });
    graph.addCell(cell);
    return cell;
};

Jointjs 是一个很棒的库,但它基于 Backbone.js 进行数据绑定。我发现的唯一问题是,当您想要使用 Angular 编辑图表元素属性(例如包含的文本)时,它与 Angular 的配合效果不佳。例如,我有一个属性窗格(角度视图),用于编辑选定的图表元素属性。

我为此做了一个奇怪的解决方法,我太羞于这样做;o)我仍在学习角度/关节/骨干,所以希望在我完成项目时有更好的方法。如果我这样做,我会将其发布在这里。也许比我更专家的人已经可以做得更好 - 我很高兴看到这里发布了更好的方法。

总的来说,这个指令作为一种方法起作用,但感觉像是 Angular 和 Jointjs 之间的表面集成。本质上,该指令在角度应用程序内创建了一个“jointjs 岛”。我想找到一种更“角度原生”的方式来做到这一点,但也许这需要重写 Jointjs 以使用角度而不是骨干......

附注如果您的应用程序中已经有 jquery,则可以从 Jointjs 下载页面获取不包含 jquery 的 Joint 版本:

http://www.jointjs.com/download

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以像其他库一样将 JointJS 作为 AngularJS 模块注入吗? 的相关文章

随机推荐

  • Android的bulkTransfer在读取数据时返回-1,但缓冲区中确实有一些数据

    我在 Galaxy Tab p7300 中编写了一个应用程序 通过 otg 电缆与密钥 scsi 设备 进行通信 我第一次可以使用bulkTransfer 读取数据 但下次就不能了 然后我使用 Ellisys Visual USB 嗅探数据
  • Blazor 路线在同一页面发生变化

    我当前的设置 NET Core 3 预览版 6 Blazor 服务器端渲染 在 Blazor 页面中 我有类似以下内容 page page page page Id With Parameter public string Id get s
  • 如何在RDLC中设置参数值

    我在报告中添加了两个用于日期范围的文本框 为了填充文本框中的值 我为文本框设置了参数 现在 日期范围来自名为 DateRange 的表单 该表单具有两个 DateTimePickers 如何将rdlc中文本框的值设置为等于这些DataTim
  • NSInteger 计数乘以 4?

    我不明白为什么这个 NSInteger 计数器会增加到数据库行真实值的 4 倍 也许这很愚蠢 但我真的不明白 到目前为止谢谢 NSInteger i i 0 for NSDictionary teil in gText NSLog teil
  • 相当于连接 Sum 的字符串

    我想要一个查询在第一行输出左表中的 ID 和连接表中的描述 Schema person id int role id int description varchar 100 personrole personid int roleid in
  • jquery ui 对话框在按钮和内容 div 上使用相同的类打开多个对话框

    我想通过在按钮和内容 div 上使用相同的类来打开多个对话框 下面的方法有效 但仅适用于第一次 jQuery helpDialog hide jQuery helpButton click function jQuery this next
  • 如何阻止 g++ 链接不需要的异常处理代码?

    我正在使用为arm eabi 编译的GCC G 开发嵌入式应用程序 由于资源限制 我尝试禁用标准 C 异常处理 我正在用 fno exceptions 编译代码 nostartfiles ffreestand 当一个类的全局实例存在 并且该
  • 为什么 LINQ to SQL 实体关联在插入新记录时会创建新(重复)行?

    我正在尝试使用 LINQ to SQL 插入一个新实体 并且实体与用户实体关联 新实体的插入成功 但我现有的用户实体被插入 就好像它是新用户一样 代码如下所示 var someEntity new Entity someEntity Use
  • InterWorks 在其 Workbook SDK 中使用什么 Tableau API?

    InterWorks 有一个 Workbook SDK 作为其 Power Tools for Tableau 产品的一部分 有谁知道他们如何能够做到这一点 SDK 可以在没有 Tableau Server 的情况下访问工作簿 因此我认为它
  • 如何在iOS平台上实现快速图像滤镜

    我正在开发 iOS 应用程序 用户可以在其中应用一组特定的照片滤镜 每个滤镜基本上都是一组具有特定参数的 Photoshop 操作 这些行动是 级别调整 亮度 对比度 色相饱和度 单个和多个叠加 我在代码中使用循环遍历图像中所有像素的算术表
  • 转换 JSON 格式(分组依据)

    我有这样的 JSON 对象 name cat value 17 group animal name dog value 6 group animal name snak value 2 group animal name tesla val
  • 递归搜索非二叉树中的节点

    我想在非二叉树中搜索一个项目 任何节点都可以有 n 个子节点 并立即退出递归 所讨论的节点可以是任何节点 而不仅仅是叶子节点 这是我的代码 但我没有得到完整的搜索 private nNode recursiveSearch data gi
  • 在 Django 中运行 PHP

    有没有办法在 django 中运行 PHP 脚本 我在 TinyMCE 中有一个运行 PHP 脚本的插件 并且它能够使用 XAMPP 的 Apache 工作 然而 Django确实支持PHP脚本的运行 因此该插件无法工作 我想知道是否有办法
  • PHPExcel 合并单元格上的行自动高度/换行文本

    有没有在 PHP Excel 中设置行自动高度的好方法 到目前为止 我已经看到您可以使用固定高度 您可以预先指定您想要的行的高度 我还发现 如果您不使用合并单元格 则可以使用自动高度 PHPExcel 合并单元格的动态行高 如何在phpex
  • 修复生成条形码时“GDI+ 中发生一般错误”的问题

    我正在用 C 编写一个条形码生成器 我可以将条形码生成为位图 并可以在 Picturebox WindowsForms 中显示它们 另一方面 我无法将条形码保存为 gif 或 jpeg 文件 我的条形码是位图文件 这是我的代码 Bitmap
  • Safari/Chrome 开发者工具调试 CSS 覆盖

    Safari Chrome 开发者工具通过删除 CSS 规则来指示 CSS 规则被其他内容覆盖 如图所示 有时我发现自己无法从 CSS 文件中找出导致该规则被忽略的原因 但 Safari 本身肯定会在它击穿它时知道这一点 有没有办法知道什么
  • 客户端 (JS) 和服务器 (PHP) 中的 AES 256

    我尝试使用相同类型的操作 即 AES 256 在服务器端和客户端上加密和解密数据 在服务器上我使用 PHP 客户端我使用 CryptoJS 到目前为止我只能在服务器上加密和解密客户端 请参阅代码 JS
  • R RPostgreSQL 使用 SSL 连接到远程 Postgres 数据库

    我正在尝试使用 R 从内部连接到远程 PostgreSQL 数据库RPostgreSQL包 并且我收到似乎与连接的 SSL 设置相关的错误 我已经验证我可以使用命令行进行连接psql 所以我知道连接是有效的并且可以从我的计算机访问 我在 R
  • 尝试运行 flutter 应用程序时“无法连接到lockdownd”

    我正在关注开始使用教程 我可以安装一切 flutter doctor返回所有复选标记 但最后有一条消息 idevice id 返回错误 错误 无法连接到lockdownd 错误代码 2 如果我尝试使用运行该应用程序 则会出现相同的消息flu
  • 我可以像其他库一样将 JointJS 作为 AngularJS 模块注入吗?

    我有一个带有角度的应用程序 我需要使用这个库http www jointjs com 所以我下载了 joint min js 和 joint min css 并将它们的路由放在 index html 中 但我不知道在 app js 中放入什