模型和控制器-起步阶段

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.  
  9. <script>
  10. function MyController($scope) {
  11. $scope.username = 'World';
  12. $scope.sayHello = function() {
  13. $scope.greeting= 'Hello ' + $scope.username + '!';
  14. };
  15. }
  16. </script>

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/375793.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apache开启Gzip压缩

1. 编辑Apache的httpd.conf文件 vim /etc/httpd/conf/httpd.conf 2. 开启mod_deflate.so模块 LoadModule deflate_module modules/mod_deflate.so 3. 对该模块进行配置 # ShiftG到最下一行添加如下内容<IfModule mod_deflate.c> # 压缩等级 9 DeflateCompressionLevel 9 …

计算机的网络与结构,计算机结构与组成29-网络.ppt

计算机结构与组成29-网络CS61C L221 Performance ? UC Regents I/O Review I/O gives computers their 5 senses I/O speed range is 12.5-million to one Differences in processor and I/O speed ? synchronize with I/O devices before use Polling works, but expensive …

Canvas动画 位图缓存提高效率和对应的内存问题

对一个矢量图动画&#xff0c;开启位图缓存能大大提高运行效率。所谓开启位图缓存&#xff0c;其实要自己动手&#xff0c;先创建一个临时canvas&#xff0c;然后把矢量图绘制到这个canvas上&#xff0c;到了实际绘制时&#xff0c;直接把这个临时canvas拷贝到真正canvas上。而…

ASP.NET MVC 学习第一天

今天开始第一天学习asp.net mvc&#xff0c;写的不是很好&#xff0c;高手不要喷&#xff0c;希望大家能一起进步学习。 好了&#xff0c;开始学习 新建项目&#xff0c;选择mvc 4应用程序 接下来选择基本&#xff0c;视图引擎当然要选择Razor&#xff0c;如果在选择aspx那我们…

python提取字符串中的数字

字符串存储在string.txt中&#xff0c;将字符串中的数字提取出来&#xff0c;组成心得字符串&#xff0c;并打印输出。 #!/usr/bin/env python3 fileopen(/home/user/string.txt) file_contextfile.read() i0 string while i < len(file_context):if file_context[i].isdig…

计算机显示发送报告,Word文档打不开提示发送错误报告的解决方法

经常使用word文档的人员都会碰到过这种发送错误报告情况&#xff0c;既然有这个问题就要查个究竟什么原因造成&#xff0c;才能完美解决&#xff0c;那么今天小编就在这里讲解word文档发送错误报告的方法。根本原因是&#xff1a;打开word出现提示word发送错误报告的故障其主要…

asp.net mvc 如何在View中获取Url参数的值

如果url是 /home/index?id3 直接Request就ok。 但是如果路由设定为&#xff1a;{controller}/{action}/{id} url是 /home/index/3 这时想在页面View中获取参数id的值&#xff0c;该怎么获取&#xff1f; 查了下资料好多人都利用Action获取到参数值后&#xff0c;用Viewdata…

js 控制

js 制动控制 代码 是 :setInterval(function(){$(".egg").click();},1000); 使用方法&#xff1a;调出浏览器放控制台(console)&#xff0c;一般是按F12&#xff0c;将上述代码粘贴后回车就可以自动运行了。转载于:https://www.cnblogs.com/Look_Sun/p/3798903.htm…

python读取文本文件的三种方法

参考链接 python读取文本文件的内容&#xff0c;有三种方法。 read()、readline()、readlines() read() read()是最简单的一种方法&#xff0c;一次性读取文件的所有内容放在一个大字符串中&#xff0c;即内存中。 fileopen(test.txt) try:file_contextfile.read() #file…

图灵计算机模型意义,图灵机有什么意义_学习图灵机模型中遇到的问题

图灵机意义图灵提出图灵机的模型并不是为了同时给出计算机的设计&#xff0c;它的意义我认为有如下几点&#xff1a;1、它证明了通用计算理论&#xff0c;肯定了计算机实现的可能性&#xff0c;同时它给出了计算机应有的主要架构&#xff1b;2、图灵机模型引入了读写与算法与程…

使用MVVM-Sidekick开发Universal App(一)

终于要迈进Universal的大坑了&#xff0c;还有点小激动呢。 CurrencyExchanger 掌中汇率是我前几年发布在Windows Phone商店中的一个应用&#xff0c;当时是WP7版本&#xff0c;下载链接&#xff1a;http://www.windowsphone.com/zh-cn/store/app/%E6%8E%8C%E4%B8%AD%E6%B1%87%…

NewCode----给定两个数R和n,输出R的n次方

参考链接 输入描述: 多组测试用例&#xff0c;请参考例题的输入处理 输入每行一个浮点数 R 其中0.0 < R <99.999&#xff0c; 一个整数 n 其中0 < n <25 输出描述: 输出R的n次方 输入例子1: 95.123 12 0.1 1 输出例子1: 548815620517731830194541.89902534…

如何检测本计算机耗电量,如何查看电脑耗电量?鲁大师查看电脑使用功率的方法...

【www.xinr41319.cn--电脑网络】查看自己电脑的电源功率有两大好处&#xff0c;第一知道给台式电脑配置多大的电源&#xff0c;第二可以精确的算出&#xff0c;一台电脑&#xff0c;一天一般消耗多少电&#xff0c;那么小编教大家来查看一下自己电脑的功率是多少。我们可以要借…

【转载】COM小结

原文&#xff1a;http://blog.csdn.net/byxdaz/article/details/6595210 一、Com概念 所谓COM&#xff08;Componet Object Model&#xff0c;组件对象模型&#xff09;&#xff0c;是一种说明如何建立可动态互变组件的规范&#xff0c;此规范提供了为保证能够互操作&#xff0…

解决Dropbox无法连接的问题

同步共享服务Dropbox从6月18日开始再次遭到封锁&#xff0c;原因是DNS污染。Dropbox上次在2010年5月曾遭到IP封锁和网址关键字过 滤&#xff0c;2012年5月除文件外链功能外其它功能可正常访问&#xff1b;2014年2月全部功能都可以正常访问。中国正展开净网行动&#xff0c;文件…

求任意数的阶乘

这是笔试的第二题&#xff0c;求任意数的阶乘其实实质也就是大数相乘&#xff0c;很可惜没有在规定时间内完成这道题&#xff0c;估计这次笔试凉凉。 #include<iostream> using namespace std;int result[200] { 0 }; int N; void fun(int n) {int temp;int i;int carr…

RDLC报表系列一

1、报表项目搭建&#xff1a; 配置好后&#xff0c;单击Web服务URL:http://lg-20151517ryre/ReportServer 如果电脑系统打开的时候没有设置密码的话&#xff0c;此时打开有可能会出现需要登录名和密码。如出现此种情况可给Administrator设置密码。然后刷新当前页面就可以看大上…

.net 服务器自动执行,自动检测服务器使用流量并执行命令脚本

#codingutf-8limit_total0# limit_total 上传下载的流量限制&#xff0c;单位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_in0# limit_in 下载的流量限制&#xff0c;单位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_out0# limi…

Android APK是否需要预解压

今天在逛论坛的时候&#xff0c;发现有一个朋友问的问题。其主要目的&#xff0c;是想实现 玩家首次进入游戏的时候&#xff0c;或者新安装了版本的时候&#xff0c;对APK进行解压&#xff0c;写入SD卡。这样游戏运行过程中&#xff0c;将不会再从APK中读取资源。 以提高效率。…

C++开发秋招笔试题

第一题&#xff1a; 记得不太清了&#xff0c;凑合看吧&#xff01; 输入&#xff1a; 第一行&#xff1a;T 表示有T个测试用例 以下N行&#xff1a; 输入的T个测试用例 测试用例&#xff1a; 每个输入包含四个输入&#xff0c;a&#xff0c;b&#xff0c;c&#xff…