AngularJS 实例:简单的任务管理应用

下面是一个简单的 AngularJS 应用实例,用于管理任务(To-Do List)。该实例展示了如何使用 AngularJS 的控制器、双向数据绑定、指令等功能来构建一个动态的任务管理系统。


1. 基本的 HTML 结构

首先,创建一个 HTML 文件来展示应用界面。我们将通过 AngularJS 的 ng-appng-controller 来实现应用的功能。

<!DOCTYPE html>
<html ng-app="todoApp">
<head>
    <title>AngularJS 任务管理</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.8.2/angular.min.js"></script>
</head>
<body>
    <div ng-controller="TodoController">
        <h1>任务管理</h1>

        <!-- 输入新任务 -->
        <input type="text" ng-model="newTask" placeholder="输入新的任务" ng-enter="addTask()">
        <button ng-click="addTask()">添加任务</button>

        <ul>
            <!-- 循环显示任务列表 -->
            <li ng-repeat="task in tasks">
                <span ng-class="{'done': task.completed}">{{ task.name }}</span>
                <input type="checkbox" ng-model="task.completed" ng-click="toggleCompletion(task)">
                <button ng-click="deleteTask($index)">删除</button>
            </li>
        </ul>
    </div>

    <script>
        // 定义 AngularJS 模块
        var app = angular.module('todoApp', []);

        // 定义控制器
        app.controller('TodoController', function($scope) {
            // 初始化任务列表
            $scope.tasks = [];

            // 添加任务
            $scope.addTask = function() {
                if ($scope.newTask) {
                    $scope.tasks.push({ name: $scope.newTask, completed: false });
                    $scope.newTask = ''; // 清空输入框
                }
            };

            // 删除任务
            $scope.deleteTask = function(index) {
                $scope.tasks.splice(index, 1);
            };

            // 切换任务完成状态
            $scope.toggleCompletion = function(task) {
                task.completed = !task.completed;
            };
        });

        // AngularJS 的自定义指令 ng-enter(用于回车事件)
        app.directive('ngEnter', function() {
            return function(scope, element, attrs) {
                element.bind("keydown", function(event) {
                    if (event.which === 13) {
                        scope.$apply(attrs.ngEnter);
                    }
                });
            };
        });
    </script>
</body>
</html>

2. 解释代码

2.1 AngularJS 模块和控制器

  • ng-app="todoApp":这是 AngularJS 应用的标识,表示该页面会使用 AngularJS。
  • ng-controller="TodoController":为该 div 元素绑定控制器 TodoController,在这个控制器中我们处理应用的逻辑。
  • 控制器 TodoController 定义了以下方法:
    • addTask():向任务列表中添加一个新的任务。
    • deleteTask(index):根据索引删除指定的任务。
    • toggleCompletion(task):切换任务的完成状态(复选框勾选与否)。

2.2 双向数据绑定

  • ng-model="newTask":输入框与 newTask 变量实现双向绑定。当用户输入内容时,newTask 变量会更新,反之,若 newTask 更新,输入框的值也会相应更新。

2.3 显示任务

  • ng-repeat="task in tasks":用于循环遍历 tasks 数组,并动态显示每个任务。
  • ng-class="{'done': task.completed}":根据任务的 completed 属性来决定该任务的样式,done 类将在任务完成时应用。

2.4 删除任务

  • 每个任务旁边有一个“删除”按钮,点击该按钮会调用 deleteTask($index) 方法,并删除相应的任务。

2.5 回车添加任务

  • 我们自定义了一个指令 ng-enter,用来监听回车键(键码 13)。当用户按下回车键时,会触发 addTask() 方法,从而添加任务。

3. 交互功能

  1. 用户可以在输入框中输入任务并点击“添加任务”按钮,任务会被添加到任务列表中。
  2. 用户可以勾选任务的复选框,标记任务完成与否。
  3. 每个任务旁边有一个删除按钮,用户可以删除指定的任务。
  4. 用户还可以通过按下回车键来添加任务,增加交互的便捷性。

4. 添加样式

为了让任务管理界面更美观,我们可以添加一些 CSS 来修饰界面。

<style>
    body {
        font-family: Arial, sans-serif;
        margin: 20px;
    }

    h1 {
        text-align: center;
        color: #4CAF50;
    }

    ul {
        list-style-type: none;
        padding: 0;
    }

    li {
        margin: 10px 0;
        padding: 5px;
        background-color: #f4f4f4;
        border-radius: 5px;
    }

    .done {
        text-decoration: line-through;
        color: #888;
    }

    button {
        margin-left: 10px;
        background-color: #f44336;
        color: white;
        border: none;
        padding: 5px 10px;
        cursor: pointer;
        border-radius: 3px;
    }

    button:hover {
        background-color: #d32f2f;
    }

    input[type="checkbox"] {
        margin-right: 10px;
    }
</style>


5. 总结

  • 控制器:我们通过 TodoController 控制应用的逻辑,处理任务的添加、删除和切换完成状态等操作。
  • 双向数据绑定:AngularJS 的 ng-model 实现了输入框与模型(任务)之间的双向数据绑定。
  • 自定义指令ng-enter 指令监听回车键事件,简化了用户交互。
  • 动态视图:通过 ng-repeat 指令动态显示任务列表,并使用 ng-class 指令来根据任务的状态应用不同的样式。

通过这个简单的任务管理应用,你可以了解 AngularJS 中如何通过控制器、数据绑定、指令等方式来构建功能丰富的 Web 应用。