看完我的笔记不懂也会懂----AngulaJS
Angular.js学习笔记
写在开始:由于我对AngulaJS的学习只是一个最浅显的过程,所以看完后你大概只能学会如何简单的使用AngularJs,所以我对我的标题党行为道歉啦,嘿嘿
ng-app(指令)
作用是: 告诉angular核心,管理当前标签所包含的整个区域,并且会自动创建$rootScope对象
<body ng-app="">
<!-- something -->
</body>
ng-model
用于将当前输入框 与 某个需要的地方 进行关联,并成为当前作用域 对象中的属性
<input type="text" ng-model="username">
<p>{{username}}</p>
<!--
当前输入框: input
与
p标签进行关联
同时,
input的值成为它所在作用域(这里是$rootScope)中的属性值,属性名就是ng-model的值 即:
{username: $input的值$}
-->
- ng-model的数据流动
- Model层 ===> view层
- view层 ===> Model层
ng-init
为当前的作用域对象初始化数据
<!-- p所对应的作用域中,初始化的 username属性 的 属性值是 Fitz -->
<p ng-init="username='Fitz'"></p>
ng-init的数据流向
ng-init的数据流向是 单向的 view层 ==> model层
angular之表达式
angular中表达式的语法格式:{}
双向数据绑定
数据绑定: 数据从A转移(传递)到B
双向数据绑定: 数据从view层流向model层,或者从model层流向view层
<body ng-app="" ng-init="result='Fitz'">
<input type="text" name="name" value="" ng-model="result">
<p>
姓名1:{{result}}
</p>
<input type="text" name="name" value="" ng-model="result">
<p>
姓名2:{{result}}
</p>
</body>
数据流向的总结
- ng-init
- 单向 view层 ===> model层
<body ng-app ng-init="'test='name'"></body>
<!-- view层初始化数据 test='name' -->
<!-- 数据流向model层但是model层不能流向view层 -->
<!-- 具体表现在刷新页面后显示数据仍然是view初始化数据 -->
- ng-model
- 双向 view层 ===> model层 model层 ===> view层
<body ng-app ng-init="'test='name'"></body>
<!-- 一进入页面就能看到输入框显示文本为 name,这说明此时的数据流向是从model层 ===> view层 -->
<input ng-model= "test"></input>
<!-- 修改第二个文本框中的文字,能够发现第一个文本框也随之更改,此时的数据流向是双向的: view层 ===> model层 再从 model层 ===> view层 -->
<input ng-model= "test"></input>
- {{}}表达式
- 单向 model层 ===> view层
作用域对象
- 本质上是一个普通的js实例对象,ng-app指令默认会创建一个根作用域对象($rootScope)
- 根作用域对象的属性、方法与页面中的指令、表达式是关联的
控制器对象
- 控制器对象是用于控制AngularJS应用数据的 实例对象
- ng-controller 指定控制器的构造函数, Angular会自动new这个函数来创建控制器
<div ng-controller="MyController"> //MyController为自定义的构造函数
<input type="text" ng-model="firstName">
<input type="text" ng-model="lastName"> <p>名: {{firstName}}</p>
<p>姓: {{lastName}}</p>
<p>姓名: {{lastName + firstName}}</p>
<p>姓名: {{getFullName()}}</p>
</div>
- 同时Angular还会创建一个新的作用域对象
$scope,他是$rootscope的子对象 - 控制器中声明
$scope形参,Angular会自动将$scope传入function MyController($scope){ //构造函数的形参必须是$scope
//指定初始化数据,作用类似于ng-init
//$scope.prop1 = value1;
//$scope.prop2 = value2; $scope.firstName = 'Da'
$scope.lastName = 'Lx'
$scope.getFullName = function(){
return $scope.lastName + this.firstName
} console.log($scope);
}
依赖对象与依赖注入
依赖对象: 完成某个特定功能所必须以一个对象,这个必须的对象成为依赖对象
``` javascript
document.gerElementById('box1').onclick = function(event){
console.log(event.clientX);
// 得到clientX的值必须通过event对象,那么就成event对象为依赖对象
}
```
依赖注入: 依赖对象以形参的方式被注入使用
Angular直接$scope对象是一个依赖对象,它需要通过依赖注入的方式进行使用,这就意味着在controller构造函数中传入非$scope形参,会导致错误
// 这是正确的
function Controller($scope){
//something
}
//这是错误的
function Controller(result){}
命令式与声明式
命令式:注重实现、执行的过程(类似解答题,要求详细过程)
var arr = [1,2]
var arr2 = []
for (var i=0,len=arr.length; i<len; i++){
var result = arr[i] + 10
arr2.push(result)
}
声明式:注重结果(类似填空、选择题注重结果的对错)
var arr = [1,2]
var arr2 = arr.map(item,index){
return item * 10
}
console.log(arr2) //arr2 ---> [10,20]
模块对象与控制器对象
创建模块对象步骤
- 创建模块对象
//[]中可以传入依赖对象
var myModule = angular.module('myModuleName',[]);
- 生成作用域对象
myModule.controller('ControllerName',function($scope){
$scope.prop1 = value1
//something just like that
})
模块对象与控制器对象结合使用
HTML
<body ng-app="testModule">
<div ng-controller="MyController">
<input type="text" ng-model="name">
<p>工人1: {{name}}</p>
</div>
<div ng-controller="MyController2">
<input type="text" ng-model="name">
<p>工人2: {{name}}</p>
</div>
//创建模块对象
var testModule = angular.module('testModule',[])
//生成作用域对象
//方式一
testModule.controller('MyController',function($scope){
$scope.name = 'Fitz';
})
testModule.controller('MyController2',function($scope){
$scope.name = 'Lx';
})
//方式二
testModule.controller('MyController',function($scope){
$scope.name = 'Fitz2';
}).controller('MyController2',function($scope){
$scope.name = 'Lx2';
})
//方式三(显式声明依赖注入) 这种方式能够解决因为后期代码压缩引发的形参错误
testModule.controller('MyController',['$scope',function($scope){
$scope.name = 'Fitz2';
}]).controller('MyController2',['$scope',function($scope){
$scope.name = 'Lx2';
}])
表达式
- 语法: {{expression}}
- 作用: 显式表达式的结果
- 注意: 表达式中引用的变量必须是当前作用域中的变量,包括原型属性
- 特殊值: undefined, null, Infinity, NaN 会被解释成空串无任何显示效果
angular常用指令
ng-click 点击调用作用域对象
ng-repeat 遍历显示数据,数组中有几个数据就会产生几个新的作用域
<body ng-app="myApp">
<div ng-controller="myController">
<div>
<h2>人员信息列表</h2>
<ul>
<li ng-repeat="person in persons">
index: {{$index}}
---> Name: {{person.username}}
---> Age: {{person.age}}
</li>
</ul>
</div>
</div>
</body>
angular.module('myApp',[])
.controller('myController',function($scope){
//数组中包含用于显示的数据
$scope.persons = [
{username:'a',age:50},
{username:'b',age:50},
{username:'c',age:50},
{username:'d',age:50},
{username:'e',age:50}
]
})
除了$index其他都是返回Bool值
- $index
<li ng-repeat="person in persons">
{{$index}} !<-- 1 2 3 ... -->
</li>
- $first
<li ng-repeat="person in persons">
{{$first}} !<-- true / false-->
</li>
- $last
<li ng-repeat="person in persons">
{{$last}} !<-- true / false-->
</li>
- $middle
<li ng-repeat="person in persons">
{{$middle}} !<-- true / false-->
</li>
- $odd
<li ng-repeat="person in persons">
{{$odd}} !<-- true / false-->
</li>
- $even
<li ng-repeat="person in persons">
{{$even}} !<-- true / false-->
</li>
- $index
ng-bind 该指令用于解决表达式闪屏问题
- 优点:解决闪屏问题
- 缺点:只能绑定一个变量
<li ng-repeat="person in persons" ng-bind="person.username"></li>
```
ng-show与ng-hide 这两个指令的值类型是布尔值,当时true时show显示,hide隐藏
<div>
<button ng-click="switchLike()">切换</button>
<p ng-show="isLike">show !</p>
<p ng-hide="isLike">hide !</p>
</div>
angular.module('myApp',[])
.controller('myController',function($scope){
$scope.isLike = true; //ng-show/hide需要布尔值
$scope.switchLike = function(){ }
})
ng-style 能够给当前元素设置样式
<!-- 方式一 -->
<div ng-controller="myController">
<div ng-style="{width: '300px',height: '300px',background: 'pink'}"></div>
</div> <!-- 方式二 -->
<div ng-controller="myController">
<div ng-style="myStyle"></div>
</div>
angular.module('myApp',[])
.controller('myController',function($scope){
// for 第二种方法
$scope.myStyle = {
width: '300px',
height: '300px',
background: 'pink'
}
})
ng-mouseenter 响应鼠标移入
<div ng-controller="myController">
<div ng-style="myStyle" ng-mouseenter="enter()"></div>
</div>
angular.module('myApp',[])
.controller('myController',function($scope){
$scope.enter = function(){
this.myStyle.background = '#bfa'
}
})
ng-mouseleave 响应鼠标移出
<div ng-controller="myController">
<div ng-style="myStyle" ng-mouseenter="leave()"></div>
</div>
angular.module('myApp',[])
.controller('myController',function($scope){
$scope.leave = function(){
this.myStyle.background = '#bfa'
}
})
看完我的笔记不懂也会懂----AngulaJS的更多相关文章
- 看完我的笔记不懂也会懂----bootstrap
目录 Bootstrap笔记 知识点扫盲 容器 栅格系统 源码分析部分 外部容器 栅格系统(盒模型)设计的精妙之处 Bootstrap笔记 写在开始: 由于我对AngulaJS的学习只是一个最浅显的过 ...
- 看完我的笔记不懂也会懂----git
Git学习笔记 - 什么是Git - 首次使用Git - DOS常用命令 - Git常用命令 - 关于HEAD - 版本回退 - 工作区.暂存区与版本库 - git追踪的是修改而非文件本身 - 撤销修 ...
- 看完我的笔记不懂也会懂----Node.js
Node.js 学习 - 命令行窗口 - 进程与线程 - ECMAScript的缺点 - Node模块化 - Node中的全局对象 - 包 package - NPM包管理器 (Node Packag ...
- 看完我的笔记不懂也会懂----javascript模块化
JavaScript模块化 模块化引子 模块化的历史进化 模块化规范 CommonJS规范 Node.js(服务器端) 下项目的结构分析 browerify(浏览器端) 下项目的结构分析 AMD规范 ...
- 看完我的笔记不懂也会懂----less
目录 Less学习 语法篇 注释 变量 映射(Maps) @规则嵌套和冒泡 less中的嵌套规则 less中的混合 less的运算 extend延伸/继承 less忽略编译(转义) 导入(Import ...
- 看完我的笔记不懂也会懂----MongoDB
MongoDb数据库学习 - 数据库的分类 - 数据库基本概念 - MongoDB常用指令 - MongoDB的CURD - sort({key:*[1,-1]}).limit(num).skip(n ...
- 看完我的笔记不懂也会懂----MarkDown使用指南
目录 语法 [TOC] 自动生成目录 1. 标题 2. 文本强调 3. 列表 4. 图片 5. 超链接 6. 文本引用 7. 分割线 8. 代码 9. 任务列表 (MPE专属) 10. 表格 11. ...
- 看完我的笔记不懂也会懂----ECMAscript 567
目录 ECMAscript 567 严格模式 字符串扩展 数值的扩展 Object对象方法扩展 数组的扩展 数组方法的扩展 bind.call.apply用法详解 let const 变量的解构赋值 ...
- 看完我的笔记不懂也会懂----Ajax
Ajax(Asynchronous JavaScript And XML) - 本次学习所用到的插件 - XML - JSON - 关于AJAX - HTTP协议 - AJAX重点之XMLHttpRe ...
随机推荐
- Cyclic Nacklace HDU - 3746
CC这个月底总是很郁闷,昨天他查了他的信用卡,没有任何意外,只剩下99.9元了.他很苦恼,想着如何度过这最后的几天.受"HDU CakeMan"企业家精神的启发,他想卖一些小东西来 ...
- 牛客小白月赛30 B.最好的宝石 (线段树)
题意:RT. 题解:很明显的线段树维护区间最大值操作,但是我们同时还要维护最大值的个数,我们在build或者modify操作完子树然后push_up的时候,我们先从两个儿子取max更新父节点的最大值, ...
- URAL - 1635 哈希区间(或者不哈希)+dp
题意: 演队在口试中非常不幸.在42道考题中,他恰好没有准备最后一道题,而刚好被问到的正是那道题.演队坐在教授面前,一句话也说不出来.但教授心情很好,给了演队最后一次通过考试的机会.他让这个可怜的学生 ...
- Dapr 已在塔架就位 将发射新一代微服务
微服务是云原生架构的核心,通常使用Kubernetes 来按需管理服务扩展. 微软一直走在 Cloud Native Computing Foundation的 最前沿,并通过使用Kubernetes ...
- BKDR字符串哈希
BKDR字符串哈希 bkdrhash冲突的可能性非常小,但是由于\(hash\)值非常大不能映射到哈希数组地址上,所以可以通过取余,用余数作为索引地址.但这样做造成了可能的地址冲突. #include ...
- Dubbo SPI 机制源码分析(基于2.7.7)
Dubbo SPI 机制涉及到 @SPI.@Adaptive.@Activate 三个注解,ExtensionLoader 作为 Dubbo SPI 机制的核心负责加载和管理扩展点及其实现.本文以 E ...
- OPENSOURCE - libcurl
本文仅做备份存档,原文地址如下,请点链接进入 https://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html https://www.c ...
- Windows10电脑优化和使用
本文将结合自身经验和短视频软件中的优化技巧,推荐一些Win10系统的优化和使用小技巧. 电脑优化 新电脑调出我的电脑等桌面图标: 右键桌面,选择个性化,左侧选择主题,在相关的设置中找到桌面图标设置,将 ...
- 信号量解决写者优先&读者优先&公平竞争(reader writer)
先说问题: 这里的rand都是伪随机.解决也很简单,srand即可.内容懒得改了~~ 描述及思路: 代码: 运行结果: 读者优先: 效果 ...
- C++含有无符号类型的表达式的计算
unsigned u=10; int i=-42; cout<<i+i<<endl; cout<<u+i<<endl; 在第二个输出表达式中,相加前首先 ...