1

Я хотел бы получить директиву с изолированной областью и двухстороннюю привязку к объему контроллера, который асинхронно загружает данные.Асинхронные данные от контроллера к директиве: неизвестная ошибка провайдера

Часть HTML:

<body ng-app = 'authorGraph' ng-controller = 'GraphCtrl'> 
<graph-dir/> 

Javascript:

var authorGraph = angular.module('authorGraph', []); 

authorGraph.directive('graphDir', function() { 
return { 
    scope: { 
    graphData: '=' //two way binding 
    }, 
    restrict: 'E', 
    link: function (scope, element) { 
     //do something with D3.js to visualise the data here 
    } 
}; 

Сидя в Интернете, я обнаружил, что обещания может сделать трюк (этот код идет до реализации директивы)

authorGraph.config(function($routeProvider) { 
$routeProvider.when('/', 
    { 
     controller: 'GraphCtrl', 
     resolve: { 
      getData: function ($http) { 
       return $http.get('graph_data.json').then(function (data) { 
        return data; 
       }); 
      } 
     } 
    }); 
}); 

authorGraph.controller('GraphCtrl', function GraphCtrl($scope, getData) { 
    $scope.graphData = getData; 
}); 

Однако я застрял на ошибке

Неизвестный поставщик: getDataProvider < - GetData

ответ

0
authorGraph.controller('GraphCtrl', function GraphCtrl($scope, getData) { 
    $scope.graphData = getData; 
}); 

В приведенном выше коде, когда вы что-то привнести в зависимости он начнет искать провайдера appropriae. В вашем случае он ищет getDataProvider, и он не может найти какой-либо сервис.

Когда вы используете разрешение, возвращаемый параметр param будет доступен в вашем объекте $scope. Вам не нужно вводить это как зависимость.

Приведенный выше код должен быть:

authorGraph.controller('GraphCtrl', function GraphCtrl($scope) { 
    $scope.graphData = $scope.getData; 
}); 
Смежные вопросы