it-swarm.com.de

Angular wirft "Fehler: Ungültiges Argument". im IE

Ich habe eine Direktive, die nach jedem 10. Zeichen die Elemente des Elements und die Elemente wbr platziert. Ich verwende es beispielsweise für Tabellenzellen mit langem Text (z. B. URLs), sodass die Tabelle nicht überspannt wird. Code der Richtlinie:

myApp.directive('myWbr', function ($interpolate) {
    return {
        restrict: 'A',
        link: function (scope, element, attrs) {
            // get the interpolated text of HTML element
            var expression = $interpolate(element.text());

            // get new text, which has <wbr> element on every 10th position
            var addWbr = function (inputText) {
                var newText = '';
                for (var i = 0; i < inputText.length; i++) {
                    if ((i !== 0) && (i % 10 === 0)) newText += '<wbr>'; // no end tag
                    newText += inputText[i];
                }
                return newText;
            };

            scope.$watch(function (scope) {
                // replace element's content with the new one, which contains <wbr>s
                element.html(addWbr(expression(scope)));
            });
        }
    };
});

Funktioniert gut, außer in IE (Ich habe IE8 und IE9 ausprobiert), wo ein Fehler an die Konsole ausgegeben wird: Error: Invalid argument.

Hier ist jsFiddle , wenn Sie auf die Schaltfläche klicken, können Sie den Fehler in der Konsole sehen.

So naheliegende Frage: Warum ist der Fehler da, wo liegt er und warum nur im IE?

(Bonusfrage: Wie kann ich IE Dev-Tools erstellen, um mehr über Fehler zu erfahren, wie die Zeile aus dem Quellcode, weil ich einige Zeit gebraucht habe, um sie zu finden, Error: Invalid argument. nicht viel über den Ursprung. )

P.S .: Ich weiß, dass IE den Wbr überhaupt nicht kennt, aber das ist nicht das Problem.

Edit: In meiner realen Anwendung habe ich die Anweisung neu geschrieben, den Elementtext nicht zu betrachten und zu modifizieren, sondern den Eingabetext über das Attribut zu übergeben und funktioniert jetzt in allen Browsern einwandfrei. Ich bin aber immer noch neugierig, warum die ursprüngliche Lösung diesen Fehler im Internet Explorer ausgegeben hat und damit die Kopflast beginnt.

14
przno

Ihr Versuch, eine Direktive zum Einfügen von Elementen in Ihren String zu erstellen, führt zu einem bekannten Fehler in der Methode IE, die appendChild behandelt. Ich konnte Ihren Fehler IE mit Ihrer Geige reproduzieren, auch nachdem Sie den <div> vollständig entfernt hatten. 

Beachten Sie, dass Sie immer noch erhalten, wenn Sie Ihre div-Verkettung vollständig entfernen und versuchen, newText in der ursprünglichen Form zurückzugeben

Fehler: Ungültiges Argument.

Transklusion auf UI-Ansicht funktioniert nicht im IE9-10-11

9
Dave Alperovich

Mein "error invalid argument anonymous function call" wurde von mir geworfen, indem ich Folgendes mit dem folgenden Code tat.

Error:

<span data-ng-bind="name.first">{{name.first}}</span>

Kein Fehler:

<span data-ng-bind="name.first"></span>
1
n00bsauce

Keine Angular Antwort (und eine alte Frage, ich weiß), aber ich würde vorschlagen, dass Sie das Problem möglicherweise falsch angehen. Fügen Sie stattdessen Unterbrechungen ein (wodurch beispielsweise Markierungen in der Zeichenfolge ruiniert werden), verwenden Sie einfach die CSS-Textüberlauf- oder -Überlaufeigenschaft.

0
see sharper

Ich habe in IE denselben Fehler erhalten, als ich den folgenden Fehler in der HTML-Vorlage hatte:

<textarea disabled  [(ngModel)]="some.var">{{some.var}}</textarea>

disabled textarea erlaubt ngModel nicht im IE

Chrome, FF hat sich nicht beschwert, nur IE Edge. Es ist eine gute Idee, auch die Vorlage zu überprüfen

0
oFace