javascript - 如何使用 AngularJS Controller 中 <script> 标签中包含的库

标签 javascript angularjs model-view-controller

我正在尝试在 Controller 中使用 d3 库。根据我的研究,方法之一是创建一个指令来为脚本附加所需的属性。但我仍然无法获得 d3 库所需的引用...

这是我的指令

angular.module('reportCtrl', [])

.directive('myCustomer', [function() {
    return {
        link: function(scope, element, attrs) {
            </script>
            angular.element('<script src="assets/lib/d3.js"></script>').append(element);
            angular.element('<script src="assets/lib/d3.promise.js"></script>').append(element);
        }
    }
}])

在我的 Controller 中,我使用 d3 引用。但我收到未定义的错误...我几乎需要等待这个脚本加载。但问题是,reportCtrl 位于另一个“mainController”内,我似乎无法始终如一地依赖应用程序的生命周期。

这是我的 Controller ...

.controller('reportController', function($scope, $http) {

    return $http.get('/api/admin/svc_spec_file_map')
    .success(dataset => {
        var container = d3.select('div.sheet').node();
}
});

Here is the flow of what's going on...

最佳答案

第一种方法:

index.html 文件中定义脚本 src。您可以在 AngularJS 机制的脚本 src 之前执行此操作 - 模块、 Controller 等。

然后您就可以在其之后的所有脚本中访问 D3 变量。

第二种方法:

如果 d3 库有 AngularJS 的扩展,您可以将其作为依赖模块注入(inject)。你最好检查一下。

第三种方法:

使用 webpack,您可以将 D3 直接/延迟加载导入到您需要的指令中,但使用动态导入:

import('path/to/d3').then(d3 => {
  // do something with d3.default()
})

要点

您应该将其视为一个简单的 JS:如果您在初始化 AngularJS 框架之前定义了 D3 变量,则 D3 变量将在任何 AngularJS 应用程序中可用。

关于javascript - 如何使用 AngularJS Controller 中 &lt;script&gt; 标签中包含的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55583612/

相关文章:

javascript - 在 ng-click AngularJS 上动态更改 div 内容

php的数字精度如何扩展它

javascript - 无法访问字符或段落的 kerningValue 属性

javascript - Angular 中的模态不起作用。未处理的拒绝 {}

javascript - Angular : Why does field $invalid is true in other view?

php - Symfony2 : Username in URL

javascript - 使用 RapaelJS 放大/缩小逻辑

javascript - 向对象添加军事时间

oop - 动画与MVC原理

php - 调用未定义的方法 App\Models\Comment::comments()