Desafortunadamente, no puedo crear un fragmento reproducible para este escenario. Está ocurriendo en una base de código bastante complicada, basta con decir.
Tengo un método de componente onClick que establece un indicador en verdadero. p.ej
// in the template <button type='button' ng-click="onClick()"></button> //javascript angular.module('myModule') .component('MyComponent', { ... controller: [function(){ var ctrl = this; ctrl.showModal = false; ctrl.onClick = function() { ctrl.showModal = true; } }] }) Este indicador se usa con un ng-if que crea una instancia de otro componente que $onInit representa un modal. p.ej
//in the template <my-modal-component ng-if="$ctrl.showModal"></my-modal-component> //javascript angular.module('myModule') .component('myModalComponent', { ... controller: [function(){ // renders third party modal var renderModal = function() {} // makes and returns an api call to get some data as a promise var getRelevantData = function(){} this.$onInit = function () { getRelevantData().then(function(){ renderModal(); }) } }] }) Por alguna extraña razón, myModalComponent en realidad obtiene dos instancias separadas (es decir, se procesa dos veces, una encima de la otra) cuando se hace clic en el botón. Sé que hay algunos matices ng-if con el alcance, pero no estoy usando $scope aquí, e incluso poner la bandera dentro de un objeto no funcionó.
ng-show con algunos controles si funciona en la representación del tipo modal, pero mis enlaces de datos se arruinan (un método que paso a myModalComponent se define cuando ng-show es falso pero cuando ng-show cambia a verdadero, no está definido) entonces Prefiero no meterme en ese agujero de conejo si puedo; además, creo que ng-if tiene mucho más sentido aquí.
Aún más loco, si pongo un $timeout(, 10000) para retrasar la configuración de la bandera a 10 segundos al hacer clic en el botón ( onClick ), el modal todavía se muestra una vez inmediatamente y diez segundos después, otro modal se muestra encima de él .
Es cierto que trato de mantenerme alejado del ciclo de resumen, ya que sé que es algo importante que saber pero, irónicamente, es una especie de anti-patrón con el que meterse... Entonces, ¿alguien tiene alguna idea?
Extraño Reaccionar.
El problema estaba usando angular 1.5.9. He visto otros problemas de resumen, pero los he tratado de forma independiente, pero este fue más o menos un problema. Así que actualicé a 1.8 y el problema desapareció.