В принципе, у меня есть две директивы:Как интегрировать вызов ресурса с директивой?
angular.module("maineMap")
.directive("ngMap", ["APPCONFIG", "Map", function(config, Map){
//D3 map drawing functionality based on data from $resource call
return {
restrict : "E",
transclude : true,
scope : {
mapData : '='
},
link : function(scope, el, attrs){
}
};
}])
.directive("donutChart", function(){
return {
restrict : "E",
link : function(scope, el, attrs){
}
}
});
и контроллер
angular.module("maineMap")
.controller('MapCtrl', ['$scope','Map', function($scope, Map{
$scope.mapData = Map.mapData()
.query();
$scope.mapData.$promise.then(function(results){
$scope.mapData = results;
console.log($scope.mapData);
});
}]);
где Map
является $resource
реализацию, чтобы получить файл в формате JSON.
Моя проблема заключается в том, что функциональные возможности директивы выполняются до вызова контроллера. То есть, я вызываю несколько свойств mapData
в директивах, и все они возвращаются не определенно с соответствующими сообщениями об ошибках в консоли. Однако вскоре после распечатки ошибки извлечение данных из реализации $resource
выполняется и печатается на консоль.
Обратите внимание, что, если я заменю $promise
и зависит исключительно от
$scope.mapData = Map.mapData()
.query();
тогда я $scope.mapData
видимую в <donut-chart>
директивы, но не <ng-map>
.
Учитывая такую структуру, как я могу отложить действие директивы до тех пор, пока контроллер не загрузит данные?
Эта вещь .. значение области задано в асинхронной функции, и полученные данные являются неотъемлемой частью директивы. Если в директиве нет данных, она выдает ошибки и ничего не делает. – Jason
Это не похоже на хороший дизайн. Директива должна иметь возможность обрабатывать значения «undefined» и не должна допускать каких-либо предположений о том, что у родительской области есть или нет. –
Его приложение D3, которое требует данных для рисования путей SVG. – Jason