2015-03-11 2 views
1

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

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 /> 

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

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

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

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

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

EDIT: Жизненно важной частью, о которой я забыл сказать, было то, что я считаю, что ошибка для двух выражений, которые пусты. В хром-отладчике они не определены.

+0

Если '' compile' используется внутри фаз ссылки директивы, нам не нужна 'scope. $ Apply()'. У вас есть какой-нибудь plnkr/скрипка для этого? –

+0

'$ apply' принимает функцию как свой первый параметр. Он запустит эту функцию, а затем вызовет '$ digest'. Создайте функцию для операторов '$ compile' и' append (dom) 'и передайте это в' $ apply', ваши данные затем должны заполнить. (Детали: http://jimhoskins.com/2012/12/17/angularjs-and-apply.html) – DRobinson

+0

Я подумывал сделать скрипку для этого. Но эта директива довольно сложна для угловых карт Google, для которых мы ее используем. Таким образом, отгоняя его, чтобы он работал на скрипке, казалось сложной задачей. Я забыл сказать, что код находится в обещании. Внутри .then (function() {}) –

ответ

0

Считаете ли вы, что вы применяете свою директиву более согласованно, вместо того, чтобы иметь дело с $ apply?

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

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

+0

Ну, код находится внутри функции ссылки. И нам нужно использовать jQuery здесь. В любом случае мы не нашли лучшего способа сделать это. Если у вас нет углового способа записи этой строки jQuery. –

+0

Думаю, тогда лучше переосмыслить и перепроектировать ваш взгляд и директиву вместо того, чтобы идти на какой-то хак. Это может помочь http://stackoverflow.com/questions/14994391/thinking-in-angularjs-if-i-have-a-jquery-background/15012542#15012542 –

+0

Хорошо, мне кажется, я должен это сделать. Спасибо. –

Смежные вопросы