Angular Expressions
Angular表达式
【原文】https://code.angularjs.org/1.2.23/docs/guide/expression
【翻译者】kowen@live.cn
For example, these are valid expressions in Angular:
Angular表达式是看起来和javascript类似的代码片段,通常是被放到双层大括号里:{{表达式}}。
例如,下面是一些有效的Angular表达式:
1+2 a+b user.name items[index]
Angular Expressions vs. JavaScript Expressions
Angular 表达式和 js表达式的对比
Angular表达式和Javascript表达式非常相似,但有以下几点不同:
上下文:Javascript表达式在全局窗口中起作用,Angular的表达式是在scope范围内中起作用。(不太恰当?)
对出错宽大处理:Javascript计算含有未定义属性的表达式会产生ReferenceError或者TypeError,Angular 表达式允许计算含有未命名或者null的表达式。
禁止流程控制语句:Angular表达式中不能包含条件、循环或者异常语句。
过滤器:你可以对Angular表达式进行格式化得到要显示的结果。
如果需要运行比较复杂的Javascript语句,可以在控制器(controller)中创建一个方法,然后从视图(view)中去调用它。如果你想运行eval()计算angular表达式,你应当使用$eval()方法。
下面的例子可以计算各种表达式:
index.html
<div ng-controller="ExampleController" class="expressions">
Expression:
<input type='text' ng-model="expr" size="80"/>
<button ng-click="addExp(expr)">Evaluate</button>
<ul>
<li ng-repeat="expr in exprs track by $index">
[ <a href="" ng-click="removeExp($index)">X</a> ]
<tt>{{expr}}</tt> => <span ng-bind="$parent.$eval(expr)"></span>
</li>
</ul>
</div>
script.js
angular.module('expressionExample', [])
.controller('ExampleController', ['$scope', function($scope) {
var exprs = $scope.exprs = [];
$scope.expr = '3*10|currency';
$scope.addExp = function(expr) {
exprs.push(expr);
};
$scope.removeExp = function(index) {
exprs.splice(index, 1);
};
}]);
Context
上下文
Angular不使用Javascript的eval()计算表达式的值,Angular有自己的$parse服务来计算表达式。
Angular表达式没有访问window、doucument或者location这些全局变量的权限。这样做的目的是:防止不小心访问了相同名称的全局的变量,很多难以排除的bug都是这个原因引起的(应该是这个意思吧)。
那怎么访问global资源呢?有一个变通的方式:Angular表达式调用的function中,可以使用$window和$location等服务来访问global资源。例子:
index.html
<div class="example2" ng-controller="ExampleController">
Name: <input ng-model="name" type="text"/>
<button ng-click="greet()">Greet</button>
<button ng-click="window.alert('Should not see me')">Won't greet</button>
</div>
script.js
angular.module('expressionExample', [])
.controller('ExampleController', ['$window', '$scope', function($window, $scope) {
$scope.name = 'World';
$scope.greet = function() {
$window.alert('Hello ' + $scope.name);
};
}]);
Forgiving
宽大处理
Angular表达式求值对undefined和null都采取了宽大处理的态度。在Javascript中,如果a不是一个对象,那么a.b.c将会抛出一个异常。但是这个表达式本身是有意义的,它主要是用来作数据绑定的,例如
{{a.b.c}}
其实,这种情况与其抛出异常,不如直接啥也不显示(也许是正在等待服务器的相应,等一会就会变成defined了)。如果表达式不进行宽大处理的话,我们写的代码就乱套成这个样子了:{{((a||{}).b||{}).c}}
类似的,调用一个包含undefined或这null的function a.b.c(),返回值是undefined。
No Control Flow Statements
禁用流程控制语句
除了三元运算符(a ? b : c),angular表达式中不允许使用流程控制语句。这么做的原因是Angular秉承着这样的思想:程序的逻辑部分应该在控制器中实现,不应该在视图中出现。如果在视图中必须使用条件、循环或者抛出异常,直接使用Javascript方法吧。
$event
事件对象
ngClick、ngFocus类似的指令会在表达式的有效范围内产生一个$event对象。
index.html
<div ng-controller="EventController"> <button ng-click="clickMe($event)">Event</button> <p><code>$event</code>: <pre> {{$event | json}}</pre></p> <p><code>clickEvent</code>: <pre>{{clickEvent | json}}</pre></p> </div>
script.js
angular.module('eventExampleApp', []). controller('EventController', ['$scope', function($scope) { /* * expose the event object to the scope */ $scope.clickMe = function(clickEvent) { $scope.clickEvent = simpleKeys(clickEvent); console.log(clickEvent); }; /* * return a copy of an object with only non-object keys * we need this to avoid circular references */ function simpleKeys (original) { return Object.keys(original).reduce(function (obj, key) { obj[key] = typeof original[key] === 'object' ? '{ ... }' : original[key]; return obj; }, {}); } }]);
注意:这个例子中,$event对象可以传递到clickMe中显示,但是它却不能使用{{$event}}显示,因为$event是在这个绑定的scope之外(也就是$event只在ngClick指定的clickMe中存在)。
相关推荐
**AngularJS 0002:表达式** AngularJS 是一个强大的前端JavaScript框架,由Google维护,用于构建动态Web应用程序。在AngularJS中,表达式是核心概念之一,它们允许我们在视图(View)中嵌入逻辑,从而实现数据绑定...
1. **模板**:Angular使用HTML作为模板语言,扩展了HTML的功能,允许开发者在HTML中嵌入Angular表达式和指令。`模板2.html`和`模板3.html`可能包含了不同级别的视图模板示例,展示了如何利用Angular指令动态渲染数据...
5. **模板(Templates)**:模板是HTML与Angular表达式混合的视图定义,使用Angular语法来动态渲染内容。 6. **依赖注入(Dependency Injection, DI)**:Angular4的核心特性之一,允许组件和服务请求和接收其他...
模板语法是Angular2的另一个重要部分,它允许我们在HTML中嵌入Angular表达式和指令。书中会详细阐述如何使用双大括号{{ }}绑定属性和文本,以及使用[]和()分别处理输入和输出事件。 服务(Service)在Angular2中...
模板语法是Angular的一个亮点,它允许在HTML中嵌入Angular表达式和指令。Angular指令如`*ngIf`、`*ngFor`、`[property]`和`(event)`等,扩展了HTML的功能,使得动态渲染和事件处理变得简单易行。 此外,Angular支持...
5. **模板语法**:在HTML模板中,可以使用Angular表达式和结构指令来动态控制UI。 6. **路由**:Angular的路由功能允许用户在应用的不同视图之间导航,而无需刷新整个页面。 在项目"shortly-angular"中,开发者可能...
2. **平滑过渡**: 当locale发生变化时,它会确保所有已存在的 Angular 表达式和指令都相应更新,避免界面出现闪烁或不一致的情况。 3. **兼容性广泛**: "angular-dynamic-locale"与Angular的内置`$locale`服务紧密...
角冠词用户以图形方式构建cron表达式的基本方法。 演示可以在找到。 要求: AngularJS 1.5+用法: 在您的应用程序中包含依赖项 angular . module ( 'myApp' , [ 'angular-cron-gen' ] ) 包括提供的JS和CSS文件(或...
4. **模板(Templates)**:使用Angular表达式和指令来创建动态UI的HTML。 5. **服务(Services)**:用于封装应用程序的业务逻辑和数据管理,可以被多个组件共享。 6. **模块(Module)**: NgModule是Angular的应用组织...
9. **模板表达式**:在HTML模板中使用Angular表达式,可以直接操作数据模型。 10. **表单处理**:Angular提供了模板驱动和响应式两种表单处理方式,便于验证和数据管理。 11. **国际化(i18n)**:Angular支持多语言...
watchExpression:监听的对象,它可以是一个angular表达式如’name’,或函数如function(){return $scope.name}。 listener:当watchExpression变化时会被调用的函数或者表达式,它接收3个参数:newValue(新值), ...
在Angular5中调用第三方JavaScript插件是前端开发中的常见需求,本文将详细介绍三种主要方法来实现这一目标。这些方法可以适用包括jQuery及其插件在内的任何第三方JavaScript库。 第一种方式:在.angular-cli.json...
Angular6中实现允许输入部分中文字符的功能涉及到了正则表达式的使用。正则表达式是一种文本模式,包括普通字符(例如,字母a到z)和特殊字符(称为"元字符")。在Angular6中,可以通过正则表达式来限制或允许用户...
接下来,$parse服务是Angular的核心组件之一,它的主要职责是解析Angular表达式。当我们使用双大括号`{{ }}`进行数据绑定时,Angular内部就是利用$parse服务将这些表达式转换为函数,然后可以对Scope进行读取或写入...
3. **表达式(Expressions)**:AngularJS允许我们在HTML中使用Angular表达式,它们是JavaScript代码的简写形式,用于计算值并将其插入到DOM中。这些表达式通常用`{{ }}`括起来,如`{{ user.name }}`。示例会展示...
自信地使用 Angular 表达式和指令 创建 Angular 控制器 构建一个简单的 Angular 过滤器 构建一个简单的 Angular 指令 ##笔记 请自行尝试每个示例。 如果您遇到困难或只想查看建议的实现,请跳到以后的步骤,您可以...
* watchFn:是一个angular表达式或函数的字符串,用于指定要监听的对象。 * watchAction:是一个函数,用于指定当监听的对象发生变化时要执行的事件。 * deepWatch:是一个可选的布尔值,用于指定是否对监听的对象...
`cron`表达式源于Unix系统,用于定义周期性任务的调度,而在JavaScript环境中,我们通常使用第三方库来实现`cron`表达式的功能。 "Cron调度器"是一个工具,允许开发者创建和管理基于`cron`表达式的定时任务。这个...
从官网angularjs org扒下来的 包含angular js angular min js angular min js map angular route js angular route min js之类等等 AngularJS是为了克服HTML在构建应用上的不足而设计的 它通过新的属性和表达式...
watchFn:带有Angular 表达式或者函数的字符串,它会返回被监控的数据模型的当前值。 watchAction: 一个函数function(newValue,oldValue){},当watchFn 发生变化时会被调用 deepWatch:默认为false,监听数组的某个...