AngularJs学习笔记(四)

1、AngularJs中的Module可以包含哪些组件?
(1)value:保存可以在不同的controller之间共享的对象、数据
(2)constant:保存可以在不同的controller之间共享的常量
(3)service:保存可以在不同的controller之间共享的对象、数据、操作
(4)filter:可以实现对数据的过滤和格式化,date、currency、limitTo.........
(5)controller:控制器,用于设定模型数据-------每一个控制器实例都与一个$scope对象相链接-------注意:angular中的控制器不是单例的!每次使用都会创建一个新的对象(对应的$scope对象也是新创建的

(6)directive:指令,用于封装DOM操作,扩展HTML标签及属性-----为HTML添加新标签、新的属性、新的样式
2、关于模式
23+1种模式:
一种最简单的设计模式:单例模式------某个对象能够且仅能够创建一次

JS中单例模式举例:

//通过立即执行函数实现了JS中的单例模式
(function (ename,age){this.ename=ename;this.age=age;window.emp=this;//此处虽然污染了全局变量,但是使得外界可以访问这个对象
}
)('Tom',20);
console.log(window.emp);
//注:因为AngularJs中的controller可以反复创建,所以不是单例的

验证controller不是单例的:

html代码:

<body ng-app="myModule"><h1>验证controller不是单例的</h1><div ng-controller="myCtr1">我是第一个controller</div><div ng-controller="myCtr2">我是第二个controller</div><h3><b>结论:</b>若第一个输出为两个undefined,而第二个输出两个都是非undefined,则验证controller是非单例的(若是单例,则意味着myCtr1和myCtr2是同一个控制器,那么当第一次输出位undefined时,后面又赋值了,那第二次应该输出有值)</h3><script src="js/angular.js"></script><script src="js/9.js"></script>
</body>

对应的js代码:

var mm=angular.module('myModule',[]);
//声明第一个控制器
mm.controller('myCtr1',function($scope){//此例中的this代表当前对象,即myCtr1console.log(this.uname+'   '+this.age);this.uname='Tom';this.age=20;
});
//声明第二个控制器
mm.controller('myCtr2',function($scope){//这中的this代表myCtr2console.log(this.uname+'   '+this.age);
});

运行结果截屏:

页面:

console:

验证service是单例的:

     结论:service,是module中的一种组件,专用于在不同的控制器对象间共享数据------任何一个service对象都是单例的-----只要一个service对象创建了,只要浏览器不关闭当前网页,此对象就一直存在---且只有这样一个对象!创建service的语法:

 moduleName.service('serviceName',function(){this.xx=xxx;this.y=function(){};});

验证的html代码:

<body ng-app="myModule"><h1>验证service是单例的,请打开控制台查看结果</h1><div ng-controller="myCtr1">我是第一个controller</div><div ng-controller="myCtr2">我是第二个controller</div><script src="js/angular.js"></script><script src="js/10.js"></script>
</body>

验证的js代码:

angular.module('myModule',[])//创建一个服务(注:service中的数据是不能直接在网页上显示,必须放在$scope中才可).service('myService1',function(){this.emp={};}).controller('myCtr1',function($scope,myService1){//将新创建的服务注入到controller中console.log(myService1.uname+'  '+myService1.age);myService1.uname='Tom';myService1.age=20;}).controller('myCtr2',function($scope,myService1){//虽然第一次输出为undefined,但是在第一controller中//给服务又赋值了,因为其是单例的,所以在第二次输出时有值console.log(myService1.uname+'  '+myService1.age);});

页面截图:

练习:创建两个Controller,第一个Controller中做一个双向绑定:<input ng-model="msg"/>,设法在第二个Controller的范围内,显示出前一个Controller中用户输入的msg  

对应的html代码:

<!DOCTYPE html>
<html><head><title>AngularJs的练习</title><meta charset="UTF-8"/></head><body ng-app="myModule"><div ng-controller="myCtr1"><label>请输入内容:</label><input ng-model="msg"/></div><p ng-controller="myCtr2">输入框中输入的内容是:{{ inputMsg }}</p><script src="js/angular.js"></script><script src="js/11.js"></script></body>
</html>

对应的js代码:

angular.module('myModule',[]).service('myService',function(){//因为涉及到了不同的controller之间传递数据//故采用servicethis.message='';}).controller('myCtr1',function($scope,myService){$scope.$watch('msg',function(newVal,oldVal){//当用户输入内容发生变化时,就执行赋值语句,更新service//中保存的数据myService.message=newVal;});}).controller('myCtr2',function($scope,$interval,myService){$scope.inputMsg=myService.message;//此处用定时器实现了,实时更新第二个controller中的mode数据$interval(function(){$scope.inputMsg=myService.message;},10);});

3、AngularJs中自定义过滤器
js代码演示:-------此代码是弥补了原生的limitTo过滤器的不足,即可以超出限制加省略号

angular.module('myModule',[])//自定义了一个过滤器.filter('myLimitTo',function(){return function(txt,len){var result=txt;//对超出限制的文字加省略号if(result.length>len){result=result.slice(0,len)+'...';}return result;}});

对应的HTML中用法:

<p>{{ 'hnhgfvvbb' | myLimitTo : 30 }}</p>

 4、自定义指令

   directive:指令,用于扩展HTML元素、属性、样式。定义新指令的语法:

       注:$watch不能监听service中的数据

//指令是一个对象
moduleName.directive('指令名',function(){return {//A:attribute,E:element,C:class,这三个可以任意组合//用于限制该指令在HTML中扮演的角色restrict:'AEC',template:'该指令实际对应的HTML内容',//当template中内容过多时,可以把内容写在一个单独的HTML文件中//用如下方式引入templateUrl:'xxx.html'}
});

 练习:定制一个新的指令:nav-logo,只要使用该指令的地方,就会显示一个灰色的导航条以及一个logo图片

注:以下代码不能本地打开,需要通过服务器才可运行成功

 对应的html:

<!DOCTYPE html>
<html><head><title>AngularJs的练习</title><meta charset="UTF-8"/><link rel="stylesheet" href="css/12.css"/></head><body ng-app="myModule"><!-- 将指令当标签用 --><nav-logo></nav-logo><!-- 将指令当属性用 --><div nav-logo></div><!-- 将指令当样式用(注:需要在指令中指定restrict:'C'才可实现) --><!-- <div class="nav-logo"></div> --><script src="js/angular.js"></script><script src="js/12.js"></script></body> 
</html>

对应的js代码:

angular.module('myModule',[])//声明一个指令.directive('navLogo',function(){return {//restrict:'C', 不是必须的,但是若要将指令当做样式的话,必须写上templateUrl:'directive/12.html'}});

对应的css:

*{margin:0;padding:0;
}
.nav{height:60px;background:#afa;
}
.nav>img{width:60px;height:60px;margin-left:100px;
}

对应的模板html(此例中的12.html):

<div class="nav"><img src="img/3.png"/>
</div>

效果截图:

转载于:https://www.cnblogs.com/mujinxinian/p/5998993.html

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

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

相关文章

[你必须知道的异步编程]——异步编程模型(APM)

本专题概要&#xff1a;引言你知道APM吗&#xff1f;你想知道如何使用异步编程模型编写代码吗&#xff1f;使用委托也可以实现异步编程&#xff0c;你知道否&#xff1f;小结一、引言在前面的C#基础知识系列中介绍了从C#1.0——C#4.0中一些主要特性&#xff0c;然而.NET 4.5更新…

iOS 10 的一个重要更新-自定义的通知界面

续上篇&#xff0c;在简单闹钟的例子上&#xff0c;在通知界面上显示图片动画&#xff0c;并用通知关联的按钮更新通知界面。介绍 iOS 10 通知 API 的扩展&#xff1a;自定义通知显示界面。 新框架可以统一处理本地通知和远程推送&#xff0c;同时增加了一些新 API 来控制等待中…

[USACO 1.3.3]Calf Flac

o(︶︿︶)o 烦躁&#xff0c;看了半天没看懂这个O(n)的回文串算法是什么东西&#xff0c;直接套上模板就交了。然后AC了 题目&#xff1a; Description 据说如果你给无限只母牛和无限台巨型便携式电脑(有非常大的键盘),那么母牛们会制造出世上最棒的回文。你的工作就是去这些牛…

Class.forName()用法详解

Class.forName()用法详解 标签&#xff1a; classjvmjdbc数据库documentationjava2012-03-29 09:39 40414人阅读 评论(8) 收藏 举报分类&#xff1a;Java考古学&#xff08;74&#xff09; 主要功能 Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要…

应对不良网络文化的技术之一——网络信息抽取技术

1 引言 2008年1月17日&#xff0c;中国互联网络信息中心(CNNIC)发布了《第21次中国互联网络发展状况统计报告》[1]&#xff0c;报告显示&#xff1a; (1) 截至2007年12月&#xff0c;网民数已增至2.1亿人。中国网民数增长迅速&#xff0c;比2007年6月增加4800万人&…

HBuilder完成webApp入门(2)

一、HBuilder的下载地址&#xff1a;http://www.dcloud.io/&#xff0c;点击那个“DownLoad”就可以 了 二、假设一切顺利&#xff0c;启动HBuilder后&#xff0c;大家会看到如下的界面 点击新建移动APP&#xff1a; 接下来就会弹出一个选择模板的对话框&#xff1a; 默认的模板…

高可用集群 heartbeatv1实例

——————— 高可用集群的简单配置 ————————地址规划 主节点&#xff1a;HA1 172.16.21.13 hostname node2.magedu.com备节点&#xff1a; HA2 172.16.21.14 hostname node1.magedu.comVIP 172.16.21.9前提工作1&#xff0c;配置主机名 hostname保证uname …

你知道“拉黑”、“关注”、“点赞”、“转发”、“分享到朋友圈”等英语咋说吗?

From: https://www.sohu.com/a/220161051_559507 “分享到朋友圈”等英语咋说吗&#xff1f; Mini apps 小程序 小程序”&#xff08;mini apps&#xff09;是一个不需要下载安装就可使用的应用&#xff08;apps that can be accessed without downloading&#xff09;&#x…

配套自测连载(三)

接上期(答案已给出)本期是专门针对《深入理解计算机网络》图书第4章而编写的10道计算机网络体系架构中的物理层技术自测题&#xff0c;可以检验你对本章的学习效果。把你的答案直接写在评论中即可&#xff0c;笔者将在每期发表10天后给出正确答案。本书是国内最通俗、最系统的计…

[json] JSON for Modern C++

有幸能接触到这个&#xff0c;这是我遇到的使用最方便的json了&#xff0c;效率没研究过&#xff01; 简单了使用了下&#xff0c;感觉非常好用&#xff0c;记录下&#xff1a; 要使用这个json&#xff0c;只需要使用json.hpp就行&#xff0c;放入自己的工程里&#xff0c;但…

libinject的编译

libinject是一个Android进程注入实例&#xff0c;其下载地址为&#xff1a;http://download.csdn.net/download/ljhzbljhzb/3680780 libinject的编译需要NDK开发环境&#xff0c;在NDK安装成功之后&#xff0c;可以先将其自带的实例中的HelloJni导入到eclipse中&#xff0c;编译…

Linux Supervisor 守护进程基本配置

supervisor:C/S架构的进程控制系统&#xff0c;可使用户在类UNIX系统中监控、管理进程。常用于管理与某个用户或项目相关的进程。 组成部分supervisord&#xff1a;服务守护进程supervisorctl&#xff1a;命令行客户端Web Server&#xff1a;提供与supervisorctl功能相当的WEB操…

三阶魔方还原公式

From: https://www.cnblogs.com/zqifa/p/mofang-1.html 1. 第二层棱块归位&#xff1a; 2. 顶层十字 3. 顶层棱中间块归位 这一步的目的是使顶层的4个棱中间块全部归位。 转动顶层(U)&#xff0c;若可以使一个棱中间块归位(如下图左&#xff0c;这里以[红-黄]块为例)&#x…

选项板概述

2019独角兽企业重金招聘Python工程师标准>>> 1、选项板概述 选项面板是一个包括一个或多个选项卡(Tab)&#xff0c;同一时刻只显示一个选项卡的这种用户界面。比如下图的IE选项设置界面中&#xff0c;就是一个选项板的应用&#xff0c;选项板上有“常规”、“安全”…

三阶魔方的入门教程

From: http://www.rubik.com.cn/beginner.htm 下面是三阶魔方图文教程&#xff0c;想直接看更好懂的三阶魔方视频教程请点这里 魔方别看只有26个小方块&#xff0c;变化可真是不少&#xff0c;魔方总的变化数为 或者约等于4.31019。如果你一秒可以转3下魔方&#xff0c;不计重…

MySQL LIST分区(转载)

LIST分区和RANGE分区非常的相似&#xff0c;主要区别在于LIST是枚举值列表的集合&#xff0c;RANGE是连续的区间值的集合。二者在语法方面非常的相似。同样建议LIST分区列是非null列&#xff0c;否则插入null值如果枚举列表里面不存在null值会插入失败&#xff0c;这点和其它的…

啦啦

Y2错题解析 数据流程图描述信息的来龙去脉和实际流程&#xff0c;反映信息在系统中流动、处理和存储的情况。程序结构图用来描述程序结构&#xff0c;一般由构成系统的要素和表达要素间关系的连线或箭头构成。因果图是一种发现问题“根本原因”的分析方法。 Spring依赖检查的常…

emacs 入门教程,菜单汉化,配置文件等杂乱文章

首先来一发ArchWiki的Emacs简体中文的入门教程 https://wiki.archlinux.org/index.php/Emacs_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87) 怎样设置&#xff0c;Emacs中文菜单&#xff1f; 把包内的3个文件丢到 emacs/share/emacs/site-lisp下面。 在&#xff5e;/ 建一个 .emacs的…

关于element框架的el-image点击后,页面出现卡死等情况的解决方式

当el-image标签被添加时&#xff0c;页面的body就会自动添加style属性 所以我们绑定一个点击事件删除样式就可以了 <el-image style"width: 100px; height: 100px" :src"scope.row.logo" fit"scale-down" click"cancelStyle()"/&…

从源代码角度看Struts2返回JSON数据的原理

2019独角兽企业重金招聘Python工程师标准>>> 前面一篇文章其实只是介绍了如何在Struts2中返回JSON数据到客户端的具体范例而无关其原理&#xff0c;内容与标题不符惹来标题党嫌疑确实是笔者发文不够严谨&#xff0c;目前已修改标题&#xff0c;与内容匹配。本文将从…