【问题标题】:Highcharts using AngularJS, NodeJS and Mongoose使用 AngularJS、NodeJS 和 Mongoose 的 Highcharts
【发布时间】:2016-05-13 00:17:17
【问题描述】:

我是 Javascript 世界的初学者。我正在尝试将高图表(www.highcharts.com)用于 AngularJS 上的 pia 图表。我有下面的例子,它工作正常,但下面的例子有“想法”数组静态但我想从 MongoDB 而不是静态值做这个。我不确定这里需要做什么才能使这种动态化。我尝试了一些东西,我能够从简单的 NodeJS 程序上从 Mongo 获取数据,但我不确定如何将它与 AngularJS 集成?如何用我在 NodeJS 代码上获取的数据替换“$scope.ideas”值?

请帮助我,因为我对下一步完全感到困惑。我花了很多时间来了解细节并做一些事情但没有运气。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.0.3/angular.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>
<script src="http://code.highcharts.com/highcharts-more.js"></script>
<div ng-app="myApp">
  <div ng-controller="MyCtrl">
    <div class="hc-pie" items="limitedIdeas"></div>
  </div>
</div>

<script>
function MyCtrl($scope, limitToFilter) {
  $scope.ideas = [
    ['ideas1', 1],
    ['ideas2', 8],
    ['ideas3', 5]
  ];

  $scope.limitedIdeas = limitToFilter($scope.ideas, 3);
}

angular.module('myApp', [])
  .directive('hcPie', function () {
  return {
    restrict: 'C',
    replace: true,
    scope: {
      items: '='
    },
    controller: function ($scope, $element, $attrs) {
      console.log(2);

    },
    template: '<div id="container" style="margin: 0 auto">not working</div>',
    link: function (scope, element, attrs) {
      console.log(3);
      var chart = new Highcharts.Chart({
        chart: {
          renderTo: 'container',
          plotBackgroundColor: null,
          plotBorderWidth: null,
          plotShadow: false
        },
        title: {
          text: 'Browser market shares at a specific website, 2010'
        },
        tooltip: {
          pointFormat: '{series.name}: <b>{point.percentage}%</b>',
          percentageDecimals: 1
        },
        plotOptions: {
          pie: {
            allowPointSelect: true,
            cursor: 'pointer',
            dataLabels: {
              enabled: true,
              color: '#000000',
              connectorColor: '#000000',
              formatter: function () {
                return '<b>' + this.point.name + '</b>: ' + this.percentage + ' %';
              }
            }
          }
        },
        series: [{
          type: 'pie',
          name: 'Browser share',
          data: scope.items
        }]
      });
      scope.$watch("items", function (newValue) {
        chart.series[0].setData(newValue, true);
      }, true);

    }
  }
});

</script> 

简单的节点查找方法如下,也使用了mongoose。

foult.find({$and:[ {"instrument":"android"} , {"sentiments": {"$gt":0}} ]}, function(err, foult) {
  if (err) return console.error(err);
  androidSentimentArray = ["foult", foult.length];
  console.dir(foult);
});

【问题讨论】:

  • 您需要尝试使用角度指令来渲染高图github.com/pablojim/highcharts-ng,这将减少您渲染图形的大部分指令工作..
  • @PankajParkar,感谢您在这里回答,但我的问题是,如何集成单独的节点代码和 Angular 代码。节点代码从 Mongo 获取数据,Angular 显示它,但我不知道如何将 foult.find 方法响应传递给 $scope.ideas 数组?

标签: angularjs node.js express highcharts mongoose


【解决方案1】:

您应该创建一个服务(单例)或工厂来发出 http 请求并将数据获取/发布到节点服务器,然后您将在控制器中注入服务/工厂。

angular.module('').controller('myController', function(ideasService) {
    ideasService.getIdeas()
        .then(function(result) {
            //Apply returned data to view
            $scope.ideas = result.data;
         });
});

angular.module('')
    .service('ideasService', function($http) {
        this.getIdeas = function() {
            //returns promise
            return $http.get('url')
                      .then(function(response) {
                           console.log(response.data);
                       });
    });

【讨论】:

  • 感谢您的回答,但我应该从服务连接到 MongoDB 吗?基本上我应该在哪里获取我正在寻找的数据?那部分代码是否会出现在您编写的“//return promise”注释下?抱歉,如果我问了一些愚蠢的问题,但我是初学者,所以不太了解。
  • 该查找代码应该在节点服务器上运行,并且您的角度代码在客户端上运行。您将需要使用 express 设置节点服务器,以便拥有可以调用以返回数据的路由。这是一个小提琴,显示了 express 应用程序的基本布局jsfiddle.net/t2gcgdvq 你需要在你的项目上 npm install express
  • 是的。我正在使用 node 和 Angular 研究 expressjs,但感到困惑。我看到了著名的 todo 示例,它返回 getTodo 列表(/api/todos URI)。此 /api/todos URI 将返回待办事项列表,但在我的情况下,我需要返回数组数组以获得想法,对吗?抱歉,我现在正朝着不同的方向发展,但我的最终目标是从 MongoDB 动态填充 $scope.ideas。
  • 这是一个修订版,它给出了一个基本的例子,使用 mongodb jsfiddle.net/t2gcgdvq/1 所以当你调用 getIdeas 时,它会为节点服务器创建一个 api,返回一个 json 文档数组,然后你会能够像我在控制器中显示的那样访问它们。
  • 好的。这次真是万分感谢。让我尝试使用 express 进行此操作,如果我遇到任何问题,我会通知您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-03
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 2018-10-17
  • 2021-01-06
  • 2016-09-18
相关资源
最近更新 更多