Este é o HTML para minha diretiva:
<textarea data-modal="modal" data-mydir ng:model="abc"></textarea>
Em minha diretriz, tenho o seguinte:
return {
require: 'ngModel',
replace: true,
scope: {
modal: '=modal',
ngModel: '=',
pid: '=pid'
},
Alguém pode me dizer qual é o significado de require: 'ngModel'? Eu vejo isso em muitas diretivas diferentes. Posso chamar isso de modal de dados?
Estou confuso porque quando mudo para modal de dados recebo uma mensagem do Angular dizendo
Controller 'ngModel', required by directive 'textarea', can't be found!
ng-model='property'
Respostas:
A
require
instrução fornece o controlador para a diretiva nomeada como o quarto argumento para sualink
função. (Você pode usar^
para procurar o controlador em um elemento pai;?
torna-o opcional.) Portanto,require: 'ngModel'
fornece o controlador para angModel
diretiva, que é umngModelController
.Os controladores de diretiva podem ser escritos para fornecer APIs que outras diretivas podem usar; com
ngModelController
, você obtém acesso a uma funcionalidade especial integradangModel
, incluindo a obtenção e configuração do valor. Considere o seguinte exemplo:Esta diretiva usa o
ngModel
controlador para obter e definir o valor da cor do seletor de cores. Veja este exemplo JSFiddle: http://jsfiddle.net/BinaryMuse/AnMhx/Se você estiver usando
require: 'ngModel'
, provavelmente não deveria usar tambémngModel: '='
em seu escopo isolado; ongModelController
dá a você todo o acesso necessário para alterar o valor.O exemplo inferior na página inicial do AngularJS também usa essa funcionalidade (exceto usando um controlador personalizado, não
ngModel
).Quanto à capitalização de uma diretiva, por exemplo,
ngModel
vsng-model
vsdata-ng-model
: enquanto Angular suporta o uso de vários formulários no DOM, quando você se refere a uma diretiva por nome (por exemplo, ao criar uma diretiva ou usandorequire
), você sempre usa o lowerCamelCase forma do nome.fonte
require: 'ngModel'
ser usadongModel: '='
?Conforme declarado na documentação de Criação de diretivas personalizadas : (Em primeiro lugar, para sua pergunta no comentário)
A resposta:
Exemplos:
Em segundo lugar, o que
?ngModel
representa?Ao usar sua diretiva, ela força seu uso junto com o atributo / controlador
ng-model
.O
require
cenário(Extrato do livro AngularJS de Brad Green & Shyam Seshadri)
fonte
O
require:'ngModel'
erequire:'^ngModel'
permite que você injete o modelo anexado ao elemento ou seu elemento pai ao qual a diretiva está vinculada.É basicamente a maneira mais fácil de passar ngModel para a função link / compilar em vez de passá-lo usando uma opção de escopo. Depois de ter acesso ao ngModel, você pode alterar seu valor usando
$setViewValue
, torná-lo sujo / limpo usando$formatters
, aplicar observadores, etc.Abaixo está um exemplo simples para passar ngModel e alterar seu valor após 5 segundos.
Demo: http://jsfiddle.net/t2GAS/2/
fonte