Ich entwickle eine Web App mit AngularJS. Ich hatte einen Fehler, der aus dem Nichts auftauchte, es funktionierte gut und ich weiß wirklich nicht, warum es nicht mehr funktioniert.Uncaught TypeError: Eigenschaft OffsetWidth von # <HTMLElement>, die nur einen Getter hat, kann nicht gesetzt werden
So ist es in einer Direktive, ich versuche, Eigenschaft offsetWidth
eines Elements in der Richtlinie HTML-Vorlage zu setzen. Da ich wirklich nicht weiß, woher es kommen könnte, gebe ich dir den vollständigen Code meiner Direktive und Vorlage. Die Direktive erstellt eine App-Schaltfläche und behandelt deren visuellen Effekt beim Klicken. Es ist die Zeile $element[0].offsetWidth = $element[0].offsetWidth;
, die den Fehler auslöst. (Es ist ein Trick, um die Animation neu zu starten)
Ich wiederhole noch einmal, dieser Code war in Ordnung und ich bin fast sicher, dass ich keine Änderungen vorgenommen habe. Ich verwende Chrome, um zu debuggen, vielleicht kommt es davon?
Fehler: Uncaught TypeError: Cannot set property offsetWidth of #<HTMLElement> which has only a getter
Richtlinie:
'use strict';
XVMApp.directive('appButton', ['$location', function($location){
return {
restrict: 'E',
replace: true,
scope: {
img: '@',
fillPercent: '@?',
target: '@?'
},
link: function ($scope, $element) {
// Image percentage fill button
if($scope.fillPercent === undefined) $scope.fillPercent = '100';
// Click event
$element.on('click', function() {
// Url target
if($scope.target !== undefined){
$scope.$apply(function() {
$location.path($scope.target);
});
}
// Click effect
$element[0].preventDefault;
$element[0].classList.remove('app-button-click-effect');
$element[0].offsetWidth = $element[0].offsetWidth;
$element[0].classList.add('app-button-click-effect');
});
},
templateUrl: 'src/directive/appButton/app-button.html'
};
}]);
Vorlage:
<div class="app-button"
style="background-size: {{fillPercent}}%; ">
<div style="
background-image: url('src/assets/img/{{img}}');
background-repeat: no-repeat;
background-position: center;
background-size: {{fillPercent}}%;
height: 100%;
width: 100%; ">
</div>
</div>
Wenn ich nur offsetWidth Wert bekomme, funktioniert der Neustart Animation Trick trotzdem ($ element [0] .offsetWidth;), so ist mein Problem behoben. Aber ich frage mich immer noch, warum ich keinen Wert für die OffsetWidth-Eigenschaft festlegen kann? – sylvain1264