Este es el HTML de mi directiva:
<textarea data-modal="modal" data-mydir ng:model="abc"></textarea>
En mi directiva tengo esto:
return {
require: 'ngModel',
replace: true,
scope: {
modal: '=modal',
ngModel: '=',
pid: '=pid'
},
¿Alguien puede decirme cuál es el significado de require: 'ngModel'? Veo esto en muchas directivas diferentes. ¿Puedo llamar a este modal de datos?
Estoy confundido porque cuando lo cambio a modal de datos, recibo un mensaje de Angular que dice
Controller 'ngModel', required by directive 'textarea', can't be found!
ng-model='property'
Respuestas:
La
require
instrucción le da el controlador para la directiva que nombra como el cuarto argumento de sulink
función. (Puede usar^
para buscar el controlador en un elemento padre; lo?
hace opcional). Entoncesrequire: 'ngModel'
le da el controlador para langModel
directiva, que es unngModelController
.Los controladores de directivas se pueden escribir para proporcionar API que pueden utilizar otras directivas; con
ngModelController
, obtiene acceso a funciones especiales integradasngModel
, incluida la obtención y el establecimiento del valor. Considere el siguiente ejemplo:Esta directiva usa el
ngModel
controlador para obtener y establecer el valor del color del selector de colores. Vea este ejemplo de JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/Si está usando
require: 'ngModel'
, probablemente no debería usarlo tambiénngModel: '='
en su alcance aislado; elngModelController
que da todo el acceso que necesita para cambiar el valor.El ejemplo inferior en la página de inicio de AngularJS también usa esta funcionalidad (excepto que usa un controlador personalizado, no
ngModel
).En cuanto a las mayúsculas y minúsculas de una directiva, por ejemplo,
ngModel
vsng-model
vsdata-ng-model
: mientras que Angular admite el uso de múltiples formularios en el DOM, cuando se refiere a una directiva por su nombre (por ejemplo, al crear una directiva o al usarlarequire
), siempre usa lowerCamelCase forma del nombre.fuente
require: 'ngModel'
que deba usarsengModel: '='
?Como se indica en la documentación de Creación de directivas personalizadas : (En primer lugar, a su pregunta en el comentario)
La respuesta:
Ejemplos:
En segundo lugar, ¿qué
?ngModel
representa?Cuando usa su directiva, obliga a usarla junto con el atributo / controlador
ng-model
.El
require
escenario(Extracto del libro AngularJS de Brad Green & Shyam Seshadri)
fuente
El
require:'ngModel'
yrequire:'^ngModel'
permitir que se inyecte el modelo que se adjunta al elemento o su elemento padre en la que está ligada a la directiva.Es básicamente una forma más fácil de pasar ngModel a la función de enlace / compilación en lugar de pasarlo usando una opción de alcance. Una vez que tenga acceso a ngModel, puede cambiar su valor usando
$setViewValue
, ensuciar / limpiar usando$formatters
, aplicar observadores, etc.A continuación se muestra un ejemplo simple para pasar ngModel y cambiar su valor después de 5 segundos.
Demostración: http://jsfiddle.net/t2GAS/2/
fuente