Angular企业级开发——MVC之控制器详解

发布时间 - 2026-01-10 23:10:33    点击率:

1.MVC中的控制器

AngularJS的控制器主要为了把模型和视图连接在一起。大多数业务逻辑操作都会放在视图对应的控制器中。当然如果我们能够把业务逻辑放到后端的REST服务中,就可以开发轻量级AngularJS应用。

涉及到多个控制器中使用的业务逻辑,需要放到一个公共的服务中,然后把改服务注入使用到该业务逻辑的控制器中。

2.理解控制器

在AngularJS的控制器中,构造函数会有$scope参数。当一个控制器通过ng-controller指令连接到DOM上,Angular将实例化一个新的控制器对象,然后调用指定的控制器的构造函数。一个新的子作用范围(scope)将被创建,并作为一种可注入的参数传递给控制器​​的构造函数为$scope

如果控制器使用controller as语法附加到DOM上,那么控制器实例将被分配给新的$scope范围。并且多了一个和as同名的属性,然后把自己指向这个属性,就方便我们访问了。

3.控制器的作用

3.1 在控制器中初始化模型(添加属性)

创建控制器并将它附加到DOM元素之后,AngularJS会创建一个子作用域。子作用域保存着对应控制器的数据模型。子作用域可以通过$scope来获取。

<!DOCTYPE html>
<html lang="en" ng-app="myApp">

<head>
  <meta charset="UTF-8">
  <title>AngularJS Controller Demo</title>
  <script type="text/javascript" src="angular.min.js">

  </script>
  <script src="app.js" charset="utf-8"></script>
</head>

<body ng-controller="MainController">
  <p>{{username}}</p>
  <p>{{age}}</p>
</body>

</html>
(function () {
  'use strict';
  angular.module("myApp", [])
    .controller('MainController', ['$scope', function ($scope) {
      $scope.username="leeli";
      $scope.age=28;
    }]);
})();

3.2 在控制器中附件行为(添加事件或方法)

附加行为的方式是把方法或事件添加到$scope对象上,以便在控制器对应的视图中使用到改方法。也有很多方法是处理业务的,也是附加到$scope对象上。
ng-click对应的事件方法在controller里面定义为addItem,所以在视图上我们可以使用addItem方法。

视图上的ng-clickng-modelng-repeat都是AngularJS的内置指令,后续博客会详细介绍。

4.控制器作用域

因为控制器是附加到DOM元素上,所以存在着一个视图,有多个控制器。控制器之间可以是并列的,也可以是嵌套的形式存在。

4.1 视图中控制器并列

各个控制器从附加DOM元素节点开始,到节点对应闭合标签结束的地方创建了一个子控制域,单个控制器里面的$scope对象只能访问和调用该控制器范围内的属性和方法。

4.2 视图中控制器嵌套

默认情况下,AngularJS在当前作用域中无法找到某个属性,就会在父级作用域中进行查找。即子级控制器会继承父级控制器中的对象。但是子级作用域和父级作用域中有相同的属性,子级使用自己的作用域。这个时候子级作用域要访问父级作用域的属性可以通过$parent。类似JavaScript本身的原型链方式。

5.何为ControllerAs

AngularJS提供$scope方式来处理Controller。代码如下:

<div ng-app="myApp">
 <div ng-controller="MainController">
  <p>Hello {{ name }}</p>
 </div>
</div>

var app = angular.module('myApp', []);
app.controller('MainController', ['$scope',function($scope) {
 $scope.name = "world.";
}]);

AngularJS处理Controller提供一种作用域别名的方式,其实就是将Model直接绑定Controller的实例上。

 代码如下:

<div ng-app="myApp">
 <div ng-controller="MainController as mainCtrl">
  <p>Hello {{ name }}</p>
 </div>
</div>

var app = angular.module('myApp', []);
app.controller('MainController', function() {
 this.name = "world.";
});

使用这种方式处理Controller有3个好处:

1 Controller的定义不再依赖$scope,Controller就是一个普通的函数定义,这样代码于框架无关,假设哪天不使用AngularJS框架,这里的代码可以进行复用和移植。

2 测试更友好,不需要开发者去模拟一个$scope

3 增强代码的可读性。在控制器并行和嵌套的demo中,视图上我们都使用花括号包含着name,userName等属性。如果有多个控制器并行,或者多个层级的嵌套,我们有时很难区分在视图上使用时哪个控制器下的属性,可以使用ControllerAs来避免这个问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# angularjs  # 控制器  # mvc  # 详解  # 控制器详解  # 详解AngularJS控制器的使用  # 简述AngularJS的控制器的使用  # AngularJS控制器之间的数据共享及通信详解  # AngularJS基础学习笔记之控制器  # AngularJS指令与控制器之间的交互功能示例  # AngularJS控制器详解及示例代码  # AngularJS控制器之间的通信方式详解  # AngularJS入门教程之控制器详解  # AngularJS控制器controller给模型数据赋初始值的方法  # AngularJS开发教程之控制器之间的通信方法分析  # 器中  # 多个  # 可以通过  # 将被  # 可以使用  # 自己的  # 都是  # 也有  # 会有  # 放在  # 很难  # 不需要  # 中有  # 会在  # 这个问题  # 这个时候  # 详细介绍  # 将它  # 涉及到  # 绑定 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel distinct去重查询_Laravel Eloquent去重方法  Python结构化数据采集_字段抽取解析【教程】  Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】  PHP怎么接收前端传的文件路径_处理文件路径参数接收方法【汇总】  ,南京靠谱的征婚网站?  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  北京网站制作的公司有哪些,北京白云观官方网站?  如何在云指建站中生成FTP站点?  iOS中将个别页面强制横屏其他页面竖屏  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  5种Android数据存储方式汇总  如何在景安服务器上快速搭建个人网站?  Laravel如何获取当前登录用户信息_Laravel Auth门面使用与Session用户读取【技巧】  Laravel storage目录权限问题_Laravel文件写入权限设置  如何在阿里云完成域名注册与建站?  IOS倒计时设置UIButton标题title的抖动问题  UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】  使用spring连接及操作mongodb3.0实例  网站图片在线制作软件,怎么在图片上做链接?  EditPlus中的正则表达式 实战(2)  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  如何快速登录WAP自助建站平台?  nginx修改上传文件大小限制的方法  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  如何快速启动建站代理加盟业务?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  ,交易猫的商品怎么发布到网站上去?  如何用AWS免费套餐快速搭建高效网站?  Laravel如何处理和验证JSON类型的数据库字段  如何在自有机房高效搭建专业网站?  Laravel如何使用Service Container和依赖注入?(代码示例)  nodejs redis 发布订阅机制封装实现方法及实例代码  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  iOS正则表达式验证手机号、邮箱、身份证号等  教学论文网站制作软件有哪些,写论文用什么软件 ?  Midjourney怎么调整光影效果_Midjourney光影调整方法【指南】  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  java中使用zxing批量生成二维码立牌  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  如何在阿里云通过域名搭建网站?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  QQ浏览器网页版登录入口 个人中心在线进入  如何在IIS中新建站点并解决端口绑定冲突?  jquery插件bootstrapValidator表单验证详解  高端智能建站公司优选:品牌定制与SEO优化一站式服务  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法