热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

angularjs表达式-Expression

   紧接上节谈到再谈angularjsDI(DependencyInjection),在这里介绍关于angularjs的表达式expression。expression指的是javascri

    紧接上节谈到再谈angularjs DI(Dependency Injection),在这里介绍关于angularjs的表达式expression。expression指的是Javascript的一小片段代码,通常用于绑定(binding)例如:` expression `。在angularjs中是通过$parse service解析。

    $parse用法: $parse(expression);

  1.      参数:Javascript代码片段。
  2.      返回值:{function(context, locals)},表达式编译结果:
    1. context:嵌入表达式执行的作用于scope。
    2. locals:本地变量,常用于替换重写context。
    3. 返回值同样带有assign属性,允许为表达式赋值。

  下面的表达式在angularjs将都是合法的表达式:

  1. 1+2
  2. 3*10 | currency
  3. user.name

angularjs表达式vs. Javascript表达式

    angularjs视图表达式有点像Javascript表达式,但是并不是利用Javascript表达式eval()函数解析执行的,与Javascript表达式区别如下:

  1. 所有属性都依赖于scope作用于。并不是Javascript的全局作用于window。
  2. 表达式计算兼容处理null和undefined,而Javascript则会抛出NullPointerExceptions异常。
  3. 没有控制流程语句,条件,循环throw。
  4. 过滤器,多余angularjs表达式计算结果可以通过过滤器转化格式,|表达式,如时间,货币,数字格式等。

   注: 对于angularjs表达式,可以采用$eval()方法解析执行。

 

Demo

html:

 

  1. > 
  2.  
  3. <html ng-app> 
  4.  
  5. <head> 
  6.  
  7. <script src="http://code.angularjs.org/angular-1.0.2.min.js">script> 
  8.  
  9. <script src="script.js">script> 
  10.  
  11. head> 
  12.  
  13. <body> 
  14.  
  15. <div ng-controller="Cntl2" class="expressions"> 
  16.  
  17. Expression:  
  18.  
  19. <input type='text' ng-model="expr" size="80"/> 
  20.  
  21. <button ng-click="addExp(expr)">Evaluatebutton> 
  22.  
  23. <ul> 
  24.  
  25. <li ng-repeat="expr in exprs"> 
  26.  
  27. <a href="" ng-click="removeExp($index)">Xa> ]  
  28.  
  29. <tt>`expr`tt> => <span ng-bind="$parent.$eval(expr)">span> 
  30.  
  31. li> 
  32.  
  33. ul> 
  34.  
  35. div> 
  36.  
  37. body> 
  38.  
  39. html> 
  40.  

js:

  1. function Cntl2($scope) {  
  2.  
  3. var exprs = $scope.exprs = [];  
  4.  
  5. $scope.expr = '3*10|currency';  
  6.  
  7. $scope.addExp = function(expr) {  
  8.  
  9. exprs.push(expr);  
  10.  
  11. };  
  12.  

 

$scope.removeExp = function(index) {

exprs.splice(index, 1);

};

}

jsfiddle演示:http://jsfiddle.net/whitewolf/yduLt/1/

属性执行

     angularjs所有的表达式执行都将依赖于一个作用于scope,不同于Javascript的window全局作用域.如果你想引用全局作用于window,这必须依赖于上节的DI特性中引用$window service. 实例如下:

html:

  1. > 
  2.  
  3. <html ng-app> 
  4.  
  5. <head> 
  6.  
  7. <script src="http://code.angularjs.org/angular-1.0.2.min.js">script> 
  8.  
  9. <script src="script.js">script> 
  10.  
  11. head> 
  12.  
  13. <body> 
  14.  
  15. <div class="example2" ng-controller="Cntl1"> 
  16.  
  17. Name: <input ng-model="name" type="text"/> 
  18.  
  19. <button ng-click="greet()">Greetbutton> 
  20.  
  21. div> 
  22.  
  23. body> 
  24.  
  25. html> 
  26.  

js:

  1. function Cntl1($window, $scope){  
  2.  
  3. $scope.name = 'World';  
  4.  
  5.    
  6.  
  7. $scope.greet = function() {  
  8.  
  9. ($window.mockWindow || $window).alert('Hello ' + $scope.name);  
  10.  
  11. }  
  12.  
  13. }  
  14.  

jsfiddle演示:http://jsfiddle.net/whitewolf/MF2Ku/1/

兼容执行

    如上所述:angularjs表达式计算兼容处理null和undefined不会抛出任何异常,因为这将现实处理在view显示,而Javascript则会抛出NullPointerExceptions异常。例如表达式

`a`.`b`.`c`,与其同等效果的Javascript代码将是{{((a||{}).b||{}).c}}。 无控制流程

    在angularjs表达式中将不存在条件,循环,throw控制流程语句。因为angularjs作为mvc或者贴近pm模式要求表现层逻辑必须包含在controller中,而不是view,view应该足够的被动。在表达式模式中都尽力将表现层不变的表现逻辑和多样易变的UI view中抽离出来,便于更好的自动化测试构建等。

过滤器(Filters)

    数据仅作为一种持久化存储领域模型(表现层或者确切的成为视图模型viewmodel),当展现给用户的时候很多时候需要更友好的方式,比如时间,数字,货币格式本地化,

例如: name | uppercase , 123 | number:2,3*10|currency。

   filters支持链式写法,如何powershell或者其他操作系统外壳语言一样的管道式模型,形如 value | filter1 | filter2。

 

   其他资源可参考本博客中其他angularjs随笔或者angularjs官方文档http://angularjs.org/。


推荐阅读
  • 深入理解Vue.js:从入门到精通
    本文详细介绍了Vue.js的基础知识、安装方法、核心概念及实战案例,帮助开发者全面掌握这一流行的前端框架。 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 本文介绍了如何利用JavaScript或jQuery来判断网页中的文本框是否处于焦点状态,以及如何检测鼠标是否悬停在指定的HTML元素上。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 在前两篇文章中,我们探讨了 ControllerDescriptor 和 ActionDescriptor 这两个描述对象,分别对应控制器和操作方法。本文将基于 MVC3 源码进一步分析 ParameterDescriptor,即用于描述 Action 方法参数的对象,并详细介绍其工作原理。 ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • Redux入门指南
    本文介绍Redux的基本概念和工作原理,帮助初学者理解如何使用Redux管理应用程序的状态。Redux是一个用于JavaScript应用的状态管理库,特别适用于React项目。 ... [详细]
  • 深入解析SpringMVC核心组件:DispatcherServlet的工作原理
    本文详细探讨了SpringMVC的核心组件——DispatcherServlet的运作机制,旨在帮助有一定Java和Spring基础的开发人员理解HTTP请求是如何被映射到Controller并执行的。文章将解答以下问题:1. HTTP请求如何映射到Controller;2. Controller是如何被执行的。 ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
author-avatar
漫天星雨2000
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有