Angular插值系统中的点(嵌套)表示法

时间:2016-03-06 21:21:20

标签: javascript angularjs

说我有一个对象,例如:

obj = {foo: 42, bar: 'moo'}

和插值字符串如:

s = 'Do {{ bar }} {{ foo }} times.'

在Angular中插入此内容:

var interp = $interpolate(s);
var res = interp(obj);
console.log(res);  // <--- This will return 'Do moo 42 times.'

有没有办法可以表达点缀/嵌套表示法?例如:

obj = {n: {foo: 42}, bar: 'moo'}
s = 'Do {{ bar }} {{ n.foo }} times.'  // <--- This doesn't work

var interp = $interpolate(s);
var res = interp(obj);
console.log(res);

1 个答案:

答案 0 :(得分:2)

$parse服务可以解决您的问题。

  

$ parse service将角度表达式转换为函数。

您应该将表达式 n.foo 转换为函数:

var parserFunc = $parse(obj.x)

现在,如果将parserFunc函数与要解析的参数一起使用,它将根据表达式返回值。解决方案可以是:

var module = angular.module('name', []);

module.directive('app', ['$interpolate','$parse', function ($interpolate,$parse) {
    return {
    link: function () {
      var obj = {n: {foo: 42}, bar: 'moo', x: 'n.foo'};
      obj.parserFunc = $parse(obj.x);

      var s = 'Do {{ bar }} {{ parserFunc(this) }} times.';  // <--- x is 'n.foo'

      var interp = $interpolate(s);
      var res = interp(obj);
      console.log(res);
    }
  }
}]);

angular.bootstrap(document, ['name']);

代码在jsfiddle.net/utnqdfwd/5/

中正常工作