【问题标题】:AngularJS with nvD3 service not returning value带有nvD3服务的AngularJS不返回值
【发布时间】:2017-08-08 18:00:50
【问题描述】:

我是 AngularJS 和 d3 的新手。我用过这个例子:http://embed.plnkr.co/6t5bky/ 并试图创建一个“bulletChart”。

我的 javascript 文件如下所示:

var app = angular.module('plunker', ['nvd3']);
app.controller('MainCtrl', function($scope, $http) {
  $scope.options = {
            chart: {
                type: 'bulletChart',
                transitionDuration: 500,
            }
        };

        $scope.data = populateData();

        function populateData(){

            /*return {
            "title": "Test Title",
            "subtitle": "Completed",
            "ranges": [200,400,700],
            "measures": [600],
            "markers": [300] 
            }*/

           return $http.get('http://myservice/data').then(function(response) {
                    console.log('response-dataNew',response.data);
                    return response;
                  ;})

                }

});

当我将值返回为 (在代码中注释) 时,它可以工作。

return {
            "title": "Test Title",
            "subtitle": "Completed",
            "ranges": [200,400,700],
            "measures": [600],
            "markers": [300] 
            }

我看到了bulletGraph:

当我尝试使用该服务时,它没有给我任何图表。我的服务 (http://myservice/data) 以完全相同的格式返回数据:

我在这里做错了什么?任何指针?

【问题讨论】:

  • 尝试在服务成功回调中将 $scope.data 设置为$scope.data = response.data
  • $http.get 不返回一个承诺吗?如果是这样,则填充数据将返回未解决的承诺,但不返回请求中的数据
  • 相信问题出在return $http 上,因为$http 返回承诺。尝试删除返回和/或将响应数据绑定到 $scope 变量 .then(function(response) { $scope.someVariable = angular.copy(response.data); });
  • 谢谢大家。我正在尝试所有这些选项。
  • 成功了!我更改了一行返回响应;到 $scope.data = angular.copy(response.data);

标签: javascript angularjs d3.js


【解决方案1】:

在所有 cmets 之后,这个解决方案对我有用。

var app = angular.module('plunker', ['nvd3']);
app.controller('MainCtrl', function($scope, $http) {
  $scope.options = {
            chart: {
                type: 'bulletChart',
                transitionDuration: 500,
            }
        };

        $scope.data = populateData();
        function populateData(){

            $http.get('http://10.20.26.90:5003/bullet').then(function(response) {
                    console.log('response-dataFound',response.data);
                    $scope.data = angular.copy(response.data); 
                  ;})

                }

});

如果您想到更好的方法,请告诉我。

【讨论】:

    猜你喜欢
    • 2015-08-05
    • 1970-01-01
    • 2015-10-29
    • 1970-01-01
    • 2023-03-08
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多