angularjs表达式
- 格式:doc
- 大小:29.00 KB
- 文档页数:2
在AngularJS中,可以使用JavaScript的字符串基本操作来处理字符串。
以下是一些常见的字符串基本操作:1. 获取字符串长度:使用字符串的`length`属性可以获取字符串的长度。
例如:`var str = "Hello World"; var len = str.length;`,`len`的值为11。
2. 字符串连接:使用加号(+)可以将两个字符串连接起来。
例如:`var str1 = "Hello"; var str2 = "World"; var result = str1 + " " + str2;`,`result`的值为"Hello World"。
3. 字符串截取:使用`substring()`方法可以截取字符串的一部分。
该方法接受两个参数,第一个参数是起始位置,第二个参数是结束位置(可选)。
例如:`var str = "Hello World"; var subStr = str.substring(6, 11);`,`subStr`的值为"World"。
4. 字符串查找:使用`indexOf()`方法可以查找字符串中某个子串的位置。
该方法接受一个参数,即要查找的子串。
如果找到了,返回子串的起始位置;如果找不到,返回-1。
例如:`var str = "Hello World"; var index = str.indexOf("World");`,`index`的值为6。
5. 字符串替换:使用`replace()`方法可以将字符串中的某个子串替换为另一个字符串。
该方法接受两个参数,第一个参数是要替换的子串,第二个参数是替换后的字符串。
例如:`var str = "Hello World"; var newStr = str.replace("World", "AngularJS");`,`newStr`的值为"Hello AngularJS"。
angular双向绑定原理AngularJS是一个流行的前端JavaScript框架。
其最大的特色就是双向数据绑定,即视图层和数据层的自动同步。
这使得我们编写的应用程序具有更好的实时性和交互性。
本文将介绍Angular双向数据绑定的原理。
一、双向数据绑定的基本原理双向数据绑定是AngularJS的核心特性之一。
通过双向数据绑定,AngularJS可以在数据模型(Model)和视图层(View)之间建立连接。
当Model中的数据发生变化时,视图层会自动响应变化;当视图层的数据发生变化时,Model会同步更新。
这样,我们可以避免手动操作DOM 元素、查找和更新视图的繁琐操作。
双向数据绑定的原理可以简单概括为:当Model中的数据发生变化时,AngularJS通过$watch机制监视到变化,并自动更新视图。
当视图层的数据发生变化时,AngularJS通过$digest 循环机制自动更新Model。
这两个过程都是自动化的,我们不需要自己手动操作。
二、$watch机制AngularJS使用$watch机制监听Model中的变化。
$watch即“$scope.$watch”,用于监视一个表达式的变化。
当使用$watch监视一个表达式时,AngularJS会将其放入一个$watch列表中。
当某个变量被修改后,AngularJS 会启动$digest循环,并在每个$digest循环中遍历$watch 列表,检查是否有变化。
如果变化,则会调用$watch的监听器(listener)函数,并更新相关的视图。
$watch还有两个额外的参数:第二个参数是一个比较函数,用来比较旧值和新值是否相等;第三个参数则是一个布尔值,表示是否监听对象属性的变化(默认为false)。
三、$digest循环$digest循环是AngularJS自动触发的,其作用是检测Model中的所有$watch列表是否有变化。
当$digest循环被触发时,AngularJS会以当前的$watch列表为基础遍历整个作用域链(Scope Chain),检查每个$watch的表达式是否有变化。
AngularJS中文网是时候给这些网页来点动态特性了——用AngularJS!我们这里为后面要加入的控制器添加了一个测试。
一个应用的代码架构有很多种。
对于AngularJS应用,我们鼓励使用模型-视图-控制器(MVC)模式解耦代码和分离关注点。
考虑到这一点,我们用AngularJS来为我们的应用添加一些模型、视图和控制器。
请重置工作目录:git checkout -f step-2我们的应用现在有了一个包含三部手机的列表。
步骤1和步骤2之间最重要的不同在下面列出。
,你可以到GitHub去看完整的差别。
视图和模板在AngularJS中,一个视图是模型通过HTML**模板**渲染之后的映射。
这意味着,不论模型什么时候发生变化,AngularJS会实时更新结合点,随之更新视图。
比如,视图组件被AngularJS用下面这个模板构建出来: ...{{}}{{phone.snippet}}我们刚刚把静态编码的手机列表替换掉了,因为这里我们使用ngRepeat指令和两个用花括号包裹起来的AngularJS表达式——{{}}和{{phone.snippet}}——能达到同样的效果。
在标签里面的ng-repeat="phone in phones"语句是一个AngularJS迭代器。
这个迭代器告诉AngularJS用第一个标签作为模板为列表中的每一部手机创建一个元素。
正如我们在第0步时学到的,包裹在和phone.snippet周围的花括号标识着数据绑定。
和常量计算不同的是,这里的表达式实际上是我们应用的一个数据模型引用,这些我们在PhoneListCtrl控制器里面都设置好了。
模型和控制器在PhoneListCtrl控制器里面初始化了数据模型(这里只不过是一个包含了数组的函数,数组中存储的对象是手机数据列表):app/js/controller.js:function PhoneListCtrl($scope) {$scope.phones = [{"name": "Nexus S","snippet": "Fast just got faster with Nexus S."},{"name": "Motorola XOOM? with Wi-Fi","snippet": "The Next, Next Generation tablet."},{"name": "MOTOROLA XOOM?","snippet": "The Next, Next Generation tablet."}];}尽管控制器看起来并没有起到什么控制的作用,但是它在这里起到了至关重要的作用。
AngularJS初始化加载流程⼀、AngularJS 初始化加载流程1、浏览器载⼊HTML,然后把它解析成DOM。
2、浏览器载⼊angular.js脚本。
3、AngularJS等到DOMContentLoaded事件触发。
4、AngularJS寻找ng-app指令,这个指令指⽰了应⽤的边界。
5、使⽤ng-app中指定的模块来配置注⼊器($injector)。
6、注⼊器($injector)是⽤来创建“编译服务($compile service)”和“根作⽤域($rootScope)”的。
7、编译服务($compile service)是⽤来编译DOM并把它链接到根作⽤域($rootScope)的。
8、ng-init指令将“World”赋给作⽤域⾥的name这个变量。
9、通过{{name}}的替换,整个表达式变成了“Hello World”。
⼆、AngularJS Provider/Service/Factory1、什么是 provider ?provider 可以为应⽤提供通⽤的服务,形式可以是常量,也可以是对象。
⽐如我们在 controller ⾥注⼊进来的 $http, $scope 都可以认为是 provider。
1 2 3 4 5app.controller('MainCtrl', function($scope, $http) { $http.get(....).then(.....);}2、provider 现在让我们⾃⼰来定制⼀个 provider 12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30// ⽅法 1$provide.provider('test', {n:1;$get: function() {return n;};});// ⽅法 2$provide.provider('test', function() {this.n = 2;this.$get = function() {return n;};});// 使⽤app.controller('MainCtrl', function($scope, test) { $scope.test = test;});30让我们看看 provider 的内部实现代码1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17function provider(name, provider_) {if(isFunction(provider_)) {provider_ = providerInjector.instantiate(provider_);}if(!provider_.$get) {throw Error('Provider '+ name + ' must define $get factory method.'); }return providerCache[name + providerSuffix] = provider_;}可以看到 provider 的基本原则就是通过实现 $get ⽅法来进⾏单例注⼊,使⽤时获得的就是 $get 执⾏后的结果。
AngularJS的三⽬运算符以下演⽰的是在AngularJS的{{}}表达式中使⽤三⽬运算符,其实,在Javascript中,三⽬运算符的格式也与其⼀模⼀样,包括简写。
<div ng-if="scope=='all'" class="outline-border">结果:巡检路线数量:<strong>{{statistics.routesCount==undefined?0:statistics.routesCount}}</strong>,覆盖设备设施总数:<strong>{{statistics.routeEqTotal==undefined?0:statistics.routeEqTotal}}</strong>,巡检整体覆盖率:<strong>{{statistics.eqCoverRate==undefined?0:statistics.eqCoverRate}}%</strong>,特种设备数量:<strong>{{statistics.routeSpecialEqTotal==undefined?"⽆":statistics.routeSpecialEqTotal}}</strong>,特种设备巡检覆盖率:<strong>{{statistics.eqSpecialCoverRate==undefined?0:statistics.eqSpecialCoverRate}}%</strong>.</div>如果是字符串,需要使⽤引号。
简写<div ng-if="scope=='all'" class="outline-border">结果:巡检路线数量:<strong>{{statistics.routesCount?statistics.routesCount:"字符串需使⽤引号"}}</strong>,覆盖设备设施总数:<strong>{{statistics.routeEqTotal?statistics.routeEqTotal:0}}</strong>,巡检整体覆盖率:<strong>{{statistics.eqCoverRate?statistics.eqCoverRate:0}}%</strong>,特种设备数量:<strong>{{statistics.routeSpecialEqTotal?statistics.routeSpecialEqTotal:0}}</strong>,特种设备巡检覆盖率:<strong>{{statistics.eqSpecialCoverRate?statistics.eqSpecialCoverRate:0}}%</strong>.</div>。
$watch的用法$watch 是 AngularJS 中用于监视(观察)模型数据变化的一个核心机制。
在 AngularJS 中,$watch 函数用于监听作用域中特定表达式的变化,并在其变化时执行回调函数。
下面是 $watch 的基本用法:$scope.$watch('expression', function(newVal, oldVal) { // 在表达式值变化时执行的回调函数// newVal: 新的表达式值// oldVal: 之前的表达式值});其中:'expression' 是一个字符串,表示需要被监视的表达式。
function(newVal, oldVal) 是一个回调函数,当表达式的值发生变化时被调用。
newVal 是表达式的新值。
oldVal 是表达式的旧值。
示例:javascriptCopy codevar app = angular.module('myApp', []);app.controller('myCtrl', function($scope) {$ = 'John';$scope.$watch('name', function(newVal, oldVal) {console.log('Name changed from ' + oldVal + ' to ' + newVal);});// 修改 name 的值$ = 'Doe'; // 输出: Name changed from John to Doe});在上面的例子中,$watch 监视了 $ 的变化,并在其变化时输出相应的信息。
需要注意的是,虽然 $watch 是 AngularJS 1.x 版本中的重要概念,但在较新的 Angular 版本(如 Angular 2+)中,这一机制已经被更强大的 RxJS 和 Angular 的变更检测系统所取代。
ng-show的用法ng-show是AngularJS中的一个指令,它用于控制DOM元素的可见性。
使用ng-show 指令,我们可以根据指令的表达式的真假值来显示或隐藏一个DOM元素。
本文将详细介绍ng-show指令的用法及注意事项。
1.语法```ng-show="expression"```expression是一个AngularJS表达式,可以用来控制DOM元素的显示与隐藏。
2.用法示例假设我们有一个div元素,内容如下:```<div ng-show="showContent">这是要显示的内容。
</div>```我们可以在controller中定义一个$scope变量showContent,通过修改它的值来控制div元素的显示与隐藏。
示例代码如下:```angular.module('myApp', []).controller('myCtrl', function($scope) {$scope.showContent = true;});```在上述代码中,我们定义一个名为myApp的AngularJS应用,并在myCtrl控制器中定义一个showContent变量,初始化为true。
此时,div元素默认为显示状态。
如果我们想要将div元素隐藏,只需要将showContent变量的值改为false即可。
示例代码如下:在上述代码中,我们将showContent变量的值改为false,此时div元素将被隐藏。
3.表达式说明(1)指令在上述代码中,我们使用ng-show来控制一个包含多个<li>元素的<ul>元素的可见性。
如果persons数组中有数据,则ul元素显示;否则,ul元素隐藏。
(2)过滤器ng-show指令也可以使用AngularJS的过滤器。
我们可以使用一个以$符号为前缀的特殊过滤器$,来判断一个元素是否包含某个关键词。
AngularJS 表达式AngularJS 使用表达式把数据绑定到HTML。
AngularJS 表达式写在双大括号内:{{ expression }} 。
AngularJS 表达式把数据绑定到HTML,这与ng-bind 指令有异曲同工之妙。
AngularJS 将在表达式书写的位置"输出"数据。
AngularJS 表达式很像JavaScript 表达式:它们可以包含文字、运算符和变量。
实例{{ 5 + 5 }} 或{{ firstName + " " + lastName }}
AngularJS 数字
<div ng-app="" ng-init="quantity=1;cost=5">
<p>总价:{{ quantity * cost }}</p>
</div>
使用ng-bind 的相同实例:
<div ng-app="" ng-init="quantity=1;cost=5">
<p>总价:<span ng-bind="quantity * cost"></span></p>
</div>
使用ng-init 不是很常见,一般通过控制器controller来初始化
AngularJS 字符串
<div ng-app="" ng-init="firstName='John';lastName='Doe'">
<p>姓名:{{ firstName + " " + lastName }}</p>
</div>
AngularJS 对象
<div ng-app="" ng-init="person={firstName:'John',lastName:'Doe'}">
<p>姓为{{ stName }}</p>
</div>
AngularJS 数组
<div ng-app="" ng-init="points=[1,15,19,2,40]">
<p>第三个值为{{ points[2] }}</p>
</div>
AngularJS 表达式与JavaScript 表达式
类似于JavaScript 表达式,AngularJS 表达式可以包含字母,操作符,变量。
与JavaScript 表达式不同,AngularJS 表达式可以写在HTML 中。
与JavaScript 表达式不同,AngularJS 表达式不支持条件判断,循环及异常。
与JavaScript 表达式不同,AngularJS 表达式支持过滤器。