AngularJs $interpolate 和 $parse
$interpolate
将一个字符串编译成一个插值函数。HTML编译服务使用这个服务完成数据绑定。
使用:$interpolate(text,[mustHaveExpression],[trustedContext],[allOrNothing]);
text:需要被编译的字符串。
mustHaveExpression:boolean,如果为true,那么text必须含有嵌入其中的表达式,不然将会返回null,而不是预期的interpolate function,默认为false。
trustedContext:string,如果这个参数被提供,那么在返回相应的函数之前会使用$sce.getTrusted(interpolatedResult, trustedContext)对返回的结果做处理。
$interpolate带有一个可选的第四个参数,allOrNothing。如果allOrNothing为true,插值函数将会返回未定义除非所有嵌入表达式的计算结果不为undefined。
使用代码:
<div ng-app="Demo" ng-controller="testCtrl as ctrl">
<input ng-model="ctrl.text" />{{ctrl.value}}
</div>
  (function(){
     angular.module('Demo', [])
     .controller('testCtrl',["$interpolate","$scope",testCtrl]);
     function testCtrl($interpolate,$scope) {
        var vm = this;
        var obj = { value: "Hello" };
        vm.text = "World";
        $scope.$watch("ctrl.text",function(n,o){
           var interpolate = $interpolate("{{value}} " + n);
           vm.value = interpolate(obj);
        })
     }
  }());
$parse
将Angular表达式转换为函数。
使用:$parse(expression);
expression:被编译的表达式。
返回:表示表达式编译后的函数。function(context,locals)
context:对象,含有需要解析的语句中的表达式(通常是一个scope对象)。
locals:对象,局部变量的上下文对象,用于重写上下文中的值。
属性:
literal:boolean,表达式的顶节点是否是一个javascript字面量。
constant:boolean, 表达式是否全部是由javascript的常量字面量组成。
assign:function(context,locals),可以用来在给定的上下文中修改表达式的值。
使用代码:
<div ng-app="Demo" ng-controller="testCtrl as ctrl">
{{ctrl.ParsedValue}}
</div>
  (function(){
     angular.module('Demo', [])
     .controller('testCtrl',["$parse",testCtrl]);
     function testCtrl($parse) {
         var context = {
             add: function (a, b) { return a + b; },
            mul: function (a, b) { return a * b }
         };
         var data = {a: 2, b: 3, c: 4};
         this.value = context.mul(data.a,context.add(data.b,data.c));// 平常的函数嵌套调用   2*(3+4) = 14
         var expression = "mul(a, add(b, c))";// 表达式,将被转换为函数
         this.ParsedValue = $parse(expression)(context, data); //执行上一句的函数   2*(3+4) = 14
     }
  }());
AngularJs $interpolate 和 $parse的更多相关文章
- Angular  - - $interpolate 和 $parse
		$interpolate 将一个字符串编译成一个插值函数.HTML编译服务使用这个服务完成数据绑定. 使用:$interpolate(text,[mustHaveExpression],[truste ... 
- angular源码分析:angular中脏活累活的承担者之$interpolate
		一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ... 
- angularjs之表达式
		一:angularjs表达式的解析 angularjs会在运行$digest循环中自动解析表达式,但有时手动解析表达式也是非常用用的. angularjs通过$parse这个内部服务来进行表达式的运算 ... 
- $parse , $interpolate ,$complie , $destroy
		$parse 是angular 提供的javascript解析器 . var getter = $parse(expression); var setter = getter.assign; cont ... 
- angularjs字符串插值($interpolate)
		<!DOCTYPE html> <html lang="zh-CN" ng-app="app"> <head> <me ... 
- AngularJS 插值字符串 $interpolate
		定义: $interpolate:编译一段带有嵌入标记的语句,然后返回一个interpolate(插值)函数.使用: $interpolate(text,[mustHaveException],[tr ... 
- JSON.parse()和JSON.stringify()
		1.parse 用于从一个字符串中解析出json 对象.例如 var str='{"name":"cpf","age":"23&q ... 
- Convert.ToInt32()、int.Parse()和(int)三者的区别
		Convert.ToInt32将object类类型转换成int类型,如Convert.ToInt32(session["shuzi"]); (int)适合简单数据类型之间的转换: ... 
- JSON.stringify()与JSON.parse()
		JSON.stringify()用于把一个对象解析成字符串,如 var student = { age: 23, name: 'wang' } JSON.stringify(student); 结果: ... 
随机推荐
- shell 使用
			echo -e "1\t2\t3" #-e echo -e "\e[1;31m This is red text \e[0m" #color echo -e & ... 
- MySQL for mac使用记录
			一.登录 打开终端,输入/usr/local/mysql/bin/mysql -u root -p 初次进入mysql,密码为空.当出现mysql>提示符时,表示你已经进入mysql中.键入ex ... 
- Tensorflow学习笔记1:Get Started
			关于Tensorflow的基本介绍 Tensorflow是一个基于图的计算系统,其主要应用于机器学习. 从Tensorflow名字的字面意思可以拆分成两部分来理解:Tensor+flow. Tenso ... 
- Python时间性能测量
			主要有以下三种方式: 一,CPU时间 time.clock() 测量CPU时间,比较精准,通过比较程序运行前后的CPU时间差,得出程序运行的CPU时间. 二, 时钟时间 time.time() 测量时 ... 
- js的几种排序
			转载:http://www.jb51.net/article/81520.htm 一.冒泡排序 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ... 
- js中各种宽度高度总结
			offsetWidth 是对象的可见宽度,包滚动条等边线,会随窗口的显示大小改变 IE6.0.FF1.06+:offsetWidth = width + padding + borderoffsetH ... 
- 【JQuery】jQuery.inArray 确定第一个参数在数组中的位置
			函数:jQuery.inArray(value,array,[fromIndex]) 解释: value:用于在数组中查找是否存在 array:待处理数组. ... 
- C# 多线程防止卡死
			软件界面的响应特性是判断一款软件的非常重要的方面.一般来说,不管你软件功能做得有多么奇妙,如果软件有一点点死机的感觉都会让用户感到很讨厌,甚至怀疑你软件里是否藏有更大的问题. 要提高界面的响应特性,最 ... 
- 网页端压缩解压缩插件JSZIP库的使用
			JSZIP这个库支持在网页端生成zip格式的文件, 官方网站是:http://stuk.github.io/jszip/ 官方网站的DEMO如下: <!DOCTYPE html> < ... 
- Hibernate-注解-实体类
			@Entity //继承策略.另一个类继承本类,那么本类里的属性应用到另一个类中 @Inheritance(strategy = InheritanceType.JOINED ) @Table ... 
