MVVM简介

针对客户端应用开发AngularJS吸收了传统的MVC基本原则。MVC(Model-View-Controll)设计模式针对不同的人可能意味不同的东西 ,AngularJS并不执行传统意义上的MVC,更接近于MVVM。

MVVM模式是Model-View-ViewMode模式的简称。由视图(View)、视图模型(ViewModel)、模型(Model)三部分组成,通过这三部分实现UI逻辑、呈现逻辑和状态控制、数据与业务逻辑的分离。

Model将和ViewModel互动(通过$scope对象),将监听Model的变化。这些可以通过View来发送和渲染,由HTML来展示你的 代码。View可以通过$routeProvider对象来支配,所以你可以深度的链接和组织你的View和Controller,将他们变成导航 URL。AngualrJS同时提供了无状态的Controller,可以用来初始化和控制$scope对象。

Model与MVC模式一样,Model用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法。它具有对数据直接访问的权利,例如对数据库的访问,Model不依赖于View和ViewModel,也就是说,模型不关心会被如何显示或是如何被操作,模型也不能包含任何用户使用的与界面相关的逻辑。

ViewModel是一个用来提供特别数据和方法从而维护指定view的对象,。ViewModel是$scope的对象,只存在于AnguarJS的应用中。$scope只是一个简单的js对象,这个对象使用简单的API来侦测和广播状态变化。

Controller负责设置初始状态和参数化$scope方法用以控制行为。需要指出的controller并不保存状态也不和远程服务互动。

View是AngularJS解析后渲染和绑定后生成的HTML。这个部分帮助你创建web应用的架构。$scope拥有一个针对数据的参考,controller定义行为,view处理布局和互动。

使用MVVM模式有几大好处:

1. 低耦合:View可以独立于Model变化和修改,一个ViewModel可以绑定到不同的View上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。

2. 可重用性:可以把一些视图的逻辑放在ViewModel里面,让很多View重用这段视图逻辑。

3. 独立开发:开发人员可以专注与业务逻辑和数据的开发(ViewModel)。设计人员可以专注于界面(View)的设计。

4. 可测试性:可以针对ViewModel来对界面(View)进行测试。

控制器

AngularJS控制器控制AngularJS应用程序的数据,是常规的JavaScript对象。

ng-controller指令就是用来定义应用程序控制器的,并且同时创建了一个新的作用域关联到相应的DOM元素上。

所谓作用域就是一个指向应用模型的对象,它是表达式的执行环境,作用域有层次结构,这个层次和相应的DOM几乎是一样的,作用域能监控表达式和传递事件并且可以从父作用域继承属性。

每一个AngularJS应用都有一个绝对的根作用域。但也可能有多个子作用域。 一个应用可以有多个作用域,因为有一些指令会生成新的子作用域,当新作用域被创建的时候,他们会被当成子作用域添加到父作用域下,这使得作用域会变成一个和相应DOM结构一个的树状结构。

控制器属性

现在我们就用ng-controller指令来创建一个简单的控制器定义,如下所示:

  1. <div ng-app="" ng-controller="MyController">
  2. <p>请输入一个名字:<input type="text" ng-model="person.name"> </p>
  3. <p>Hello <span ng-bind="person.name"></span> </p>
  4. </div>
  5. <script>
  6. function MyController($scope) {
  7. $scope.person = {
  8. name: "World"
  9. };
  10. }
  11. </script>

如上所述,我们通过ng-controller指令创建了一个JavaScript对象 —— MyController并带有name属性,那参数$scope是什么呢,代表什么意思呢。

现在我们就来解答MyController对象参数 —— $scope。

$scope就是把一个DOM元素连结到控制器上的对象,它提供一个绑定到DOM元素(以及其子元素)上的执行上下文。它也是一个JavaScript对象,指向应用程序作用域内的所有HTML元素和执行上下文。作用域呢,就是作为$scope的数据属性关联到DOM上的,并且能在需要调试的时候被获取到。

要明确创建一个$scope对象,我们就要给DOM元素安上一个controller对象,使用的是ng-controller 指令属性。

所有$scope都遵循原型继承,这意味着它们都能访问父$scope们,对任何属性和方法,如果AngularJS在当前$scope上找不到,就会到父$scope上去找,如果在父$scope上也没找到,就会继续向上回溯,一直到$rootScope上,这个$rootScope是最顶级的$scope,它对应着含有 ng-app指令属性的那个DOM元素,也就是说根作用域关联的DOM就是ng-app指令定义的地方。

也就是说,拥有了$scope,我们就可以操作作用域内任何我们想要获取的对象数据。

控制器方法

控制器不仅声明属性也可以声明方法,如下所示:

  1. <div ng-app="" ng-controller="MyController">
  2. Your name:
  3. <input type="text" ng-model="username">
  4. <button ng-click="sayHello()">打招呼</button>
  5. <hr>
  6. {{greeting}}
  7. </div>
  8. <script>
  9. function MyController($scope) {
  10. $scope.username = 'World';
  11. $scope.sayHello = function() {
  12. $scope.greeting= 'Hello ' + $scope.username + '!';
  13. };
  14. }
  15. </script>

参考以上代码,赶快动手试试控制器的使用方法吧!

当然如果是开发条件的需要,我们也可以将控制器写在外部文件中,那如上示例该怎么做呢,很简单,如下简单引用即可:

  1. <script src="MyController.js"></script>

转载于:https://www.cnblogs.com/rainheader/p/4623954.html

模型和控制器-起步阶段相关推荐

  1. mvc 视图和模型的对应_通过在酒吧订购饮料来解释模型视图控制器(MVC)

    mvc 视图和模型的对应 by Kevin Kononenko 凯文·科诺年科(Kevin Kononenko) 通过在酒吧订购饮料来解释模型视图控制器(MVC) (Model-View-Contro ...

  2. 模型视图控制器mvc

    模型视图控制器mvc MVC就是模型 视图 控制器的缩写 视图和用户交互 通过事件导致控制器改变 控制器改变导致 模型改变 或者控制器同时改变两者 模型改变导致视图改变 或者视图改变 潜在的从模型里面 ...

  3. java控制器_Java用户界面 模型-视图-控制器(MVC)模式

    Swing组件的MVC设计模式 在解决一个问题时,不需要从头做起,而是参考过去的经验,设计模式是一种方法,以一种结构化的形式展示了前人的经验. 前面提到过的Java中的AWT事件处理机制采用了&quo ...

  4. 雷林鹏分享:YII 模型-视图-控制器(MVC)设计模式

    Yii 使用了 Web 开发中广泛采用的模型-视图-控制器(MVC)设计模式. MVC的目标是将业务逻辑从用户界面的考虑中分离,这样开发者就可以更容易地改变每一部分而不会影响其他. 在 MVC中,模型 ...

  5. 模型计算机控制器的设计,模型计算机控制器的设计.pdf

    第 0 页模型计算机控制器的设计 <计算机组成原理> 课 程 设 计 报 告 设计题目 : 模型计算机控制器的设计 学 生: 学 号: 专业班级: 13 计师 X 班 指导教师: 麦 山 ...

  6. SteamVR 2.x手部模型、控制器的替换(12)

    本章介绍在项目过程中如何替换手部模型,或者只显示控制器/只显示手部模型. 在Player下的左右手上都挂载了Render Model组件 一.替换手部/控制器模型 Hand Prefab与Contro ...

  7. 单摆模型,控制器及其MATLAB图形仿真

    1. 单摆的模型 考虑如图所示的单摆: 表示摆杆的长度, 表示摆锤的质量.假设杆是硬质的且质量为零.用 表示杆与通过中心点的竖直轴间的夹角.单摆在竖直平面内自由摆动,摆锤以半径为的圆运动.为了写出单摆 ...

  8. 模型计算机控制器的设计,模型计算机_控制器的设计.doc

    <计算机组成原理> 课 程 设 计 报 告 设计题目: 模型计算机控制器的设计 学 生: 学 号: 专业班级: 13计师X班 指导教师: 麦 山 提交日期: 2015 年 6 月 XX 日 ...

  9. python设计模式【8】-模型·视图·控制器-复合模式

    UML类图简介 设计模式的分类 面向对象的设计原则 python设计模式[1]-单例模式 python设计模式[2]-工厂模式 python设计模式[3]-门面模式 python设计模式[4]-代理模 ...

最新文章

  1. STM32 基础系列教程 2 - GPIO 按键输入
  2. maven3安装和使用笔记
  3. nodejs 之 nvm和pm2
  4. 与圆相关的计算(信息学奥赛一本通-T1014)
  5. 什么是利用计算机化的知识进行自动推理,基于实例模型的知识推理及其在自动阅卷系统中的应用...
  6. GD2拖动验证码Thinkphp版
  7. 谷歌开源的代码评审规范,值得借鉴!
  8. linux运维工作内容及岗位要求
  9. Kali学习 | 无线渗透:7.5 Gerix 破解 WEP
  10. 禅道数据库管理登录失败,使用/opt/zbox/auth/adduser.sh命令新开用户解决
  11. matlab中基于传递函数或者状态方程的幅频特性分析
  12. kjb文件 解析_NVH原始数据文件如何读取 Part2
  13. 50道MySQL面试题,掌握之后你将获得无上法力,一发不可收拾!
  14. Go实战--也许最快的Go语言Web框架kataras/iris初识四(i18n、filelogger、recaptcha)
  15. STM32最彻底的死机是什么?看门狗也挂了?
  16. 五金机电行业供应商智慧管理平台解决方案:优化供应链管理,带动企业业绩增长
  17. 使用conda安装python包
  18. gstreamer教程(一)-基本概念
  19. oracle密码带@!,oracle的密码中带@符号
  20. VCC VDD VSS

热门文章

  1. 为《31天成为IT服务达人》征求正式名字
  2. Union-SQL Server学习笔记
  3. win8改win7 教程
  4. 2008年12月答疑贴
  5. 非安装版的PostgreSQL8.3.3的首次使用经历
  6. 接口一个被我忽略的地方--接口重定向技术
  7. python 如何定义字典_python dict如何定义
  8. python3:(unicode error) 'utf-8' codec can't decode
  9. 人工智能AI实战100讲(一)-机器人语义建图(上)
  10. HTML页面代码移动端和pc兼容,pc端网站如何实现移动端适配?