IE8 аварийно завершает работу с AngularJS и динамическим контентом

У меня есть следующий код:

<blockquote class='mt20'>
    <p><span>&ldquo;</span><span>{{iq.quote}}</span><span>&rdquo;</span></p>
    <footer><cite class="dark-grey">{{iq.author}}</cite></footer>
</blockquote>

По какой-то причине это вызывает сбой IE8. Я сделал много отладки и обнаружил, что когда объект iq содержит только цитату:

{quote:"some quote"}

браузер не вылетает. Вылетает только с цитатой и автором.

Я использую специальную функцию для получения своих данных. Это выглядит как:

this.get = function(){
    var arr = {};
    if(!arr.length){
        $http.get('url').success(function(data){
            $.extend(arr, data);
        });
    }
    return arr;
}

Я использую это, потому что объект автоматически привязывается, поэтому мне не нужно его смотреть. Похоже, что сбой происходит при расширении данных до объекта, когда представление пытается обновить. Какие-нибудь мысли?


person William Neely    schedule 30.10.2015    source источник


Ответы (1)


Я смог исправить это, изменив привязку контента с помощью {{}} на ng-bind.

<blockquote>
    <p><span>&ldquo;</span><span ng-bind="iq.quote"></span><span>&rdquo;</span></p>
    <footer><cite ng-bind="iq.author"></cite></footer>
</blockquote>

У меня есть гипотеза, что элемент нижнего колонтитула HTML5 в сочетании с привязкой содержимого {{}} и динамическим обновлением вызвал утечку памяти, которая привела к сбою IE8, но я не могу это доказать. Я знаю, что когда содержимое установлено и не изменено (например, если вы используете $http.get вместо моего метода), браузер не падает. Я также использовал:

var obj = {}

а также:

delete obj.key

Я изменил это на:

var obj = new Object()

на основе этого сообщения: https://markfeimer.wordpress.com/2014/05/23/internet-explorer-8-javascript-delete-keyword-bug/

person William Neely    schedule 30.10.2015