是否可以评估表达式中的表达式?
例如:
<span ng-bind-template="{{test}}"></span>
test
如下:
$scope.test = '{{a}} is equal to {{b}}';
a
和b
可以是任何东西,让我们假设两个整数。
所以我想基本上对它进行两次评估。
也许我应该创建一个过滤器并在那里使用$ interpolate?
答案 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/