Dieses Mal werden wir die bidirektionale Datenbindung von Angular ausführlich erläutern.
1. Einfaches Beispiel
Dieses Beispiel haben wir bereits im ersten Abschnitt gezeigt. Um es zu sehen, klicken Sie hier
Der hier erzielte Effekt besteht darin, dass bei der Eingabe von Inhalten in das Eingabefeld der entsprechende Inhalt entsprechend geändert wird. Dadurch wird eine bidirektionale Datenbindung erreicht.
2. Verwendung von Wertausdrücken und ng-bind
Schauen wir uns ein weiteres Beispiel an. Klicken Sie hier. Im ersten Beispiel, das im Artikel erscheint, sind {{greeting.text}} und {{text}} ein Wertausdruck, aber wenn Sie die Seite ständig aktualisieren, werden Sie angezeigt wird ein solches Problem finden, das heißt, die Zeichenfolge „{{greeting.text}} {{text}}“ erscheint manchmal für einen Moment auf der Seite. Wie sollen wir es also lösen?
Hier wird der Befehl ng-bind verwendet: zum Binden von Datenausdrücken.
Zum Beispiel können wir
setzen<p>{{greeting.text}} {{text}}</p>
Ändern zu:
"<p><span ng-bind="greeting.text"></span><span ng-bind="text"></span></p>";
Nach dieser Korrektur wird die unerwünschte Zeichenfolge nicht angezeigt, wenn die Seite aktualisiert wird.
Da die Verwendung von Befehlen jedoch immer weniger effizient ist als die direkte Verwendung von Ausdrücken, haben wir eine allgemeine Regel zusammengefasst: Im Allgemeinen verwendet der Index ng-bind und nachfolgende Vorlagen verwenden die Form „{{}}“.
3. Typische Szenarien der bidirektionalen Bindung – Formular
Schauen Sie sich zunächst den Inhalt von form.html an:
<!doctype html> <html ng-app="UserInfoModule"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="css/bootstrap-3.0.0/css/bootstrap.css"> <script src="js/angular-1.3.0.js"></script> <script src="Form.js"></script> </head> <body> <div class="panel panel-primary"> <div class="panel-heading"> <div class="panel-title">双向数据绑定</div> </div> <div class="panel-body"> <div class="row"> <div class="col-md-12"> <form class="form-horizontal" role="form" ng-controller="UserInfoCtrl"> <div class="form-group"> <label class="col-md-2 control-label"> 邮箱: </label> <div class="col-md-10"> <input type="email" class="form-control" placeholder="推荐使用126邮箱" ng-model="userInfo.email"> </div> </div> <div class="form-group"> <label class="col-md-2 control-label"> 密码: </label> <div class="col-md-10"> <input type="password" class="form-control" placeholder="只能是数字、字母、下划线" ng-model="userInfo.password"> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <div class="checkbox"> <label> <input type="checkbox" ng-model="userInfo.autoLogin">自动登录 </label> </div> </div> </div> <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <button class="btn btn-default" ng-click="getFormData()">获取Form表单的值</button> <button class="btn btn-default" ng-click="setFormData()">设置Form表单的值</button> <button class="btn btn-default" ng-click="resetForm()">重置表单</button> </div> </div> </form> </div> </div> </div> </div> </body> </html>
Schauen Sie sich den Inhalt von Form.js noch einmal an:
var userInfoModule = angular.module('UserInfoModule', []); userInfoModule.controller('UserInfoCtrl', ['$scope', function($scope) { $scope.userInfo = { email: "253445528@qq.com", password: "253445528", autoLogin: true }; $scope.getFormData = function() { console.log($scope.userInfo); }; $scope.setFormData = function() { $scope.userInfo = { email: 'testtest@126.com', password: 'testtest', autoLogin: false } }; $scope.resetForm = function() { $scope.userInfo = { email: "253445528@qq.com", password: "253445528", autoLogin: true }; } } ])
Der Screenshot des Effekts sieht wie folgt aus:
Die im obigen Bild implementierten Funktionen sind:
1. Klicken Sie auf „Get“, um drei Daten zur Konsole auszugeben: E-Mail, Passwort und ausgewählter Status (wahr, falsch)
2. Klicken Sie auf „Einstellungen“: Sie können die Werte der beiden Eingabefelder und den deaktivierten Status des Kontrollkästchens ändern;
3. Klicken Sie auf „Zurücksetzen“: Sie können die Daten auf die Originaldaten zurücksetzen.Da das ng-Modell im Eingabefeld und der Wert im Controller eine bidirektionale Bindung implementieren, werden durch Ändern des Werts im Eingabefeld oder im Controller die Werte beider Parteien entsprechend geändert. Mit nur wenigen Codezeilen kann eine so leistungsstarke Funktion erreicht werden. Finden Sie das nicht erstaunlich? Es ist in der Tat erstaunlich, aber was noch Erstaunlicheres kommt, kommt noch! Fortfahren!
4. Etikettenstile dynamisch wechseln
Sehen Sie sich zuerst den Inhalt von color.html an:
<!doctype html> <html ng-app="MyCSSModule"> <head> <meta charset="utf-8"> <link rel="stylesheet" href="CSS1.css"> </head> <style type="text/css"> .text-red { background-color: #ff0000; } .text-green { background-color: #00ff00; } </style> <body> <div ng-controller="CSSCtrl"> <p class="text-{{color}}">测试CSS样式</p> <button class="btn btn-default" ng-click="setGreen()">绿色</button> </div> </body> <script src="js/angular-1.3.0.js"></script> <script src="color.js"></script> </html>
Schauen wir uns noch einmal den Inhalt von color.js an:
var myCSSModule = angular.module('MyCSSModule', []); myCSSModule.controller('CSSCtrl', ['$scope', function($scope) { $scope.color = "red"; $scope.setGreen = function() { $scope.color = "green"; } } ])