Я сделаю все возможное, чтобы ответить на вопрос в его нынешнем виде. Там нет ничего, что вызвало бы дайджест случиться с любым из этих линий:
$scope.model.property1.property2 = true;
this.model.property1.property2 = true;
Оба эти простые присваивания. Дайджесты запускаются из кода, который его явно вызывает. Обычно это происходит либо через $ scope. $ Eval(), $ scope. $ Apply() и явная $ scope. $ Digest() вызывает. Например, ng-click связывается с элементами события click и вызывает $ scope. $ Apply() с функцией, прикрепленной к этой директиве.
Цикл $ digest сначала выполняет выражения для оценки в asyncQueue области (заполненной $ scope. $ EvalAsync()). Затем он перемещается по областям и оценивает, какие часы нужно запускать, и вызывает соответствующие функции, назначенные им (если он находит изменение).
Так пару очков, чтобы забрать, которые относятся на ваш вопрос:
- Обе эти строки не вызовет $ переваривать
- Угловая не нужно различать две строки кода, потому что они оба являются простым назначением для одного и того же свойства (предполагая this.model === $ scope.model, как было указано в вопросе). Даже если this.model и $ scope.model были разными, это еще простое назначение, но для разных целей.
- Часы «огонь» в цикле $ digest, когда пройдены области.
демонстрирует это с высокого уровня. Обратите внимание, что нет явных часов, наложенных на $ scope.model.property1.property2 или this.model.property1.property2. Представление обновляется, поскольку оба назначения выполняются в отдельных ng-кликах, которые запускают цикл $ digest. {{Model.property1.property2}} в представлении устанавливает часы на это значение, которое обновляется через каждый ng-щелчок, когда происходит $ digest.
Не видя пример кода, в котором происходят реальные различия, я не могу сказать, почему одни ведут себя иначе, чем другие.
Можете ли вы уточнить немного больше? В дайджесте обрабатывается asyncQueue по областям и перемещается по областям для повторения часов. Что вы подразумеваете под одним, вызовет дайджест, а другой - нет? Я создал скрипку, которая использует обе эти строки внутри ng-click, и оба запускают дайджест и свойство update2. http://jsfiddle.net/11j8vpL8/ – Patrick
ОК, поэтому мое понимание неверно. Оба будут запускать дайджест? Должно быть, в фактическом коде были некоторые смягчающие обстоятельства. – Ben
Дайджесты запускаются в угловом коде (например, ng-click запускает дайджест, вводя в ввод модели ng и т. Д.) Или из «внешнего» углового кода через область. $ Apply(). Можете ли вы предоставить код, в котором один кусок кода демонстрирует другое поведение, чем другое через jsfiddle? В моей последней скрипте интерполяция ({{model.property1.property2}}) ставит часы на это свойство, поэтому не имеет значения, обновляется ли она с помощью этого или $ scope. – Patrick