page change javascript angularjs angularjs-directive angularjs-scope angularjs-ng-repeat

javascript - change - En Angular: son los métodos pre y post de la función de compilación los mismos que los pre y post del enlace



page title angular 4 (2)

En una función de compilación de directivas angulares hay un pre y post. ¿Es este pre y post realmente el mismo que la función de enlace?

Por ejemplo, en el siguiente código, ¿la función de enlace es la misma (acceso directo si lo prefiere) como pre y post de la función de compilación debajo de ella?

Enlazar

.... link: { pre: function(scope, elem, attr) { //stuff }, post: function(scope, elem, attr) { //stuff } } ....

Compilar...

.... compile: function(tElem, tAttrs){ return { pre: function(scope, iElem, iAttrs){ //stuff }, post: function(scope, iElem, iAttrs){ //stuff } } } .....


Cuando ocurre esta sobrecarga, ¿está consciente de que algo diferente está sucediendo (es decir, si se agrega alguna otra funcionalidad) como se supone que devuelve pre y post de la compilación?

Si observa el código fuente , cuando $directiveProvider registra las directivas, si falta la propiedad de compile y existe la propiedad de link , crea una propiedad de compile que es una función vacía que devuelve la propiedad del link .

Entonces, la respuesta es que las funciones de enlace devueltas por la función de compilación son las mismas que las funciones de enlace proporcionadas por la propiedad de link del DDO. No se agrega ninguna otra funcionalidad.


La compilación se ejecuta primero (y por lo general es donde usted maipula sus elementos dom de "plantilla"). El enlace se ejecuta en segundo lugar, y generalmente es donde adjunta su directiva a $ scope.

También se ejecutan en un orden específico, por lo que puede usar ese hecho cuando diseña directivas que requieren una configuración directiva "principal" para funcionar correctamente (como una cosa tr: td sorta).

Hay un excelente artículo sobre el tiempo para compilar contra el enlace que puede ver para mayor claridad.

Además, hay una respuesta de stack de nivel muy bajo a una pregunta similar que te podría gustar (ten en cuenta que NO es la que aparece primero, es la que más votos ha subido).

Entonces, ¿cuál es la diferencia?

Entonces, ¿el enlace pre / post de compilación es "el mismo" que la función de enlace? Tú decides.

Si define compilar en una directiva, el marco ignora su función de enlace (porque se supone que la función de compilación devuelve las funciones de enlace pre / post).

Es un poco como las sobrecargas de link compile.postLink y link.pre sobrecargas de compile.preLink .