Angular - - $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 vm = this;
var context = {
add: function (a, b) { return a + b; },
mul: function (a, b) { return a * b }
};
var data = {a: 2, b: 3, c: 4};
vm.value = context.mul(data.a,context.add(data.b,data.c));// 平常的函数嵌套调用 2*(3+4) = 14
var expression = "mul(a, add(b, c))";// 表达式,将被转换为函数
vm.ParsedValue = $parse(expression)(context, data); //执行上一句的函数 2*(3+4) = 14
}
}());

完事 -。- 这两个破东西也是在google找了好多的资料,选了些较容易区分和说明具体意义的代码,写出来运行运行.... 遇到比较少见少用的api,真TM心累啊,资料难找,理解也不是这么容易... 然后写了好多代码运行,也跑了遍源码,终于是知道了大概是个啥意思了...
Angular - - $interpolate 和 $parse的更多相关文章
- AngularJs $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); 结果: ...
随机推荐
- 设置span 宽度的完美解决方案
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- CSS之基础
css是英文Cascading Style Sheets的缩写,称为层叠样式表,用于对页面进行美化.存在方式有三种:元素内联.页面嵌入和外部引入,比较三种方式对优缺点. 语法:style = &quo ...
- Python 100例(上)
如果你已经把基础看完,可以尝试一下看看以下例子了,如果不会做也不要紧,你要尝试手动把所有的代码都敲一边.别嫌麻烦,因为都是从麻烦到简单的. 实例1: 题目:有1.2.3.4个数字,能组成多少个相互不同 ...
- jquery全选框的实现
函数实现的话: head里加入函数实现 <script language="javascript" type="text/javascript"> ...
- 浅谈SQL Server中的三种物理连接操作(HASH JOIN MERGE JOIN NESTED LOOP)
简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...
- CSU 1515 Sequence
莫队算法+map #include<cstdio> #include<cstring> #include<cmath> #include<map> #i ...
- UVA 10689 Yet another Number Sequence
简单矩阵快速幂. if(m==1) MOD=10; if(m==2) MOD=100; if(m==3) MOD=1000; if(m==4) MOD=10000; 剩下的就是矩阵快速幂求斐波那契数列 ...
- 【转】聊聊HTTPS和SSL/TLS协议
要说清楚 HTTPS 协议的实现原理,至少需要如下几个背景知识.1. 大致了解几个基本术语(HTTPS.SSL.TLS)的含义2. 大致了解 HTTP 和 TCP 的关系(尤其是“短连接”VS“长连接 ...
- Thinking in scala (8)---- 乘幂计算
递归的方式: b^n = (b^(n/2))^2 若n是偶数 b^n = b*(b^(n-1)) 若n是奇数 迭代的方式 product:存储中间结果,初始化为1 b^n = (b^2)^(n/2) ...
- 异常捕获拒绝闪退 让应用从容的崩溃UncaughtExceptionHandler
虽然大家都不愿意看到程序崩溃,但可能崩溃是每个应用必须面对的现实,既然崩溃已经发生,无法阻挡了,那我们就让它崩也崩得淡定点吧. IOS SDK中提供了一个现成的函数 NSSetUncaughtExce ...