AngularJSでjQueryのslideToggleを複製するこの素敵なディレクティブを使用しています。IE11では動作しません。エラーはなく、コードはIE11でフィディルドを開くと機能しません。どのようにIE11で動作するように '修正'のアイデアですか?JavaScriptコードは他のブラウザでも機能しますが、ie11ではAngularJSが壊れていますか?
http://jsfiddle.net/rh7z7w0a/2/
angular.module('angularSlideables', [])
.directive('slider', function() {
return {
restrict:'A',
compile: function (element) {
// wrap tag
var contents = element.html();
element.html('<div class="slideable_content" style=" margin:0 !important; padding:0 !important" >' + contents + '</div>');
return function postLink(scope, element, attrs) {
var i = 0;
// default properties
scope.$watch(attrs.slider, (n, o) => {
if (n !== o) {
i++;
var target = element[0],
content = target.querySelector('.slideable_content');
if(n) {
content.style.border = '1px solid rgba(0,0,0,0)';
var y = content.clientHeight, z = i;
content.style.border = 0;
target.style.height = y + 'px';
setTimeout(() => {
if (z === i) {
target.style.height = 'auto';
}
}, 500);
} else {
target.style.height = target.clientHeight + 'px';
setTimeout(() => {
target.style.height = '0px';
});
}
}
});
attrs.duration = (!attrs.duration) ? '0.5s' : attrs.duration;
attrs.easing = (!attrs.easing) ? 'ease-in-out' : attrs.easing;
element.css({
'overflow': 'hidden',
'height': '0px',
'transitionProperty': 'height',
'transitionDuration': attrs.duration,
'transitionTimingFunction': attrs.easing
});
};
}
};
});
問題は、このセクションで行うことのようです:
scope.$watch(attrs.slider, (n, o) => {
この回答が投票された理由はわかりませんが、それはまさに上記のやや早い答えと同じです。 – Andy