Open wallleap opened 4 years ago
title: AngularJs 学习笔记 date: 2020-06-04 23:33 updated: 2020-06-04 23:33 cover: //cdn.wallleap.cn/img/pic/cover/202302cmRhbN.jpg category: 技术杂谈 tags:
前端框架之一,个人更喜欢用 Vue 和 React
使用 jQuery 实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>jQuery实现</title> </head> <body> <input type="text"> <p>您输入的内容是:<span></span></p> <script src="jquery.js"></script> <script> $(function(){ //document.ready 文档(页面结构)加载完毕 window.onload:整个页面加载完毕,包括图片等资源 $('input').keyup(function(){ var value = this.value // $(this).val() $('span').html(value) }) }) </script> </body> </html>
使用 AngularJS 实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS实现</title> </head> <body ng-app> <input type="text" ng-model="username"> <p>您输入的内容是:<span>{{username}}</span></p> <!-- 引入 NG --> <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.2.29/angular.js"></script> </body> </html>
Chrome 调试插件:
ng-inspector for AngularJS
ng-app(指令):告诉angular核心,它管理当前标签所包含的整个区域,并且会自动创建 $rootScope 根作用域对象(通常放在 body 标签)
ng-app
ng-model:将当前输入框的值与谁关联(属性名:属性值),并作为当前作用域对象($rootScope)的属性
ng-model
表达式:通常有一个返回值,可以放在任何需要值的地方,比如函数调用的参数、一个变量名、一个运算等({{username}})
{{username}}
语句:通常表示一个完整的执行单位,一段完整的 js 可执行代码,有的语句也可以用表达式来执行,称为表达式语句
区别:语句用分号结尾,有些语句我们没有加分号,例如 console.log 虽然没加分号,但也是语句,因为 js 引擎会自动在解析的时候加上分号
console.log
特例:if 语句,就不用加分号,也可以是完整的语句
数据绑定:数据从一个地方 A 转移(传递)到另一个地方 B,而且这个操作由框架来完成
双向数据绑定:数据可以从 View(视图层)流向 Model(模型/数据层),也可以从 Model 流向 View
视图(View):也就是我们的页面(主要是 Angular 指令和表达式)
模型(Model):作用域对象(当前为 $rootScope),它可以包含一些属性或方法
当改变 View 中的数据,Model 对象的对应属性也会随之改变:ng-model 指令 数据从 View 到 Model
当 Model 域对象的属性发生改变时,页面对应数据随之更新:{{}} 表达式 数据从 Model 到 View
{{}}
ng-model 是双向数据绑定,而 {{}} 是单向数据绑定(View——页面 Model——内存)
ng-init:用来初始化当前作用域变量(View-->Model-->View)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS实现</title> </head> <body ng-app> <!-- ng-app=""除了接管区域,还会自动生成根作用域($rootScope) --> <!-- <input type="text" ng-model="name"> 先传递到Model,再从Model到三个View中的相应位置 <p>姓名1:{{name}}</p> <input type="text" ng-model="name"> <p>姓名2:{{name}}</p> --> <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.2.29/angular.js"></script> </body> </html>
显示结果
过程
<body ng-app>
ng-app="" 除了接管区域,还会自动生成根作用域($rootScope)
ng-app=""
<input type="text" ng-model="name">
<p>姓名1:{{name}}</p>
初始化数据
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS实现</title> </head> <body ng-app ng-init="name='Tom'"> <!-- ng-init初始化数据 --> <input type="text" ng-model="name"> <p>姓名1:{{name}}</p> <input type="text" ng-model="name"> <p>姓名2:{{name}}</p> <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.2.29/angular.js"></script> </body> </html>
$scope
eg:数组中每一项加 10
var arr = [1,2,3,4,5] var newArr1 = [] // 命令式 for(var i = 0; i < arr.length; i++){ var value = arr[i] + 10 newArr1.push(value) } console.log(newArr1) // 声明式 var newArr2 = arr.map(function(item, index){ return item + 10 }) console.log(newArr2)
$rootScope
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS实现</title> </head> <body ng-app ng-init="age=12"> <div ng-controller="MyController"> <input type="text" placeholder="姓" ng-model="firstName"> <input type="text" placeholder="名" ng-model="lastName"> <p>姓名1:{{firstName+'-'+lastName}}</p> <p>姓名2:{{getName()}}</p> {{age}} </div> <div> {{firstName}} <!-- 不能显示 --> </div> <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.2.29/angular.js"></script> <script> function MyController($scope){ // 形参必须是$scope // console.log($scope) // console.log(this instanceof MyController) $scope.firstName = 'lu' $scope.lastName = 'wang' $scope.getName = function(){ return $scope.firstName + ' ' + $scope.lastName // return this.firstName + ' ' + this.lastName } } </script> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>AngularJS实现</title> </head> <body ng-app="myApp"> <!--指向模块对象的名字--> <div ng-controller="MyController"> <input type="text" ng-model='empName'> <p>员工名字1:{{empName}}</p> </div> <div ng-controller="MyController2"> <input type="text" ng-model='empName'> <p>员工名字2:{{empName}}</p> </div> <script src="https://cdn.bootcdn.net/ajax/libs/angular.js/1.5.5/angular.js"></script> <script> // console.log(angular) /* // 创建模块对象 var myModule = angular.module("myApp", []) // 生成作用域对象 myModule.controller('MyController', function($scope){ $scope.empName = 'Tom' }) myModule.controller('MyController2', function($scope){ $scope.empName = 'Jack' }) */ // 优化 链式调用 /* <angular.module("myApp", []) .controller('MyController', function($scope){ // 返回值是模块对象 $scope.empName = 'Tom' }) .controller('MyController2', function($scope){ // 隐式声明依赖注入 $scope.empName = 'Jack' }) */ // 但是,由于js代码压缩之后形参会用其他字母abcd代替,会造成angular解析不了,解决方案: <angular.module("myApp", []) .controller('MyController', ['$scope', function($scope){ // 显式声明依赖注入 $scope.empName = 'Tom' }]) .controller('MyController2', ['$scope', function($scope){ $scope.empName = 'Jack' }]) </script> </body> </html>
{{expression}}
Number
String
Boolean
undefined
Infinity
NaN
null
""
ng-init
ng-click
ng-controller
ng-bind
ng-repeat
ng-show
ng-hide
ng-class
ng-style
ng-mouseenter
ng-mouseleave
title: AngularJs 学习笔记 date: 2020-06-04 23:33 updated: 2020-06-04 23:33 cover: //cdn.wallleap.cn/img/pic/cover/202302cmRhbN.jpg category: 技术杂谈 tags:
前端 description: AngularJs 学习笔记
前端框架之一,个人更喜欢用 Vue 和 React
一、Angular 介绍
2.0 3.0 4.0 TypeScript第一个 Angular 程序
使用 jQuery 实现
使用 AngularJS 实现
Chrome 调试插件:
Angular 中的知识点
ng-app
(指令):告诉angular核心,它管理当前标签所包含的整个区域,并且会自动创建 $rootScope 根作用域对象(通常放在 body 标签)ng-model
:将当前输入框的值与谁关联(属性名:属性值),并作为当前作用域对象($rootScope)的属性表达式:通常有一个返回值,可以放在任何需要值的地方,比如函数调用的参数、一个变量名、一个运算等(
{{username}}
)语句:通常表示一个完整的执行单位,一段完整的 js 可执行代码,有的语句也可以用表达式来执行,称为表达式语句
区别:语句用分号结尾,有些语句我们没有加分号,例如
console.log
虽然没加分号,但也是语句,因为 js 引擎会自动在解析的时候加上分号特例:if 语句,就不用加分号,也可以是完整的语句
二、四个重要概念
1、双向数据绑定
数据绑定:数据从一个地方 A 转移(传递)到另一个地方 B,而且这个操作由框架来完成
双向数据绑定:数据可以从 View(视图层)流向 Model(模型/数据层),也可以从 Model 流向 View
视图(View):也就是我们的页面(主要是 Angular 指令和表达式)
模型(Model):作用域对象(当前为 $rootScope),它可以包含一些属性或方法
当改变 View 中的数据,Model 对象的对应属性也会随之改变:ng-model 指令 数据从 View 到 Model
当 Model 域对象的属性发生改变时,页面对应数据随之更新:
{{}}
表达式 数据从 Model 到 Viewng-model 是双向数据绑定,而
{{}}
是单向数据绑定(View——页面 Model——内存)ng-init:用来初始化当前作用域变量(View-->Model-->View)
显示结果
过程
ng-app=""
除了接管区域,还会自动生成根作用域($rootScope)初始化数据
2、依赖注入
$scope
对象就是依赖对象,并且是依赖注入的形式进行使用eg:数组中每一项加 10
三、三个重要对象
1、作用域与控制器
$scope
,它是$rootScope
的子对象$scope
形参,Angular 会自动将$scope
传入2、模块和控制器
四、两个页面语法
1、表达式
{{expression}}
Number
/String
/Boolean
undefined
,Infinity
,NaN
,null
解析为空串""
,不显示任何效果2、常用指令
ng-app
:指定 AngularJS 应用的根作用域对象ng-model
:指定表单元素与作用域对象属性的绑定ng-init
:初始化作用域对象属性的值ng-click
:指定点击事件的处理函数ng-controller
:指定控制器构造函数ng-bind
:指定元素的文本内容与作用域对象属性的绑定ng-repeat
:指定元素的重复,与作用域对象数组的绑定ng-show
:指定元素的显示与隐藏,与作用域对象属性的绑定ng-hide
:指定元素的隐藏与显示,与作用域对象属性的绑定ng-class
:指定元素的类样式,与作用域对象属性的绑定ng-style
:指定元素的内联样式,与作用域对象属性的绑定ng-mouseenter
:指定鼠标进入事件的处理函数ng-mouseleave
:指定鼠标离开事件的处理函数