AngularJS $ parse / scope。$ eval表达式

时间:2015-09-22 15:50:32

标签: angularjs

我正在尝试使用$parse来获取所需的结果。

这是我的Example。检查script.js文件

我想解析一个表达式但是我收到了错误。我该如何解决这类数据?

这是我的代码

    scope.data = {name:{_en:"username", _ar:'مفقود '}}

    // set variable in scope like scope.name_en = scope.data._en, scope.name_ar = scope.data._ar

    for(var i in scope.data) for(var j in scope.data[i]) scope[i+j] = scope.data[i][j];
    scope.messages2 = [{code:200, msg_en:"{{name_en}} is missing.", msg_ar:"مفقود {{name_ar}}"}];
    scope.finalMegs = [];

    for( var i in scope.messages2) {
      var obj = {};

      for(var j in scope.messages2[i]){
        if(j == 'code') continue;
        console.log(scope.$eval(scope.messages2[i][j]) );
        obj[j] = $parse(scope.messages2[i][j])
      }
      /*
      required object is {msg_en = "username is missing.", msg_ar:"مفقود مفقود "}
      */
      scope.finalMegs.push(obj);
    }
    console.log(scope.finalMegs);

谢谢。

1 个答案:

答案 0 :(得分:1)

您的邮件语法不正确,因此$parse$eval无法解析邮件。你应该用这种格式写出来:

scope.messages2 = [
   {
      code:200, 
      msg_en:"name_en + ' is missing.'", 
      msg_ar:"'مفقود ' + name_ar"
   }
];

然后,如果您想获取已格式化消息的对象,您应该以这种方式调用$parse函数:

obj[j] = $parse(scope.messages2[i][j])(scope);

因为$parse会将角度表达式转换为函数,您应该使用scope来调用它以获得预期的结果。

但是在你的情况下,我认为你也可以将这些行替换为:

obj[j] = scope.$eval(scope.messages2[i][j]);

结果将是相同的。

Example on plunker.(我已经重新格式化了你的例子)

请详细了解使用范围示例。$ eval heredocumentation about $parse