У меня возникли проблемы с попыткой заполнить векторную карту из данных моей базы данных, используя угловые директивы &.
У меня есть веб-страница с угловой приборной панелью, которая должна отображать векторную карту svg из Соединенных Штатов, заполненную данными из моей базы данных. Я следую this tutorial, и все работает отлично, однако учебник передает жестко закодированные значения на карту. Мне нужно изменить это, чтобы принимать значения базы данных, &, вот где у меня проблемы. Как я могу позвонить в мою базу данных и передать эти значения обратно на карту, используя директиву?
Я еще не знаком с угловым & Это мой первый опыт работы с директивами, но кажется, что после директивы появляется $http.get
, поэтому я возвращаю данные db слишком поздно. Вот мой код:
App.js
Здесь я использую обе директивы для этой функциональности карты. Это все работает отлично:
var app = angular.module('dashboardApp', ['ngRoute', 'angularjs-dropdown-multiselect']);
app.controller('dashboardController', DashboardController);
app.directive('svgMap',function ($compile) {
return {
restrict: 'A',
templateUrl: '/Content/Images/Blank_US_Map.svg',
link: function (scope, element, attrs) {
var regions = element[0].querySelectorAll('path');
angular.forEach(regions, function (path, key) {
var regionElement = angular.element(path);
regionElement.attr("region", "");
regionElement.attr("dummy-data", "dummyData");
$compile(regionElement)(scope);
})
}
}
});
app.directive('region', function ($compile) {
return {
restrict: 'A',
scope: {
dummyData: "="
},
link: function (scope, element, attrs) {
scope.elementId = element.attr("id");
scope.regionClick = function() {
alert(scope.dummyData[scope.elementId].value);
};
element.attr("ng-click", "regionClick()");
element.attr("ng-attr-fill", "{{dummyData[elementId].value | map_color}}");
element.removeAttr("region");
$compile(element)(scope);
}
}
});
DashboardController.js
Это где моя проблема. Здесь я возвращаю данные из своей базы данных через $http.get
. В настоящее время у меня есть моя функция $scope.createDummyData
за пределами этого http.get &, она отлично работает. Однако, если я размещаю этот код внутри своего $http.get
, данные не заполняются. И вот моя проблема:
var DashboardController = function ($scope, $http) {
$http.get('/Account/GetDashboardDetails')
.success(function (result) {
//need to place my $scope.createDummyData inside here
})
.error(function (data) {
console.log(data);
});
var states = ["AL", "AK", "AS", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FM", "FL", "GA", "GU", "HI", "ID", "IL",
"IN", "IA", "KS", "KY", "LA", "ME", "MH", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM",
"NY", "NC", "ND", "MP", "OH", "OK", "OR", "PW", "PA", "PR", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VI", "VA",
"WA", "WV", "WI", "WY"];
$scope.createDummyData = function() {
var dataTemp = {};
angular.forEach(states, function (state, key) {
dataTemp[state] = { value: Math.random() }
});
$scope.dummyData = dataTemp;
};
$scope.createDummyData();
};
HTML
Наконец, вот мой HTML. Я не чувствую ничего здесь имеет отношение к моему вопросу, но я включил его в любом случае, только в случае, если:
<div class="container">
<div svg-map class="col-md-8 col-sm-12 col-xs-12" style="height:350px;"></div>
<p>
<button ng-click="createDummyData()" class="btn btn-block btn-default">Create Dummy Data</button>
</p>
<div class="regionlist">
<div ng-repeat="(key,region) in dummyData">
<div>{{key}}</div>
<div>{{region.value | number}}</div>
</div>
</div>
</div>
Как я могу идти о заселении моей карты, с помощью информации из базы данных?
Благодаря
Почему вы не вызываете HTTP-вызов из директивы? – user2085143
Попробуйте обернуть ng-if вокруг div, содержащего svg-map. Первоначально установите для переменной ng-if значение false, а затем, как только вы получите данные из бэкэнд и заполните dummydata, установите для параметра ng-if значение true. Это начнет отображать ваш шаблон. –
Вы только показали, как назначить фиктивные данные в '$ scope' в методе' createDummyData'. _Как вы реализуете ту же логику для данных, возвращаемых с сервера? _ –