Javascript 角度'中的点(嵌套)表示法;s插值系统

Javascript 角度'中的点(嵌套)表示法;s插值系统,javascript,angularjs,Javascript,Angularjs,假设我有一个对象,例如: obj = {foo: 42, bar: 'moo'} 和插值字符串,例如: s = 'Do {{ bar }} {{ foo }} times.' 以角度对其进行插值: var interp = $interpolate(s); var res = interp(obj); console.log(res); // <--- This will return 'Do moo 42 times.' var interp=$interpole; var re

假设我有一个对象,例如:

obj = {foo: 42, bar: 'moo'}
和插值字符串,例如:

s = 'Do {{ bar }} {{ foo }} times.'
以角度对其进行插值:

var interp = $interpolate(s);
var res = interp(obj);
console.log(res);  // <--- This will return 'Do moo 42 times.'
var interp=$interpole;
var res=内部(obj);
console.log(res);// 服务可以解决您的问题

$parse服务将角度表达式转换为函数

应将表达式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']);
var module=angular.module('name',[]);
module.directive('app',['$interpolate','$parse',function($interpolate,$parse){
返回{
链接:函数(){
var obj={n:{foo:42},bar:'moo',x:'n.foo'};
obj.parserFunc=$parse(obj.x);

var s='Do{{bar}}{{parserFunc(this)}}泰晤士报。;//你的代码在
jsfiddle
中运行得很好。试试@DmitriyLoskutov的确,我对自己的代码感到困惑。不管怎样,有什么方法可以计算一个已经计算过的插值吗?我的意思是,看看我粘贴的小提琴。
x
n.foo
,但是我如何引用对象本身进行插值
{x}
将实际返回
obj.n.foo
的值?我猜。但我认为这不好:)尝试从
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']);