[英]Expression in an expression, AngularJS
可以在表达式内求值吗?
例如:
<span ng-bind-template="{{test}}"></span>
其中test
如下:
$scope.test = '{{a}} is equal to {{b}}';
a
和b
可以是任意值,假设两个整数。
因此,我想对其进行两次评估。
也许我应该只创建一个过滤器并在其中使用$ interpolate?
您可以使用以下命令手动对其进行$编译 :
scope.a = "1";
scope.b = "1";
var element = $compile('{{a}} is equal to {{b}}')(scope);
您有几种选择。 可以使用$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/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.