Я создал пользовательскую директиву в своем приложении, которое использует D3.js. Я хочу, чтобы иметь возможность вызвать вызов API для загрузки большего количества данных, когда пользователь нажимает на узел в моей визуализации D3. Это потребует захвата данных, связанных с узлом, который был нажат, и передачи его обратно на мой контроллер. Затем контроллер обрабатывает вызов функции для получения большего количества данных.Как передать данные из директивы контроллеру
Чтобы начать работу, я просто пытаюсь зарегистрировать данные, связанные с узлом, на который пользователь щелкнул мой контроллер. Моя проблема в том, что эти данные в моем контроллере undefined
.
Соответствующая директива Код:
angular.module('gameApp')
.directive('gmLinkAnalysis', gmLinkAnalysis);
gmLinkAnalysis.$inject = ['$location', 'd3'];
function gmLinkAnalysis($location, d3) {
var directive = {
restrict: 'E',
templateUrl: '/app/gmDataVis/gmLinkAnalysis/gmLinkAnalysis.directive.html',
scope: {
data: '=',
logNode: '&'
},
link: function(scope) {
...
function click(d) {
scope.logNode(d);
}
}
};
return directive;
}
HTML:
<gm-link-analysis data="connections.users" log-node="connections.logNode(d)"></gm-link-analysis>
Соответствующий код контроллера:
angular.module('gameApp')
.controller('ConnectionsController', ConnectionsController);
function ConnectionsController() {
var vm = this;
...
vm.logNode = function(d) {
console.log(d);
};
}
Если я заменю d
в моем HTML со строкой, такие как «привет мир "(log-node="connections.logNode('hello world')"
) он правильно зарегистрирован. Таким образом, моя проблема заключается в том, что я не передавал свои данные в качестве параметра в своем html. Как я могу это сделать?
$ широковещательная передача действительно удобна, но связанные с ней накладные расходы (с точки зрения дайджеста ect ..) и позже создают проблемы ремонтопригодности. НО да, это действительно работает. – heavyhorse
@heavyhorse Я категорически не согласен, используя '$ broadcast', вы должны иметь только« несогласованные »события, если какое-либо из имен методов изменится в будущем. Вызов методов будет более точным, а модели данных будут менее сложными. Кроме того, легче было бы отлаживать и проверять тип. – Theodore