parameter directivas compile angularjs angularjs-directive

angularjs - compile - $ aplicar vs $ digest en pruebas directivas



directivas angularjs (2)

Si tengo una directiva que responde al estado de un atributo particular en el alcance, y quiero cambiar ese atributo en mi prueba y verificar que responda correctamente, ¿cuál es la mejor manera de hacer ese cambio?

He visto estos dos patrones:

scope.$apply(function() { scope.myAttribute = true; });

y

scope.myAttribute = true; scope.$digest();

¿Cuál es la diferencia entre ellos, y cuál es mejor y por qué?


Como la documentación en sí misma menciona que $ competer cycle se realiza cada vez que se $scope.$apply . Según la guía del desarrollador sobre el scope

Después de evaluar la expresión, el método $ apply realiza un $ digest. En la fase $ digest, el alcance examina todas las expresiones $ watch y las compara con el valor anterior.

Y según la documentation API de Scope

Por lo general, no se llama a $ digest () directamente en controladores o en directivas. En cambio, una llamada a $ apply () (normalmente desde dentro de directivas) forzará un $ digest ().

Por lo tanto, no debe llamar explícitamente $digest , el método invocar $apply provocaría un ciclo de resumen.


scope.$digest() disparará a los observadores sobre el alcance actual, y sobre todos sus hijos, también. scope.$apply evaluará la función pasada y ejecutar $rootScope.$digest() .

El primero es más rápido, ya que necesita evaluar a los observadores para el alcance actual y sus hijos. El segundo es más lento, ya que necesita evaluar los observadores de $rootScope y todos sus ámbitos secundarios.

Cuando ocurre un error en uno de los vigilantes y utiliza scope.$digest , no se maneja a través del servicio $exceptionHandler , por lo que debe manejar la excepción usted mismo. scope.$apply utiliza un bloque try-catch internamente y pasa todas las excepciones a $exceptionHandler .