Я делаю директиву, содержащую холст, и у меня возникают проблемы с доступом к нему во всех местах, где мне нужно. В настоящее время я настраиваю холст в директиве link
и рисую на нем некоторые начальные элементы, но мне также нужно получить доступ к тому же холсту в контроллере моей директивы, чтобы обновить его. На данный момент моя директива заявление выглядит следующим образом:Могу ли я установить свойство scope из функции ссылки директивы?
angular.module('myModule').directive('myCanvasDirective', CanvasDirective);
function CanvasDirective() {
var linker = function (scope, element, attrs) {
scope.vm.ctx = element[0].childNodes[0].getContext('2d');
//do some initial drawing using scope.vm.ctx
//this works
}
return {
priority: 1001,
restrict: 'E',
link: linker,
scope: {
displayValue: '=displayValue'
},
template: '<canvas id="myCanvas" width="80" height="80" />',
controller: MyCanvasController,
controllerAs: 'vm',
bindToController: true
};
};
function MyCanvasController() {
var vm = this;
vm.draw = function() {
vm.ctx.strokeStyle = '#808080';
//vm.ctx is unavailable here despite being attached to scope in linker
};
vm.draw();
};
Как я могу получить доступ к моему контексту холста в MyCanvasController
? Поскольку эта директива будет использоваться много раз на странице благодаря нескольким ngRepeat
, я бы предпочел не просто использовать document.getElementById()
.
Спасибо. Я не понял, что «связь» произошла после контроллера - или, действительно, вы можете передать контроллер в функцию связи! – Mourndark