在表达式AngularJS中表达

时间:2014-03-20 14:43:48

标签: javascript angularjs

是否可以评估表达式中的表达式?

例如:

<span ng-bind-template="{{test}}"></span>

test如下:

$scope.test = '{{a}} is equal to {{b}}';

ab可以是任何东西,让我们假设两个整数。

所以我想基本上对它进行两次评估。

也许我应该创建一个过滤器并在那里使用$ interpolate?

2 个答案:

答案 0 :(得分:0)

您可以手动$compile

scope.a = "1";
scope.b = "1";
var element = $compile('{{a}} is equal to {{b}}')(scope);

答案 1 :(得分:0)

您有几种选择。可以使用$parse服务评估单个表达式。这是没有胡须的东西,即{{}}。请注意,第一个调用为表达式创建一个函数,第二个调用传递一个对象来对其进行评估:

parseA = $parse('a');
console.log(parseA({ a: 1 })); // 1 

可以使用$interpolate评估复杂表达式。这将解析胡须的代码,并针对您传递的对象评估其中的表达式。同样,第一次调用会创建插值函数,第二次调用会根据您传入的内容对其进行评估。我相信这就是您要查找的内容:

interpolate = $interpolate('{{a}} is equal to {{b}}');
console.log(interpolate({ a: 1, b: 2})); // 1 is equal to 2 

最后,如果您想拥有完整的数据绑定代码段,请使用$compile。这会将$scope绑定到元素,因此它具有侦听器并参与摘要等。

compile = $compile('<div>{{a}}</div>');
scope = $scope.$new();
scope.a = 1; 
compile(scope); // <div>1</div> 

这是一个使用所有三种技术的完整工作小提琴:http://jsfiddle.net/jeremylikness/CAHKE/