基本上,我有兩條指令:如何將資源調用與指令集成?
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 2014-10-03 21:30:04
這看起來不是一個好設計。一個指令應該能夠處理未定義的值,並且不應該對於父範圍有或沒有做出任何假設。 – 2014-10-03 22:29:43
它是D3應用程序,它需要數據來繪製svg路徑。 – Jason 2014-10-03 22:30:36