2014-10-23 2 views
4

Просто пытаясь понять, почему в этом случае мне нужно будет использовать $ scope. $ apply? Согласно всей информации, которую я читал о предмете, мне не нужно, поскольку все происходит внутри Angular? Что мне не хватает?

В мой контроллер:

$scope.savePreset = function(columns, $event){ 
    $event.preventDefault(); 
    preset.name = prompt("Please enter preset name", "My Preset"); 
    if (preset.name != null) { 
    preset.columns = $scope.columns; 
    $scope.presets[preset.name] = preset; // (Object) 
    // Without $scope.$apply() here, view isn't updated. Why? 
    alert('Your preset "' + preset.name + '" has been saved.'); 
    $scope.loadPreset(preset.name); 
    } else { 
    alert('Please enter a valid name.'); 
    } 
} 

(функция savePreset называется в директиве нг-клик, и есть более нг повтора для preset in presets, который не обновляется).

Спасибо, Пим

+0

могли бы вы опубликовать пример в jssfidle ? –

+2

Это из-за 'подсказки'. Вот такой же вопрос: http://stackoverflow.com/questions/16351184/error-digest-already-in-progress-in-angularjs-when-using-alert –

ответ

3

, как указано в комментарии @Sergiu Paraschiv, используя функции, которые завернуты в window останавливал угловой $digest цикл, поэтому мой совет заключается в использовании $window поставщик и $window.prompt и $ window.alert функции Я думаю, что они будут работать

here is a example

+0

Я буду отмечать это как ответ, так как вы также предоставляете обходное решение, спасибо. – Pim

+0

, так как вы отметили мой ответ, я поделюсь им и в twitter), его действительно интересный вопрос –

1

~ Подскажите, предупреждение .. приостановит выполнение кода (блокирует нить), чтобы предотвратить подобные setInterval, SetTimeout сходить с ума.

Цикл $ digest состоит из двух небольших петель: , когда вы делаете запрос. $ evalAsync используется, а код внутри выполняется вне углового. Это обычно делается с помощью setTimeout (0).

Итак, в одном предложении: это ошибка подсказки, вам может быть лучше с виджетами, которые делают то же самое.

Edit: К сожалению, представленный поститься: вот оригинальный ответ: Error: $digest already in progress in angularjs when using alert

+1

Вы просто скопировали ответ здесь: http: // stackoverflow. com/questions/16351184/error-digest-уже-in-progress-in-angularjs-when-using-alert По крайней мере, ссылка на него ... –

+0

Это основано на том же ответе, но не знает, как сформулировать это, поэтому я обобщил статью; но отправляется перед его редактированием, спасибо за указание, что хотя –

+0

Пока вы ссылаетесь на исходный ответ, все в порядке. –

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