Atualmente, estou aprendendo o AngularJS e estou tendo dificuldades para entender a diferença entre ng-bind
e ng-model
.
Alguém pode me dizer como eles diferem e quando um deve ser usado sobre o outro?
Atualmente, estou aprendendo o AngularJS e estou tendo dificuldades para entender a diferença entre ng-bind
e ng-model
.
Alguém pode me dizer como eles diferem e quando um deve ser usado sobre o outro?
ng-bind possui ligação de dados unidirecional ($ scope -> view). Possui um atalho {{ val }}
que exibe o valor do escopo $scope.val
inserido no html, em queval
está o nome da variável.
O ng-model deve ser colocado dentro dos elementos do formulário e possui ligação de dados bidirecional ($ scope -> view e view -> $ scope), por exemplo <input ng-model="val"/>
.
A resposta de Tosh chega ao cerne da questão. Aqui estão algumas informações adicionais ....
Filtros e formatadores
ng-bind
eng-model
ambos têm o conceito de transformar dados antes de enviá-los para o usuário. Para esse fim,ng-bind
usa filtros , enquantong-model
usa formatadores .filtro (ng-bind)
Com
ng-bind
, você pode usar um filtro para transformar seus dados. Por exemplo,<div ng-bind="mystring | uppercase"></div>
,ou mais simplesmente:
<div>{{mystring | uppercase}}</div>
Observe que
uppercase
é um filtro angular interno , embora você também possa criar seu próprio filtro .formatador (modelo ng)
Para criar um formatador de ng-model, você cria uma diretiva que faz isso
require: 'ngModel'
, o que permite que essa diretiva obtenha acesso aos ngModelcontroller
. Por exemplo:Então no seu parcial:
Isso é essencialmente o
ng-model
equivalente ao que ouppercase
filtro está fazendo nong-bind
exemplo acima.Analisadores
Agora, e se você planeja permitir que o usuário altere o valor de
mystring
?ng-bind
só tem ligação unidirecional, do modelo -> visualização . No entanto,ng-model
pode-se ligar da view -> model, o que significa que você pode permitir que o usuário altere os dados do modelo e, usando um analisador, pode formatar os dados do usuário de maneira simplificada. Aqui está o que parece:Jogue com um plunker ao vivo dos exemplos do
ng-model
formatador / analisadorO quê mais?
ng-model
também possui validação embutida. Basta modificar o seu$parsers
ou$formatters
função a ser chamada ngModel 'scontroller.$setValidity(validationErrorKey, isValid)
função .O Angular 1.3 possui uma nova matriz $ validators que você pode usar para validação em vez de
$parsers
ou$formatters
.O Angular 1.3 também possui suporte a get / setter para o ngModel
fonte
ngModel
A diretiva ngModel vincula uma entrada, seleção, área de texto (ou controle de formulário personalizado) a uma propriedade no escopo.Esta diretiva é executada no nível de prioridade 1.
Exemplo Plunker
JAVASCRIPT
CSS
HTML
O ngModel é responsável por:
ngBind
O atributo ngBind informa ao Angular para substituir o conteúdo do texto do elemento HTML especificado pelo valor de uma determinada expressão e atualizar o conteúdo do texto quando o valor dessa expressão for alterado.Esta diretiva é executada no nível de prioridade 0.
Exemplo Plunker
JAVASCRIPT
HTML
O ngBind é responsável por:
fonte
Se você está hesitando em usar
ng-bind
oung-model
, tente responder a estas perguntas:Sim:
ng-bind
(ligação unidirecional)Não:
ng-model
(ligação bidirecional)Sim:
ng-bind
Não:
ng-model
(você não deve usar ng-bind onde o valor for necessário)Sim:
ng-model
(você não pode usar ng-bind com<input>
tag)Não:
ng-bind
fonte
ng-model
A diretiva ng-model no AngularJS é uma das maiores forças para vincular as variáveis usadas no aplicativo com componentes de entrada. Isso funciona como ligação de dados bidirecional. Se você deseja entender melhor sobre as ligações bidirecionais, possui um componente de entrada e o valor atualizado nesse campo deve ser refletido em outra parte do aplicativo. A melhor solução é vincular uma variável a esse campo e gerar essa variável sempre que você desejar exibir o valor atualizado por meio do aplicativo.
ng-bind
O ng-bind funciona muito diferente do ng-model. ng-bind é uma forma de ligação de dados usada para exibir o valor dentro do componente html como HTML interno. Esta diretiva não pode ser usada para ligação com a variável, mas apenas com o conteúdo dos elementos HTML. De fato, isso pode ser usado junto com o ng-model para vincular o componente aos elementos HTML. Esta diretiva é muito útil para atualizar blocos como div, span, etc. com conteúdo HTML interno.
Este exemplo ajudaria você a entender.
fonte
fonte
O ngModel normalmente usa tags de entrada para vincular uma variável que podemos mudar de variável da página controller e html, mas o ngBind usa para exibir uma variável na página html e podemos mudar variáveis apenas do controller e html just show variable.
fonte
Podemos usar ng-bind com
<p>
para exibir, podemos usar atalho parang-bind {{model}}
, não podemos usar ng-bind com controles de entrada html, mas podemos usar atalho parang-bind {{model}}
com controles de entrada html.fonte