AngularJS ng-model 指令

ng-model 是 AngularJS 中最常用的指令之一,它用于在视图与模型之间创建双向数据绑定。使用 ng-model,你可以将 HTML 表单控件(如输入框、复选框、单选按钮等)与 AngularJS 的模型(数据)相绑定。这样,当用户在表单中输入数据时,模型中的数据会自动更新,反之,模型数据的变化也会自动反映到视图中。

ng-model 的工作原理

  • 双向数据绑定ng-model 指令建立了一个双向数据绑定(two-way data binding)连接。通过这种绑定,模型中的数据和视图中的数据会保持同步。
  • 自动更新:当用户在表单控件中进行操作(如输入文本、选择选项等)时,AngularJS 会自动将控件的值同步到绑定的模型中。
  • 表单控件ng-model 可以与各种表单控件一起使用,包括 <input><textarea><select><checkbox> 等。

基本示例

<!DOCTYPE html>
<html ng-app="myApp">
<head>
    <title>ng-model 示例</title>
</head>
<body ng-controller="myController">
    <h1>用户信息</h1>
    <form>
        <label for="name">姓名:</label>
        <input type="text" id="name" ng-model="user.name">
        <p>用户的名字是:{{ user.name }}</p>
    </form>

    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
    <script>
        var app = angular.module('myApp', []);
        app.controller('myController', function($scope) {
            $scope.user = { name: '张三' };
        });
    </script>
</body>
</html>

在这个例子中:

  • ng-model="user.name" 将输入框与 AngularJS 模型中的 user.name 绑定。
  • 当用户在输入框中输入新的名字时,user.name 会自动更新。
  • 视图中的 {{ user.name }} 会自动显示模型中的 name

ng-model 的常见用法

  1. 与文本框结合使用
    • ng-model 通常与 <input> 元素结合使用,实现文本输入框与 AngularJS 模型的双向数据绑定。
    示例<div ng-app="myApp" ng-controller="myController"> <input type="text" ng-model="name"> <p>您输入的名字是: {{ name }}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.name = '李四'; }); </script>
  2. 与复选框结合使用
    • ng-model 还可以与复选框 (<input type="checkbox">) 一起使用,它会根据复选框的选中状态自动更新模型中的值(truefalse)。
    示例<div ng-app="myApp" ng-controller="myController"> <input type="checkbox" ng-model="isChecked"> 是否同意条款 <p>是否同意:{{ isChecked }}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.isChecked = false; }); </script> 在这个示例中,ng-model="isChecked" 将复选框的状态绑定到 isChecked 变量。如果复选框被选中,isChecked 的值会变为 true,否则为 false
  3. 与单选按钮结合使用
    • ng-model 可以与单选按钮 (<input type="radio">) 一起使用,使得选中的单选按钮的值会自动绑定到模型。
    示例<div ng-app="myApp" ng-controller="myController"> <label><input type="radio" ng-model="selectedOption" value="A"> 选项 A</label> <label><input type="radio" ng-model="selectedOption" value="B"> 选项 B</label> <p>您选择的是: {{ selectedOption }}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.selectedOption = 'A'; }); </script> 在这个示例中,ng-model="selectedOption" 将选中的单选按钮的值绑定到 selectedOption 变量。如果用户选择了 AselectedOption 的值为 'A',如果选择了 B,则为 'B'
  4. 与下拉菜单结合使用
    • ng-model 可以与 <select> 元素结合使用,绑定选中的值。
    示例<div ng-app="myApp" ng-controller="myController"> <select ng-model="selectedColor"> <option value="red">红色</option> <option value="green">绿色</option> <option value="blue">蓝色</option> </select> <p>您选择的颜色是: {{ selectedColor }}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.selectedColor = 'red'; }); </script> 在这个示例中,ng-model="selectedColor" 会将 <select> 元素中选中的值绑定到 selectedColor 变量。

ng-model 其他功能

  1. 初始化值
    • ng-model 可以与 AngularJS 控制器中的模型数据(如 $scope 对象)一起使用,初始化数据。
  2. 表单验证
    • ng-model 与表单控件结合使用时,AngularJS 会自动执行表单验证。如果控件的值无效,它会更新控件的 validinvalid 状态,并在 HTML 中添加相应的 CSS 类。
    示例<div ng-app="myApp" ng-controller="myController"> <form name="myForm"> <input type="email" ng-model="email" name="email" required> <span ng-show="myForm.email.$invalid && myForm.email.$touched">邮箱格式不正确</span> </form> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.email = ''; }); </script> 这个例子展示了如何使用 ng-model 结合表单验证来确保用户输入的是有效的邮箱格式。
  3. ng-model 与 ng-change 配合使用
    • ng-model 可以与 ng-change 配合使用,当模型数据发生变化时触发一个函数或表达式。
    示例<div ng-app="myApp" ng-controller="myController"> <input type="number" ng-model="quantity" ng-change="calculateTotal()"> <p>数量: {{ quantity }}</p> <p>总价: {{ total }}</p> </div> <script> var app = angular.module('myApp', []); app.controller('myController', function($scope) { $scope.quantity = 1; $scope.total = 0; $scope.calculateTotal = function() { $scope.total = $scope.quantity * 100; // 假设每个商品的单价是 100 }; }); </script> 在这个例子中,当用户更改 quantity 时,ng-change 会触发 calculateTotal 函数,重新计算 total

总结

  • ng-model 是 AngularJS 用于双向数据绑定的指令,它可以将 HTML 表单控件与 AngularJS 的模型数据绑定,确保视图和模型保持同步。
  • 它适用于文本框、复选框、单选按钮、下拉菜单等表单控件。
  • ng-model 使得 AngularJS 在处理表单输入时变得简单,自动同步数据并提供验证、事件处理等功能。

掌握 ng-model 能帮助你高效地管理用户输入并构建动态响应的应用程序。