Saludos,
Al seguir la guía de estilo Angular 1.x para directivas, si estoy haciendo referencia a la matriz scope.vm.virtStats desde el controlador, vuelve como indefinido. pero si hago referencia a un objeto simple del controlador, como scope.vm.title, devuelve un valor. ¿Porqué es eso? Porque veo que scope.vm tiene ese virtStats
matriz en la consola.
.module('app.dashboard')
.controller('Dashboard', Dashboard)
.directive('d3Chart', buildChart);
`function buildChart() {
var directive = {
restrict: 'EA',
link: linkFunc,
};
return directive;
function linkFunc(scope, el, attr, ctrl) {
...lots of d3 visualization code here
console.log(scope.vm)
}
function Dashboard($state, $scope, dataservice, logger) {
var vm = this;
vm.virtStats = [];
vm.title = 'Dashboard';
clearSearchResult();
activateVirtsData();
function clearSearchResult() {
vm.virtStats = [];
};
function activateVirtsData() {
return dataservice.getVirtStatsData().then(function (data) {
vm.virtStats = data;
return vm.virtStats;
});
} );
};
@yosiasz Esto sucede porque está intentando acceder a la matriz dentro de la función link
de la directiva que se llama antes de activateVirtsData
gracias @bampakoa!!! ¡basura! He estado mirando este código demasiado tiempo.
@bampakoa pregunta. pero se llama al controlador antes de .directive?
.controller('Dashboard', Dashboard)
.directive('d3Chart', buildChart);
@yosiasz No se ejecutan en el orden en que lo declaras. Incluso si haces esto:
.directive('d3Chart', buildChart)
.controller('Dashboard', Dashboard)
el orden de tiempo de ejecución será el mismo. Déjame aclararte si no lo entendiste.
¡Muy informativo! Entonces tendré que averiguar cómo llenar esa matriz para que linkFunc tenga acceso a esa matriz. ¡Gracias!
¿Es este conocimiento tribal o hay documentación para este comportamiento?
Creo que puede encontrar información relacionada en la documentación oficial de AngularJS .