Antworten:
ng-bind verfügt über eine Einweg-Datenbindung ($ scope -> view). Es gibt eine Verknüpfung, {{ val }}
die den $scope.val
in HTML eingefügten Bereichswert anzeigt, wobei val
es sich um einen Variablennamen handelt.
ng-model soll in Formularelemente eingefügt werden und verfügt über eine bidirektionale Datenbindung ($ scope -> view und view -> $ scope), z <input ng-model="val"/>
.
Die Antwort von tosh bringt die Frage auf den Punkt . Hier einige zusätzliche Informationen ....
ng-bind
und ng-model
beide haben das Konzept, Daten zu transformieren, bevor sie für den Benutzer ausgegeben werden. Zu diesem Zweck ng-bind
verwendet Filter , während ng-model
Anwendungen Formatierer .
Mit ng-bind
können Sie einen Filter verwenden, um Ihre Daten zu transformieren. Zum Beispiel,
<div ng-bind="mystring | uppercase"></div>
,
oder einfacher:
<div>{{mystring | uppercase}}</div>
Beachten Sie, dass dies uppercase
ein integrierter Winkelfilter ist. Sie können jedoch auch einen eigenen Filter erstellen .
Um einen ng-Modellformatierer zu erstellen, erstellen Sie eine entsprechende Direktive, require: 'ngModel'
mit der diese Direktive auf ngModels zugreifen kann controller
. Zum Beispiel:
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$formatters.push(function(value) {
return value.toUpperCase();
});
}
}
}
Dann in Ihrem Teil:
<input ngModel="mystring" my-model-formatter />
Dies entspricht im Wesentlichen dem, ng-model
was der uppercase
Filter im ng-bind
obigen Beispiel tut .
Was ist nun, wenn Sie dem Benutzer erlauben möchten, den Wert von zu ändern mystring
? ng-bind
hat nur eine Einwegbindung aus Modell -> Sicht . Jedoch ng-model
binden kann aus Sicht -> Modell was bedeutet , dass Sie dem Benutzer ermöglichen , kann das Modell der Daten zu ändern, und mit Hilfe eines Parsers Sie die Daten in einer Weise rationalisiert des Benutzers formatieren. So sieht das aus:
app.directive('myModelFormatter', function() {
return {
require: 'ngModel',
link: function(scope, element, attrs, controller) {
controller.$parsers.push(function(value) {
return value.toLowerCase();
});
}
}
}
Spielen Sie mit einem Live-Plunker der ng-model
Formatierer / Parser-Beispiele
ng-model
hat auch eine integrierte Validierung. Einfach ändern Sie Ihre $parsers
oder $formatters
Funktion aufzurufen ngModel ‚s - controller.$setValidity(validationErrorKey, isValid)
Funktion .
Angular 1.3 verfügt über ein neues $ validators-Array, das Sie anstelle von$parsers
oderzur Validierung verwenden können$formatters
.
Angular 1.3 bietet auch Getter / Setter-Unterstützung für ngModel
Diese Anweisung wird auf Prioritätsstufe 1 ausgeführt.
Beispiel Plunker
JAVASCRIPT
angular.module('inputExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.val = '1';
}]);
CSS
.my-input {
-webkit-transition:all linear 0.5s;
transition:all linear 0.5s;
background: transparent;
}
.my-input.ng-invalid {
color:white;
background: red;
}
HTML
<p id="inputDescription">
Update input to see transitions when valid/invalid.
Integer is a valid value.
</p>
<form name="testForm" ng-controller="ExampleController">
<input ng-model="val" ng-pattern="/^\d+$/" name="anim" class="my-input"
aria-describedby="inputDescription" />
</form>
ngModel ist verantwortlich für:
Diese Anweisung wird auf Prioritätsstufe 0 ausgeführt.
Beispiel Plunker
JAVASCRIPT
angular.module('bindExample', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.name = 'Whirled';
}]);
HTML
<div ng-controller="ExampleController">
<label>Enter name: <input type="text" ng-model="name"></label><br>
Hello <span ng-bind="name"></span>!
</div>
ngBind ist verantwortlich für:
Wenn Sie zwischen ng-bind
oder zögern ng-model
, versuchen Sie, die folgenden Fragen zu beantworten:
Haben Sie nur brauchen Anzeigedaten?
Ja: ng-bind
(Einwegbindung)
Nein: ng-model
(bidirektionale Bindung)
Müssen Sie Textinhalte (und keinen Wert) binden ?
Ja: ng-bind
Nein: ng-model
(Sie sollten ng-bind nicht verwenden, wenn ein Wert erforderlich ist.)
Ist Ihr Tag ein HTML
<input>
?
Ja: ng-model
(Sie können ng-bind nicht mit <input>
Tag verwenden.)
Nein: ng-bind
ng-Modell
Die ng-Modell-Direktive in AngularJS ist eine der größten Stärken, um die in der Anwendung verwendeten Variablen mit Eingabekomponenten zu verbinden. Dies funktioniert als bidirektionale Datenbindung. Wenn Sie die bidirektionalen Bindungen besser verstehen möchten, verfügen Sie über eine Eingabekomponente, und der in diesem Feld aktualisierte Wert muss in einem anderen Teil der Anwendung wiedergegeben werden. Die bessere Lösung besteht darin, eine Variable an dieses Feld zu binden und diese Variable dort auszugeben, wo Sie den aktualisierten Wert über die Anwendung anzeigen möchten.
ng-bind
ng-bind funktioniert ganz anders als ng-model. ng-bind ist eine Einweg-Datenbindung, mit der der Wert in der HTML-Komponente als inneres HTML angezeigt wird. Diese Anweisung kann nicht zum Binden mit der Variablen verwendet werden, sondern nur mit dem Inhalt der HTML-Elemente. Tatsächlich kann dies zusammen mit ng-model verwendet werden, um die Komponente an HTML-Elemente zu binden. Diese Anweisung ist sehr nützlich, um die Blöcke wie div, span usw. mit innerem HTML-Inhalt zu aktualisieren.
Dieses Beispiel würde Ihnen helfen, zu verstehen.
angular.module('testApp',[]).controller('testCTRL',function($scope)
{
$scope.testingModel = "This is ModelData.If you change textbox data it will reflected here..because model is two way binding reflected in both.";
$scope.testingBind = "This is BindData.You can't change this beacause it is binded with html..In above textBox i tried to use bind, but it is not working because it is one way binding.";
});
div input{
width:600px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<head>Diff b/w model and bind</head>
<body data-ng-app="testApp">
<div data-ng-controller="testCTRL">
Model-Data : <input type="text" data-ng-model="testingModel">
<p>{{testingModel}}</p>
<input type="text" data-ng-bind="testingBind">
<p ng-bind="testingBind"></p>
</div>
</body>
ngModel wird normalerweise für Eingabe-Tags zum Binden einer Variablen verwendet, die wir von Controller und HTML-Seite ändern können, aber ngBind wird zum Anzeigen einer Variablen auf HTML-Seite verwendet, und wir können Variablen nur von Controller ändern, und HTML zeigt nur Variable an.
Wir können ng-bind with <p>
zum Anzeigen verwenden, wir können Verknüpfungen für verwenden ng-bind {{model}}
, wir können ng-bind nicht für HTML-Eingabesteuerelemente verwenden, aber wir können Verknüpfungen für ng-bind {{model}}
HTML-Eingabesteuerelemente verwenden.
<input type="text" ng-model="name" placeholder="Enter Something"/>
<input type="text" value="{{name}}" placeholder="Enter Something"/>
Hello {{name}}
<p ng-bind="name"</p>