[英]Angular modal instance can't read DOM elements
嗨我玩角度模態實例..
但是當我在模態控制器中聲明一個querySelector時,它給出了無法讀取屬性'querySelector'為null的控制台錯誤
HTML
<body>
<div id="signature-pad">
<canvas width="300" height="300"></canvas>
<div class="description">Sign above</div>
<button class="button clear" data-action="clear">Clear</button>
</div>
</body>
<div class="modal-footer">
<button class="btn btn-success btn-lg" ng-click="ok();">Gem & Godkend</button>
<button class="btn btn-warning btn-lg" ng-click="cancel()">Annuler</button>
</div>
JS - ModalInstanceController
var ModalInstanceCtrl = function ($scope, $modalInstance) {
$scope.init = function() {
var wrapper = document.getElementById("signature-pad"),
clearButton = wrapper.querySelector("[data-action=clear]"),
canvas = wrapper.querySelector("canvas"),
signaturePad;
signaturePad = new SignaturePad(canvas);
clearButton.addEventListener("click", function (event) {
signaturePad.clear();
});
$scope.ok = function () {
$modalInstance.close(signaturePad.toDataURL());
};
$scope.cancel = function () {
$modalInstance.dismiss('cancel');
};
};
$modalInstance.opened.then($scope.init);
};
所以它接縫像,在模型中找不到dom元素..:s我可以嘗試加載,首先使用$modalInstance.opened.then($scope.init);
建模到dom $modalInstance.opened.then($scope.init);
但這也不起作用
Umm接縫需要首先加載DOM元素..在這里找到我的答案https://github.com/angular-ui/bootstrap/issues/2586
$scope.init = function() {
var wrapper = document.getElementById("signature-pad"),
...
}
$modalInstance.opened.then($scope.init);
這首先初始化dom elemtens,所以查詢選擇器可以看到dom元素! :)
我只需要<div ng-init="init()"> in html
在模板加載並注入DOM之前,控制器被實例化。 一般來說,在控制器中執行此類DOM操作並不是一個好主意。 你應該為此創建指令。 例如:
add.directive('signaturePad', function() {
return {
link: function(scope, element) {
var wrapper = element[0],
clearButton = wrapper.querySelector("[data-action=clear]"),
saveButton = wrapper.querySelector("[data-action=save]"),
canvas = wrapper.querySelector("canvas"),
signaturePad;
signaturePad = new SignaturePad(canvas);
clearButton.addEventListener("click", function (event) {
signaturePad.clear();
});
}
};
});
並像這樣使用它:
<div signature-pad id="signature-pad">
<canvas width="100" height="100"></canvas>
<div class="description">Sign above</div>
<button class="button clear" data-action="clear">Clear</button>
<button class="button save" data-action="save">Save</button>
</div>
我同意dfsk,這是一個更優雅的解決方案,只要確保,如果這是一個bootstrap ui-tab的一部分,不要忘記添加ng-if =“activeTab = 2”,其中2是零 - 簽名選項卡所在的索引選項卡。 activeTab是包含當前選項卡的范圍變量。 等到DOM更新(通過$ timeout(fn(){}))。 那時可以很好地訪問和處理canvas元素的正確尺寸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.