AngularJS:控制器可以动态请求外部js吗?

莫希特

我有一个非基于AngularJS的页面-basic.html可以按预期工作。

basic.html

<!doctype html>
<html>
<head>
</head>
<body>
    <div class="tab-container" >
                    <div id="piechart" style="width:1000px;height:470px;"></div>
    </div>
    <script src="scripts/angular.min.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script>
        google.load("visualization", "1", {packages:["corechart"]});
        google.setOnLoadCallback(drawChart);

        function drawChart() {
            var data = google.visualization.arrayToDataTable([
                ['Device', 'Hits (in millions)'],
                ['A',     89],
                ['B',      13],
                ['C',  21],
            ]);
            var options = { title: '' };
            var chart = new google.visualization.PieChart(document.getElementById('piechart'));
            chart.draw(data, options);
        }
    </script>
</body>
</html>

然后,我尝试将代码重组(有点天真),以放入AngularJS框架中,如下所示:

basic.html

<!doctype html>
<html ng-app = "Analytics-App" ng-controller="MainController">
<head>
</head>
<body>
    <div class="tab-container" >
                    <div id="piechart" style="width:1000px;height:470px;"></div>
    </div>

    <script src="scripts/angular.min.js"></script>
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script src="scripts/base.js"></script>

</body>
</html>

base.js

var myApp = angular.module('Analytics-App', []);

myApp.controller('MainController', function($scope, $interval) {

    var e = document.createElement("script");
    e.src = "https://www.google.com/jsapi";
    e.type="text/javascript";

    document.getElementsByTagName("head")[0].appendChild(e);
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = google.visualization.arrayToDataTable([
         ['Device', 'Hits (in millions)'],
          ['A',     89],
          ['B',      13],
          ['C',  21],
        ]);
        var options = {
          title: ''
        };
        var chart = new google.visualization.PieChart(document.getElementById('piechart'));
        chart.draw(data, options);
      }
});

显然,加载时,页面DOM完全更改(使用chrome调试器查看时)为:

<html><head><script src="https://www.google.com/uds/?file=visualization&amp;v=1&amp;packages=corechart" type="text/javascript"></script><link href="https://www.google.com/uds/api/visualization/1.0/d90be93871e947a274f6a5157bd75fb0/ui+en.css" type="text/css" rel="stylesheet"><script src="https://www.google.com/uds/api/visualization/1.0/d90be93871e947a274f6a5157bd75fb0/format+en,default+en,ui+en,corechart+en.I.js" type="text/javascript"></script></head></html>

我试图理解为什么控制器脚本未能将元素添加到页面DOM中以及为什么其余页面元素被删除了。

帕莎·萨拉蒂·戈什(Partha Sarathi Ghosh)

请使用以下内容。

google.setOnLoadCallback(function () {  
    angular.bootstrap(document.body, ['Analytics-App']);
});
google.load('visualization', '1', {packages: ['corechart']});


var googleChart = googleChart || angular.module("google-chart",[]);

var myApp = myApp || angular.module("Analytics-App",["google-chart"]);

googleChart.directive("googleChart",function(){  
    return{
        restrict : "A",
        link: function($scope, $elem, $attr){
            var dt = $scope[$attr.ngModel].dataTable;

            var options = {};
            if($scope[$attr.ngModel].title)
                options.title = $scope[$attr.ngModel].title;

            var googleChart = new google.visualization[$attr.googleChart]($elem[0]);
            googleChart.draw(dt,options)
        }
    }
});

myApp.controller("IndexCtrl",function($scope){  
    $scope.data1 = {};
    $scope.data1.dataTable = new google.visualization.DataTable();
    $scope.data1.dataTable.addColumn("string","Name")
    $scope.data1.dataTable.addColumn("number","Qty")
    $scope.data1.dataTable.addRow(["Test",89]);
    $scope.data1.dataTable.addRow(["Test2",13]);
    $scope.data1.dataTable.addRow(["Test3",21]);
    $scope.data1.title="My Pie"
});
<!doctype html>
<html>
<head>
  <script type="text/javascript" src="https://www.google.com/jsapi"></script>
  <script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
  <script src="script.js"></script>
  <style type="text/css">
     .bigGraph {width:500px;height:500px;float:left;}
     .mediumGraph {width:400px;height:400px;float:left;}
     .smallGraph {width:200px;height:200px;float:left;}
 </style>
</head>
<body ng-controller="IndexCtrl">
    <div google-chart="PieChart" ng-model="data1" class="bigGraph"></div>
</body>
</html>

柱塞URL http://plnkr.co/edit/5guBqC0upuCVgBtY6076?p=preview

进一步的帮助http://gavindraper.com/2013/07/30/google-charts-in-angularjs/http://jrrera.github.io/angularjs/2014/04/05/a-better-way-to -integrate-angularjs-and-google-charts /

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我可以将外部javascript文件链接到AngularJS控制器吗?

来自分类Dev

如何从JS调用控制器,以便控制器可以执行其请求映射?

来自分类Dev

如何从JS调用控制器,以便控制器可以执行其请求映射?

来自分类Dev

AngularJS访问控制器$ scope从外部

来自分类Dev

AngularJS模块和外部控制器

来自分类Dev

AngularJS传递并使用外部控制器

来自分类Dev

AngularJS模块和外部控制器

来自分类Dev

AngularJS动态添加控制器

来自分类Dev

angularjs控制器中的动态表

来自分类Dev

我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?

来自分类Dev

Rails控制器可以请求相互SSL身份验证吗?

来自分类Dev

我可以从视图控制器外部引用子视图吗?

来自分类Dev

是否可以在页面上调用外部 AngularJS 控制器的函数?

来自分类Dev

在angularjs中没有ng-model的控制器之间可以共享价值吗?

来自分类Dev

我可以在angularJS的$ routeProvider.when()中传递多个控制器吗?

来自分类Dev

AngularJS $ modalInstance-我可以在一个控制器中执行此操作吗?

来自分类Dev

我可以在AngularJS应用中使用2个控制器吗

来自分类Dev

服务vs控制器vs外部js将常用方法放入angularjs

来自分类Dev

在angularjs控制器中使用非Angular外部JS函数

来自分类Dev

Laravel控制器外部的访问请求对象

来自分类Dev

Laravel控制器外部的访问请求对象

来自分类Dev

我可以指定对于特定方法到Spring MVC控制器类的控制器级别请求映射无效吗?

来自分类Dev

sails.js-布局可以知道调用的控制器/视图吗?

来自分类Dev

我可以在 Angular js 的不同子控制器中使用相同的方法吗

来自分类Dev

如何在Ajax调用中在控制器外部调用Angularjs控制器函数

来自分类Dev

AngularJS从外部控制器调用通用控制器函数

来自分类Dev

AngularJS在每个请求上从控制器检索用户对象

来自分类Dev

AngularJS向Symfony控制器发布POST Ajax请求

来自分类Dev

在angularjs中重新加载外部控制器

Related 相关文章

  1. 1

    我可以将外部javascript文件链接到AngularJS控制器吗?

  2. 2

    如何从JS调用控制器,以便控制器可以执行其请求映射?

  3. 3

    如何从JS调用控制器,以便控制器可以执行其请求映射?

  4. 4

    AngularJS访问控制器$ scope从外部

  5. 5

    AngularJS模块和外部控制器

  6. 6

    AngularJS传递并使用外部控制器

  7. 7

    AngularJS模块和外部控制器

  8. 8

    AngularJS动态添加控制器

  9. 9

    angularjs控制器中的动态表

  10. 10

    我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?

  11. 11

    Rails控制器可以请求相互SSL身份验证吗?

  12. 12

    我可以从视图控制器外部引用子视图吗?

  13. 13

    是否可以在页面上调用外部 AngularJS 控制器的函数?

  14. 14

    在angularjs中没有ng-model的控制器之间可以共享价值吗?

  15. 15

    我可以在angularJS的$ routeProvider.when()中传递多个控制器吗?

  16. 16

    AngularJS $ modalInstance-我可以在一个控制器中执行此操作吗?

  17. 17

    我可以在AngularJS应用中使用2个控制器吗

  18. 18

    服务vs控制器vs外部js将常用方法放入angularjs

  19. 19

    在angularjs控制器中使用非Angular外部JS函数

  20. 20

    Laravel控制器外部的访问请求对象

  21. 21

    Laravel控制器外部的访问请求对象

  22. 22

    我可以指定对于特定方法到Spring MVC控制器类的控制器级别请求映射无效吗?

  23. 23

    sails.js-布局可以知道调用的控制器/视图吗?

  24. 24

    我可以在 Angular js 的不同子控制器中使用相同的方法吗

  25. 25

    如何在Ajax调用中在控制器外部调用Angularjs控制器函数

  26. 26

    AngularJS从外部控制器调用通用控制器函数

  27. 27

    AngularJS在每个请求上从控制器检索用户对象

  28. 28

    AngularJS向Symfony控制器发布POST Ajax请求

  29. 29

    在angularjs中重新加载外部控制器

热门标签

归档