He leído mucho sobre el uso de estos símbolos en la implementación de directivas personalizadas en AngularJS, pero el concepto aún no está claro para mí. Quiero decir, ¿qué significa si uso uno de los valores de alcance en la directiva personalizada?
var mainApp = angular.module("mainApp", []);
mainApp.directive('modalView',function(){
return{
restrict:'E',
scope:'@' OR scope:'&' OR scope:'=' OR scope:'>' OR scope:true
}
});
¿Qué estamos haciendo exactamente con el alcance aquí?
Tampoco estoy seguro de si "alcance: '>'" existe en la documentación oficial o no. Se ha usado en mi proyecto.
Editar-1
El uso de "scope: '>'" fue un problema en mi proyecto y se ha solucionado.
@?
?<
no solo es compatible con los componentes de 1.5, sino que también es compatible con las directivas. @Homer?
denota el atributo como opcional .>
No está en la documentación.<
es para enlace unidireccional.@
el enlace es para pasar cadenas. Estas cadenas admiten{{}}
expresiones para valores interpolados.=
el enlace es para el enlace de modelo bidireccional. El modelo en el ámbito principal está vinculado al modelo en el ámbito aislado de la directiva.&
el enlace es para pasar un método al alcance de su directiva para que pueda llamarse dentro de su directiva.Cuando establecemos el alcance: verdadero en la directiva, Angular js creará un nuevo alcance para esa directiva. Eso significa que los cambios realizados en el alcance de la directiva no se reflejarán en el controlador principal.
fuente
<
enlace unidireccional=
enlace bidireccional&
función vinculante@
pasar solo cadenasfuente
Cuando creamos una directiva del cliente, el alcance de la directiva podría estar en un alcance aislado, lo que significa que la directiva no comparte un alcance con el controlador; tanto la directiva como el controlador tienen su propio alcance. Sin embargo, los datos se pueden pasar al alcance de la directiva de tres formas posibles.
@
literal de cadena, pasar el valor de la cadena, enlace unidireccional.=
literal de cadena, pasar el objeto, enlace de 2 maneras.&
literal de cadena, llama a la función externa, puede pasar datos de la directiva al controlador.fuente
La documentación de AngularJS sobre directivas está bastante bien escrita sobre lo que significan los símbolos.
Para ser claros, no puedes simplemente tener
en una definición directiva. Debe tener propiedades para las que se aplican esos enlaces, como en:
Le sugiero que lea la documentación y los tutoriales en el sitio. Hay mucha más información que necesita saber sobre ámbitos aislados y otros temas.
Aquí hay una cita directa de la página vinculada anteriormente, con respecto a los valores de
scope
:Consultado el 13 de febrero de 2017 en https://code.angularjs.org/1.4.11/docs/api/ng/service/ $ compile # -scope-, con licencia CC-by-SA 3.0
fuente
Tuve problemas para vincular un valor con cualquiera de los símbolos en AngularJS 1.6. No obtuve ningún valor en absoluto, solo
undefined
, a pesar de que lo hice exactamente de la misma manera que otros enlaces en el mismo archivo que funcionó.El problema era: mi nombre de variable tenía un guión bajo.
Esto falla:
Esto funciona:
(No estaba completamente relacionado con la pregunta original, pero ese fue uno de los principales resultados de búsqueda cuando lo busqué, así que espero que esto ayude a alguien con el mismo problema).
fuente