【问题标题】:How do I include scripts in my AngularJS controller?如何在我的 AngularJS 控制器中包含脚本?
【发布时间】:2019-08-03 11:34:45
【问题描述】:

我遇到了一个问题,可能是因为我不完全了解 AngularJS。我想要做的是在我的 HTML 中添加一些 JS 脚本。

<head>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/gantt/modules/gantt.js"></script>
<script src="https://code.highcharts.com/gantt/modules/exporting.js"></script>
<head>
<body>
    <div id="plandat"></div>
</body>

问题是我正在使用 AngularJS,但我不确定如何将两个 JS 集成在一起。这是我的控制器的样子。

angular.module('analyticsCtrl', ['rzModule', 'daterangepicker'])
  .controller('planDatController', function($templateCache, $scope, $http, $interval, $filter, uiGridGroupingConstants ){

Highcharts.ganttChart('plandat', {
title: {
    text: 'Plan Dat'
},

series: [{
    name: 'Project 1',
    data: [{
        id: 's',
        name: 'Start prototype',
        start: Date.UTC(2014, 10, 18),
        end: Date.UTC(2014, 10, 20)
    }, {
        id: 'b',
        name: 'Develop',
        start: Date.UTC(2014, 10, 20),
        end: Date.UTC(2014, 10, 25),
        dependency: 's'
    }, {
        id: 'a',
        name: 'Run acceptance tests',
        start: Date.UTC(2014, 10, 23),
        end: Date.UTC(2014, 10, 26)
    }, {
        name: 'Test prototype',
        start: Date.UTC(2014, 10, 27),
        end: Date.UTC(2014, 10, 29),
        dependency: ['a', 'b']
        }]
    }]
});


  })

总之,AngularJS 似乎首先运行并且在设置我试图出现的 highcharts 甘特图之前没有读取 highcharts 脚本。提前谢谢你。我的前端/javascript 工作非常有限,我很想学习一些新东西。

【问题讨论】:

  • 无法重现问题。您的代码在此 DEMO on PLNKR 中有效。

标签: javascript angularjs highcharts frontend


【解决方案1】:

在你的例子中我没有看到你:

  1. 包含 angularjs 脚本。
  2. 编写了 ng-app 指令。

这是来自here 的完整工作示例。

它使用不同类型的图表,但原理相同:

<!DOCTYPE html>
<html ng-app="myModule">
<head>
    <meta charset="utf-8" />
    <title> Highcharts directive demo </title>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
    <script type="text/javascript" src="https://code.highcharts.com/highcharts.js"></script>
</head>
<body ng-controller="myController">

     <hc-chart options="chartOptions">Placeholder for generic chart</hc-chart>
     <hc-pie-chart title="Browser usage" data="pieData">Placeholder for pie chart</hc-pie-chart>

    <script>
        angular.module('myModule', [])
            // Directive for generic chart, pass in chart options
            .directive('hcChart', function () {
                return {
                    restrict: 'E',
                    template: '<div></div>',
                    scope: {
                        options: '='
                    },
                    link: function (scope, element) {
                        Highcharts.chart(element[0], scope.options);
                    }
                };
            })
            // Directive for pie charts, pass in title and data only    
            .directive('hcPieChart', function () {
                return {
                    restrict: 'E',
                    template: '<div></div>',
                    scope: {
                        title: '@',
                        data: '='
                    },
                    link: function (scope, element) {
                        Highcharts.chart(element[0], {
                            chart: {
                                type: 'pie'
                            },
                            title: {
                                text: scope.title
                            },
                            plotOptions: {
                                pie: {
                                    allowPointSelect: true,
                                    cursor: 'pointer',
                                    dataLabels: {
                                        enabled: true,
                                        format: '<b>{point.name}</b>: {point.percentage:.1f} %'
                                    }
                                }
                            },
                            series: [{
                                data: scope.data
                            }]
                        });
                    }
                };
            })
            .controller('myController', function ($scope) {

                // Sample options for first chart
                $scope.chartOptions = {
                    title: {
                        text: 'Temperature data'
                    },
                    xAxis: {
                        categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 
                            'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
                    },

                    series: [{
                        data: [29.9, 71.5, 106.4, 129.2, 144.0, 176.0, 135.6, 148.5, 216.4, 194.1, 95.6, 54.4]
                    }]
                };

                // Sample data for pie chart
                $scope.pieData = [{
                        name: "Microsoft Internet Explorer",
                        y: 56.33
                    }, {
                        name: "Chrome",
                        y: 24.03,
                        sliced: true,
                        selected: true
                    }, {
                        name: "Firefox",
                        y: 10.38
                    }, {
                        name: "Safari",
                        y: 4.77
                    }, {
                        name: "Opera",
                        y: 0.91
                    }, {
                        name: "Proprietary or Undetectable",
                        y: 0.2
                }]
            });
    </script>
</body>
</html>

如果您只是将上面的代码复制并粘贴到一个 html 文件中,您将获得以下输出:

但请注意,最好将每个指令拆分为自己的代码(以及指令的标记)。

【讨论】:

  • 嗨,所以我用第二种方法和第一种方法做了。两次我都收到Highcharts is not defined。知道为什么吗?
  • 我编辑了答案并附上了我的代码结果。你能把它复制并粘贴到一个html文件中,看看你是否得到了图像中的图表?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-15
  • 2017-11-13
相关资源
最近更新 更多