angularJS使用的MVC为何不属于二十三种设计模式之一?

MVC被GoF (Gang of Four,四人组, 《Design Patterns: Elements of Reusable Object-Oriented Software》/《设计模式》一书的作者:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)当做“一组用于构建用户界面的类集合”。MVC被认为是三种经典设计模式的演变::观察者模式(Observer)(Pub/Sub), 策略模式(Strategy)和组合模式(Composite)。MVC属于架构模式,而不是设计模式。

angularJS的广播事件,$emit与$broadcast

要想理解angularJS的广播事件,首先要理解$scope的作用域。$scope的作用域是树状结构的,有且有唯一一个根作用域$rootScope。联系到树状的结构,可以更好的理解angularJS提供两种事件:向上传播事件$emit以及向下传播事件$broadcast。其中向上传播事件$emit能够被该树上的所有父$scope以及同级$scope。向下传播事件以当前$scope为根,传播所有的子$scope控制器。这两种广播事件当然也对自身控制器起作用。

下面是我自己写的一个例子,介绍了$emit与$broadcast的事件的作用域。


html Code:

<div ng-controller="parentController">
  <p>{{breadCrumb}},parentController</p>
  <div ng-controller="currentController">
    <p>{{breadCrumb}},currentController</p>
    <button ng-click="$emit('MyEvent')">
      $emit("MyEvent")
    </button>
    <button ng-click="$broadcast('MyEvent')">
      $broadcast("MyEvent")
    </button>
    <div ng-controller="childController">
      <p>{{breadCrumb}},childController</p>
    </div>
  </div>
  <div ng-controller="sameLevelController">
    <p>{{breadCrumb}},sameLevelController</p>
  </div>
</div>
<div ng-controller="other_controller">
  <button ng-click="$emit('MyEvent')">
    $emit("MyEvent")
  </button>
  <button ng-click="$broadcast('MyEvent')">
    $broadcast("MyEvent")
  </button>
  <p>{{breadCrumb}},other_controller</p>
</div>


JavaScript Code:

function parentController($scope) {
  $scope.breadCrumb = 1;

  $scope.$on("MyEvent", function() {
    $scope.breadCrumb++;
  });

}

function currentController($scope) {
  $scope.$on("MyEvent", function() {
    $scope.breadCrumb--;
  });
}
function other_controller($scope) {
  $scope.breadCrumb = 10;

  $scope.$on("MyEvent", function() {
    $scope.breadCrumb--;
  });
}
function sameLevelController($scope) {
  $scope.$on("MyEvent", function() {
    $scope.breadCrumb=$scope.breadCrumb+2;
  });
}
function childController($scope) {
  $scope.$on("MyEvent", function() {
    $scope.breadCrumb=$scope.breadCrumb+10;
  });
}


通过点击按钮观察数字的变化,可以明显的发现树型结构作用域对html界面更新的影响,同时还可以注意到子$scope会继承最近路径上父$scope传来的变量值。

$rootScope绑定的范围

在angularJS启动的时候绑定ng-app的内容

angularjs1学习笔记--持续更新的更多相关文章

  1. 数据分析之Pandas和Numpy学习笔记(持续更新)<1>

    pandas and numpy notebook        最近工作交接,整理电脑资料时看到了之前的基于Jupyter学习数据分析相关模块学习笔记.想着拿出来分享一下,可是Jupyter导出来h ...

  2. [读书]10g/11g编程艺术深入体现结构学习笔记(持续更新...)

    持续更新...) 第8章 1.在过程性循环中提交更新容易产生ora-01555:snapshot too old错误.P257 (这种情况我觉得应该是在高并发的情况下才会产生) 假设的一个场景是系统一 ...

  3. Semantic ui 学习笔记 持续更新

    这个semantic 更新版本好快~ 首先是代码的标识<code></code> 具体样式就是红框这样的 圈起来代码感觉不错 不过要在semantic.css里在加上如下样式~ ...

  4. Git学习笔记(持续更新)

    1.强制同步为远程的代码 远程仓库回退了commit的情况下(第2条描述之情况),强制同步远程的代码到本地 #更新远程最新的所有代码,但是不merge或者rebase git fetch --all ...

  5. R语言的学习笔记 (持续更新.....)

    1. DATE 处理 1.1 日期格式一个是as.Date(XXX) 和strptime(XXX),前者为Date格式,后者为POSIXlt格式 1.2 用法:as.Date(XXX,"%Y ...

  6. ggplot2 学习笔记 (持续更新.....)

    1. 目前有四种主题 theme_gray(), theme_bw() , theme_minimal(),theme_classic() 2. X轴设置刻度 scale_x_continuous(l ...

  7. # MongoDB学习笔记(持续更新)

    启动mongo服务 sodo mongo 显示数据库(显示数据库名称和大小,单位GB) > show dbs admin (empty) local 0.078GB test 0.078GB t ...

  8. GOF 的23种JAVA常用设计模式 学习笔记 持续更新中。。。。

    前言: 设计模式,前人总结下留给后人更好的设计程序,为我们的程序代码提供一种思想与认知,如何去更好的写出优雅的代码,23种设计模式,是时候需要掌握它了. 1.工厂模式 大白话:比如你需要一辆汽车,你无 ...

  9. BLE资料应用笔记 -- 持续更新

    BLE资料应用笔记 -- 持续更新 BLE 应用笔记 小书匠 简而言之,蓝牙无处不在,易于使用,低耗能和低使用成本.'让我们'更深入地探索这些方面吧. 蓝牙无处不在-,您可以在几乎每一台电话.笔记本电 ...

随机推荐

  1. 借助腾讯云的云函数实现一个极简的API网关

    借助腾讯云的云函数实现一个极简的API网关 Intro 微信小程序的域名需要备案,但是没有大陆的服务器,而且觉得备案有些繁琐,起初做的小程序都有点想要放弃了,后来了解到腾讯云的云函数,于是利用腾讯云的 ...

  2. jquery zTree插件 json 数据详解

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Redis高可用架构

    前言 Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Linux服务器上搭建Redis,怎 ...

  4. Linux下手动安装JDK

    一.删除自带的JDK 查询系统自带JDK rpm -qa | grep java rpm -qa | grep jdk 删除查询出来的文件名 rpm -e --nodeps 文件名 命令执行成功后重新 ...

  5. Linux中JDK安装配置

    安装jdk 1)下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 我选择jdk1.8版本 2)上传至服务 ...

  6. 2019dx#7

    Solved Pro.ID Title Ratio(Accepted / Submitted)   1001 A + B = C 10.48%(301/2872)   1002 Bracket Seq ...

  7. UVA - 10480 Sabotage 最小割,输出割法

    UVA - 10480 Sabotage 题意:现在有n个城市,m条路,现在要把整个图分成2部分,编号1,2的城市分成在一部分中,拆开每条路都需要花费,现在问达成目标的花费最少要隔开那几条路. 题解: ...

  8. CodeForces round 520 div2

    A:A Prank 题意:给定一个递增序列, 问最多能删除多少个连续数字,要求删除数字之后能还原成原来的数列. 题解:直接找就好了,为了方便可以使得第0个数字为0, 第n+1个元素为1001 代码: ...

  9. 百度之星 资格赛 1003 度度熊与邪恶大魔王 dp(背包)

    度度熊与邪恶大魔王  Accepts: 1141  Submissions: 6840  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 3 ...

  10. poj1037 [CEOI 2002]A decorative fence 题解

    ---恢复内容开始--- 题意: t组数据,每组数据给出n个木棒,长度由1到n,除了两端的木棒外,每一根木棒,要么比它左右的两根都长,要么比它左右的两根都短.即要求构成的排列为波浪型.对符合要求的排列 ...