AngularJS $ дайджест уже в процессе

Я получаю сообщение об ошибке при загрузке данных в угловое выражение. Данные загружаются, но я получаю ошибку $digest, которая уже выполняется.

var dom = angular.element($compile(template)($scope));
$scope.$apply();
var html = $('<div>').append(dom).html();

Я дам вам небольшую часть моего шаблона здесь:

<b>Name: </b>{{model.project.description}}<br />
<b>Littera: </b>{{model.littera}}<br />
<b>Address: </b>{{model.address}}<br />

Теперь я попытался обернуть $scope.$ Apply() в оператор if, как показано ниже. Но я слышал, что это плохой способ сделать это. Думаю, это не имеет большого значения, так как это не сработало.

if (scope.$$phase) {
     scope.$apply();
}

Устранены ошибки, но теперь привязка данных не работает. Теперь вывод - это выражения, а не фактические данные. Я также попытался поместить $scope.$ Apply() в функцию $timeout, но, опять же, теперь мы получаем только выражение, а не данные.

Этот код находится в директиве. Я дал вам только этот код, так как остальная часть кода в директиве здесь не имеет значения. Что мне нужно сделать, чтобы привязка данных работала, все еще используя $timeout?

Заранее спасибо.

РЕДАКТИРОВАТЬ: жизненно важной частью я забыл сказать, что я считаю, что ошибка для 2 выражений, которые являются пустыми. В отладчике Chrome они становятся неопределенными.

1 ответ

Решение

Рассматривали ли вы реализацию своей директивы в более совместимом виде вместо того, чтобы иметь дело с $ apply самостоятельно?

Ошибки такого рода обычно возникают, когда часть кода выполняется вне углового контекста, например, код jquery.

Я буду рекомендовать избегать jQuery настолько, насколько это возможно, чтобы написать вашу директиву. При необходимости рассмотрите возможность использования функции ссылки.

Другие вопросы по тегам