AngularJS 应用程序

现在来创建一个真正的 AngularJS 应用程序了。


制作一张购物清单

让我们使用 AngularJS 的一些功能制作一个购物清单,您可以在其中添加或删除项目:

步骤 1. 开始:

首先制作一个名为 myShoppingList 的应用程序,然后向其中添加一个名为 myCtrl 的控制器。

控制器将一个名为 products 的数组添加到当前的 $scope 中。

在 HTML 中,我们使用 ng-repeat 指令来显示使用数组中的项的列表。

实例

到目前为止,我们已经根据数组中的项目制作了一个 HTML 列表:

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <script>
  6. var app = angular.module("myShoppingList", []);
  7. app.controller("myCtrl", function($scope) {
  8. $scope.products = ["Milk", "Bread", "Cheese"];
  9. });
  10. </script>
  11. <div ng-app="myShoppingList" ng-controller="myCtrl">
  12. <ul>
  13. <li ng-repeat="x in products">{{x}}</li>
  14. </ul>
  15. </div>
  16. <p>到目前为止,我们已经根据数组中的项目制作了一个 HTML 列表。</p>
  17. </body>
  18. </html>
步骤 2. 添加 Items:

在 HTML 中,添加一个文本字段,并使用 ng-model 指令将其绑定到应用程序。

在控制器中,创建一个名为 addItem 的函数,并使用 addMe 输入字段的值向 products 数组添加一个项。

添加一个按钮,并给它一个 ng-click 指令,该指令将在单击按钮时运行 addItem 函数。

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <script>
  6. var app = angular.module("myShoppingList", []);
  7. app.controller("myCtrl", function($scope) {
  8. $scope.products = ["Milk", "Bread", "Cheese"];
  9. $scope.addItem = function () {
  10. $scope.products.push($scope.addMe);
  11. }
  12. });
  13. </script>
  14. <div ng-app="myShoppingList" ng-controller="myCtrl">
  15. <ul>
  16. <li ng-repeat="x in products">{{x}}</li>
  17. </ul>
  18. <input ng-model="addMe">
  19. <button ng-click="addItem()">添加</button>
  20. </div>
  21. <p>在输入字段中写入以添加项目。</p>
  22. </body>
  23. </html>
步骤 3. 移除 Items:

我们还希望能够从购物清单中删除物品。

在控制器中,创建一个名为 removeItem 的函数,该函数将要删除的项的索引作为参数。

在 HTML 中,为每个项目创建一个 <span> 元素,并给它们一个 ng-click 指令,该指令使用当前的 $index 调用 removietem 函数。

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <script>
  6. var app = angular.module("myShoppingList", []);
  7. app.controller("myCtrl", function($scope) {
  8. $scope.products = ["Milk", "Bread", "Cheese"];
  9. $scope.addItem = function () {
  10. $scope.products.push($scope.addMe);
  11. }
  12. $scope.removeItem = function (x) {
  13. $scope.products.splice(x, 1);
  14. }
  15. });
  16. </script>
  17. <div ng-app="myShoppingList" ng-controller="myCtrl">
  18. <ul>
  19. <li ng-repeat="x in products">{{x}}<span ng-click="removeItem($index)">&times;</span></li>
  20. </ul>
  21. <input ng-model="addMe">
  22. <button ng-click="addItem()">添加</button>
  23. </div>
  24. <p>单击 "x" 从购物列表中删除一个项目。</p>
  25. </body>
  26. </html>
步骤 4. 错误处理:

应用程序有一些错误,例如,如果尝试添加同一个项目两次,应用程序就会崩溃。此外,不应允许添加空项。

我们将通过在添加新项目之前检查值来解决这个问题。

在 HTML 中,我们将为错误消息添加一个容器,并在有人试图添加一个已存在的项目时,写入错误消息。

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <body>
  5. <script>
  6. var app = angular.module("myShoppingList", []);
  7. app.controller("myCtrl", function($scope) {
  8. $scope.products = ["Milk", "Bread", "Cheese"];
  9. $scope.addItem = function () {
  10. $scope.errortext = "";
  11. if (!$scope.addMe) {return;}
  12. if ($scope.products.indexOf($scope.addMe) == -1) {
  13. $scope.products.push($scope.addMe);
  14. } else {
  15. $scope.errortext = "该商品已存在于您的购物清单中。";
  16. }
  17. }
  18. $scope.removeItem = function (x) {
  19. $scope.errortext = "";
  20. $scope.products.splice(x, 1);
  21. }
  22. });
  23. </script>
  24. <div ng-app="myShoppingList" ng-controller="myCtrl">
  25. <ul>
  26. <li ng-repeat="x in products">{{x}}<span ng-click="removeItem($index)">&times;</span></li>
  27. </ul>
  28. <input ng-model="addMe">
  29. <button ng-click="addItem()">添加</button>
  30. <p>{{errortext}}</p>
  31. </div>
  32. <p>尝试添加同一个项目两次,您将收到一条错误消息。</p>
  33. </body>
  34. </html>
步骤 5. 设计:

该应用程序可以工作,但可以使用更好的设计。我们使用 W3.CSS 样式表来设计我们的应用程序。

添加 W3.CSS 样式表,并在整个应用程序中包含适当的样式类,结果将与此页面顶部的购物列表相同。

  1. <!DOCTYPE html>
  2. <html>
  3. <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.8.2/angular.min.js"></script>
  4. <link rel="stylesheet" href="https://cankaoshouce.com/css/w3.css">
  5. <body>
  6. <script>
  7. var app = angular.module("myShoppingList", []);
  8. app.controller("myCtrl", function($scope) {
  9. $scope.products = ["Milk", "Bread", "Cheese"];
  10. $scope.addItem = function () {
  11. $scope.errortext = "";
  12. if (!$scope.addMe) {return;}
  13. if ($scope.products.indexOf($scope.addMe) == -1) {
  14. $scope.products.push($scope.addMe);
  15. } else {
  16. $scope.errortext = "该商品已存在于您的购物清单中";
  17. }
  18. }
  19. $scope.removeItem = function (x) {
  20. $scope.errortext = "";
  21. $scope.products.splice(x, 1);
  22. }
  23. });
  24. </script>
  25. <div ng-app="myShoppingList" ng-cloak="" ng-controller="myCtrl" class="w3-card-2 w3-margin" style="max-width:400px;">
  26. <header class="w3-container w3-light-grey w3-padding-16">
  27. <h3>我的购物清单</h3>
  28. </header>
  29. <ul class="w3-ul">
  30. <li ng-repeat="x in products" class="w3-padding-16">{{x}}<span ng-click="removeItem($index)" style="cursor:pointer;" class="w3-right w3-margin-right">&times;</span></li>
  31. </ul>
  32. <div class="w3-container w3-light-grey w3-padding-16">
  33. <div class="w3-row w3-margin-top">
  34. <div class="w3-col s10">
  35. <input placeholder="这里添加购物商品" ng-model="addMe" class="w3-input w3-border w3-padding">
  36. </div>
  37. <div class="w3-col s2">
  38. <button ng-click="addItem()" class="w3-btn w3-padding w3-green">添加</button>
  39. </div>
  40. </div>
  41. <p class="w3-text-red">{{errortext}}</p>
  42. </div>
  43. </div>
  44. </body>
  45. </html>

分类导航